Настройка MTA для Mutt. Отправка почты через внешний SMTP сервер. Mutt, ssmtp и отправка отчетов

Главное преимущество Mutt, как почтового клиента (по моему мнению), это то - что он консольный. Если кто-то не считает это преимуществом, то дальше можете не читать:). Но, если не менять настройки, mutt просто передает исходящую почту локальному MTA (mail transfer agent), который уже отправляет почту по своему усмотрению. По умолчанию это усмотрение сводится к тому, чтобы отправить почту с localhost (локального доменного имени любого компьютера). Письма, отправленные с такого адреса, обычно классифицируются как спам и до получателя не доходят. Но выход есть.

Выходов даже несколько, но я рассмотрю только один - настройку MTA для работы через внешний SMTP серверданном случае gmail) вместо отправки почты с localhost. Поскольку MTA существуют самые разные и многим нравится только какой-то определенный, я попытаюсь описать настройку нескольких популярных MTA.

1. Sendmail
Классический Sendmail многим не нравится из-за сложной настройки, но все-таки это очень мощный и достаточно распространенный MTA. Итак (все действия будут выполнятся пользователем root),

# apt-get install sendmail

Добавим несколько строк в /etc/mail/sendmail.mc для того, чтобы Sendmail отсылал почту через gmail (добавлять эти строчки нужно до параметров MAILER, иначе потом будет ошибка при сборке конфигов).

define(`SMART_HOST",`smtp.gmail.com")dnl
define(`confAUTH_MECHANISMS", `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN")dnl
define(`RELAY_MAILER",`esmtp")dnl
define(`RELAY_MAILER_ARGS", `TPC $h 587")dnl
FEATURE(`authinfo",`hash /etc/mail/auth/client-info")dnl

Теперь создадим папку /etc/mail/auth, а в ней - файл client-info, в котором будут храниться наши логин и пароль для [email protected].

# mkdir /etc/mail/auth
# touch /etc/mail/auth/client-info

AuthInfo:smtp.gmail.com "U:root" "I:my.name " "P:password " "M:PLAIN"
AuthInfo:smtp.gmail.com:587 "U:root" "I:my.name " "P:password " "M:PLAIN"

Для пущей безопасности можно сделать этот файл (да и папку тоже) доступными только для пользователя root

# chmod 600 /etc/mail/auth/client-info
# chmod 700 /etc/mail/auth

Преобразуем этот файл в нужный формат

# makemap -r hash /etc/mail/auth/client-info.db
Теперь выполним одно специфичное для Sendmail действие - пересборку конфигурационных файлов

# cd /etc/mail
# make

И наконец перезапускаем MTA для применения изменений

# /etc/init.d/sendmail reload

Готово. Можно отправлять почту.

2. Postfix
Postfix обладает всей мощью Sendmail, будучи полностью с ним совместимым, но при этом он гораздо проще в конфигурации. Кроме того, это мой любимый MTA, так что я не мог обойтись без описания его настройки. Итак (все действия производятся от имени root),

# apt-get install postfix

Скопируем главный настроечный файл postfix в нужное место (почему-то в Kubuntu он не устанавливается по-умолчанию)

# cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf

В конец этого файла добавим несколько строк, чтобы настроить доставку почты через gmail.

relayhost = smtp.gmail.com:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/gmail_passwd
smtp_sasl_security_options = noanonymous

# touch /etc/postfix/gmail_passwd

и добавим в него наши логин и пароль на gmail (my.name заменяем на логин, а password - на пароль).

smtp.gmail.com:587 my.name @gmail.com:password

Преобразуем этот файл в нужный формат (BDB) и для пущей безопасности защитим его от доступа простых смертных.

# postmap /etc/postfix/gmail_passwd
# chown root:postfix /etc/postfix/gmail_passwd*
# chmod 0640 /etc/postfix/gmail_passwd*

Перезапускаем Postfix для применения изменений.

# /etc/init.d/postfix restart

Настройка закончена. MTA готов к отправке почты через gmail.

3. Exim
Exim - один из самых популярных (и мощных) MTA. Именно его мне советовала Kubuntu при установке Mutt. Кроме того, exim уже упоминался в этом блоге, так что описание его настройки вполне закономерно. Итак (всё делаем с правами root),

# apt-get install exim4

Отредактируем следующие параметры в файле /etc/exim4/update-exim4.conf.conf, чтобы отправлять почту через gmail

dc_eximconfig_configtype="smarthost"
dc_smarthost="smtp.gmail.com::587"

gmail-smtp.l.google.com:my.name @gmail.com:password
*.google.com:my.name @gmail.com:password
smtp.gmail.com:my.name @gmail.com:password

Выполним следующую команду для применения новых настроек

# update-exim4.conf

На этом настройка завершена. Exim будет отправлять почту через gmail.

4. Msmtp
Как справедливо заметил Che (см. комментарии после статьи), использовать такие мощные MTA, как три предыдущие, в данной ситуации не рационально. Поэтому в данном случае, msmtp ничем не хуже остальных. Конечно, на его основе нельзя построить полноценный почтовый сервер, но ведь в данном случае это и не требуется. Итак (на этот раз всё выполняем от имени обычного пользователя),

$ sudo apt-get install msmtp

Создаем локальный файл настройки

$ touch ~/.msmtprc

и добавляем в него следующие строки (подставляем вместо my.name свой логин на gmail, а вместо password - пароль)

account default
host smtp.gmail.com
port 587
auth on
tls on
tls_starttls on
tls_certcheck off
from my.name @gmail.com
user my.name @gmail.com
password password

Ограничим права на ~/.msmtprc

$ chmod 600 ~/.msmtprc

$ sudo ln -s /usr/bin/msmtp /usr/sbin/sendmail

И на этом настройка завершена. Можно отправлять почту.

getmail - программа для забора почты с POP3 ящиков, написана на языке Python.

getmail - программа для забора почты с POP3 ящиков, написана на языке Python. Программа намного проще и удобнее в настройке, чем ее аналог fetchmail, правда, менее функциональна: в частности, отсутствует поддержка IMAP и POP3S (в документации предлагается использовать для этих целей stunnel).

Настройка По умолчанию файл конфигурации находится в ~/.getmail/getmailrc. Формат его очень прост: сначала должна присутствовать секция , в которой указываются общие настройки для всех аккаунтов, затем следует настройка отдельных аккаунтов, для которых, в частности, могут быть переопределены настройки из секции . Сейчас я приведу пример данного файла, а потом поясню, что значит каждая строчка.

Delete = 1 # удалять сообщения после получения verbose = 1 # выводить на экран отладочную информацию message_log = "~/.getmail/log" # вести журнал readall = 1 # загружать сообщения, помеченные как прочитанные postmaster = "|procmail" # перенаправлять почту procmail"у
# название учетной записи server = pop.somewhere.ru # адрес POP3-сервера username = somebody # имя пользователя password = "this is a secret" # пароль (если хотите использовать # специальные символы, надо взять в двойные кавычки) delete = 0 # для данного аккаунта оставлять письма на сервере после получения readall = 0 # для данного аккаунта не загружать сообщения, # помеченные как прочитанные
server = some.thing.net username = user password = pass

На этом настройка getmail’а заканчивается, для подробной информации читайте «man getmail», а также документацию, которая скорее всего находится в директории /usr/local/share/doc/getmail.

procmail

procmail служит для фильтрации и сортировки писем. Файл конфигурации procmail по умолчанию - ~/.procmailrc, в котором содержатся правила фильтрации. Пример ~/.procmailrc, который фильтрует различные почтовые рассылки и складывает их в разные ящики:

MAILDIR=$HOME/mail # путь к почтовому ящику LOGFILE=$HOME/.procmaillog# путь к файлу журнала
:0: * ^List-Id: bugtraq
:0: * ^List-Id: fluxbox-users
:0: * ^Subject:.*WWC.* | iconv -c -f cp1251 -t koi8-r | formail -i "Content-Type: text/plain; charset="koi8-r"" >>wwc
:0: * ^TO_(mutt-users\@mutt\.org) mutt-users
:0: inbox

В первом случае мы фильтруем список рассылки [email protected] по List-Id и помещаем письма оттуда в ящик bugtraq, аналогично поступаем со списком рассылки fluxbox-users. Третье правило немного инетерснее. Задача заключается в том, что письма уведомления с форума wwc.ru приходят в кодировке cp1251, причем не содержат заголовок «Content-Type», что несколько усложняет положение. Мы перекодируем сообщение из cp1251 в koi8-r, добавляем заголовок «Content-Type: text/plain; charset=«koi8-r»» и кладем письмо в ящик wwc. Четвертое правило: фильтуем список рассылки mutt-users, который не сожержит заголовок «List-Id». Последнее правило: складываем всю оставшуюся почту в ящик inbox. Другие примеры могут быть найдены в «man procmailex».

msmtp - это так называемый smtp-плагин для MUA. Он более стабильный и у него больше возможностей, чем у nbsmtp. Поддерживает SMTP AUTH: PLAIN, LOGIN и CRAM-MD5, IPv6, TLS зашифрованные соединения и т.д.

Настройка msmtp

Файл конфигурации по умолчанию - ~/.msmtprc. Его формат очень простой, и в большинстве случаев для настройки msmtp хватит трех строк. Пример простейшего ~/.msmtprc:

Account default host smtp.mail.ru from [email protected]

Первая строка - имя аккаунта. Имя аккаунта задается при помощи аргумента «--account=id». Если имя аккаунта не задано, используется аккаунт «default». host - адрес smtp-сервера, который вы хотите использовать для опправки писем. from - ваш e-mail адрес. Описание остальных директив файла конфигурации вы можете найти, набрав «man msmtp», там вы также найдете примеры файла конфигурации.

Настройка mutt

mutt является одним из самых функциональных и удобных консольных mail-клиентов. Файл конфигурации по умолчанию - ~/.muttrc. Пройдемся по этому файлу, я прокомментирую каждую интересную нам строчку.

Set folder = "~/mail" mailboxes =bugtraq mailboxes =fluxbox-users mailboxes =inbox mailboxes =wwc mailboxes =mutt-users
# Тут мы задаем рабочую директорию и список поточых ящиков.
set sort=threads # сортирока сообщений по тредам
set realname="Your Name" # устанавливает имя, то есть в поле from # появится Your Name «[email protected]»
ignore * unignore from: subject to cc \ date x-mailer x-url user-agent # this shows how nicely wrap long lines hdr_order from to cc date subject x-mailer user-agent
# указываем, какие заголовоки нам показывать и в каком порядке.
# Для переноса длинных строк можно использвать символ "\", # как это видно в директиве unignore.
macro index G "!getmail" macro pager G "!getmail"
# Теперь при нажатии «Shift»+«G» запускается getmail
set sendmail="/usr/local/bin/msmtp"
# а для отправки почты используется msmtp
set send_charset="us-ascii:koi8-r:utf-8"
# кодировка по умолчанию для исходящих русских сообщений -- koi8-r
subscribe bugtraq fluxbox-users mutt-users
# подписанные рассылки
# далее идут настройки цветов и другие второстепенные настройки, # пример можно найти в /usr/local/share/examples/mutt/

Теперь запускаем «mutt -y» и тестируем почтовую систему.

Документация: man getmail man procmail man procmailex man msmtp man mutt man muttrc /usr/local/share/doc/getmail/ /usr/local/share/doc/procmail/FAQ /usr/local/share/doc/mutt/manual.txt /usr/local/share/examples/getmail /usr/local/share/examples/procmail /usr/local/share/examples/mutt

(Внимание! Пути могут отличаться, если вы установили соответсивующие пакеты не с помощью системы портов FreeBSD.)

В данном посте пойдёт очередное описание данного консольного email клиента. Если Вы уже знакомы с данным клиентом, то возможно данная информация не будет очень полезной, она нужна лишь для открытия серии статей.

Mutt — это простой консольный email клиент, которые реализует подход unix к созданию программ.

Для работы с mutt существует хорошая связка программ:

fetchmail->procmail->mutt->smtp
fetchmail &mdash забирает почту с сервера
procmail &mdash фильтрует почту по ящикам
nbsmtp &mdash загружает почту на сервер

Т.к. я не осилил настройку данной связки, то если вам интересно Вы можете обратиться к ссылке . Тем более есть более хорошие связки программ, о которых будет рассказано в других постах. Тем более, что сам по себе mutt начиная с определённой версии умеет работать с smtp, pop и imap. Поэтому использование fetchmail, procmail и nbsmtp (на мой взгляд) может быть оправдано лишь тем, что в них удобнее настраиваются правила.

настройка mutt

(для полного ознакомления с возможностями mutt можно прочитать [ , ])

Настройки mutt загружаются в следующей последовательности /etc/mutt/Muttrc —> ~/.muttrc или файл ~/.mutt/muttrc и настройки из.muttrc переопределяют общесистемные настройки. Так же возможно использовать файлы вида.muttrc- подробнее про это можно найти в .

Файл настроек

Файл настроек состоит из набора команд. В каждой строке может быть одна или несколько команд. В случае, если используется несколько команд в строке, они должны разделяться точкой с запятой (;).

В файле могут содержаться комментарии, строки начинающиеся с символа хэш (#)

Символы (‘) и («) используются для ввода строк, которые содержат пробелы или другие специальные символы. Разница между символами (‘) и («), такая же как и в sh/zsh, т.е. строки заключенные в одиночные кавычки просто подставляются, а строки в двойных кавычках выполняются. Например символы, начинающиеся с \ (\n и т.п.) будут подставлены в («), но не в (‘). Для подстановки » внутри строк, заключенных в кавычки нужно их экранировать.

Символы (`) могут использоваться для запуска внешних команд. Например:

My_hdr X-Operating-System: `uname -a`

А к доступ к переменным окружения можно получить так же как и в sh/zsh осуществляется с помощью символа $.

Большим плюсом файла настройки.muttrc является возможность подгружать дополнительные файлы при помощи команды source filename. Это позволяет разбивать файл настроек на большое количество сгруппированных по назначению файлов, что сильно упрощает поддержку mutt.

пример настроек

Теперь пример простого muttrc файла:

Set arrow_cursor # выделять строку символами -> set charset="utf-8" # кодировка терминала set copy=yes # сохранять копии отправляемых писем set edit_headers="yes" # редактирование заготовков при создании письма set menu_scroll # прокручивать список писем по 1 строке set mail_check=3 # интервал проверки почты set mbox=+mbox # файл для хранения прочитанных сообщений set mbox_type=Maildir set record=+sent # куда сохранять отправленные письма set signature="~/.mutt/.signature" # файл с подписью к сообщениям set send_charset="utf-8:koi8-r:windows-1251:us-ascii:iso-8859-1" # кодировка в которой отправлять письма set move = no # переносить письма из папки IMAP set use_from = "yes" set envelope_from = "yes" set beep = "no" # не пищать set imap_keepalive = 900 set use_from set reverse_name # подставлять в поле FROM данные из поля TO set ssl_starttls=yes # использование tls set rfc2047_parameters = yes # правильно декодировать не utf поле from # сортировка писем при просмотре set sort=threads # сортировать по веткам дискуссии< set sort_aux=reverse-date-received # set sort_browser=reverse-date # ви ignore * # игнорировать все заголовки unignore from: date subject to cc # разрешить следующие поля from unignore x-mailing-list: posted-to: # разрешить следующие поля unignore x-mailer: hdr_order Date From To Cc # порядок полей

А теперь о том, как настроить почтовые ящики.

Set folder=/home/qnikst/.Mail/ # папка для писем set from="@gmail.com" # поле from по умолчанию set spoolfile="+gmail/INBOX" # файл почты account-hook . "unset preconnect imap_user imap_pass imap_authenticators;" # удалить imap данные folder-hook gmail "set from="@gmail.com"" # в случае если мы в папке gmail folder-hook gmail "set postponed="+gmail//Drafts"" # установить папку черновиков # установка настроек smtp на основе hook"ов на послании письма send-hook "~f @gmail.com" "set smtp_url=smtp://@smtp.gmail.com:587/"
send-hook "~f @gmail.com" "set smtp_pass="" send-hook "~f @gmail.com" "set realname="""

С подобным конфигом mutt уже вполне готов к работе. А о дальнейших возможностях настройки и использования mutt разговор пойдёт в следующих постах.

В свое время, когда меня еще не было на Хабре, эта статья была опубликована в песочнице. К сожалению, она никому не понравилась и со временем была удалена. Долго думал, что с ней делать - забить, запостить таки на Хабре или в своем блоге Записки программиста . Решил, раз она писалась для Хабра, пусть на нем и будет опубликована. Итак, под катом - статья о практике отправки отчетов по e-mail. Сейчас, перечитывая текст, понимаю, что статья - не фонтан, но может кому-нибудь пригодится.

Часто передо мной встает задача вроде такой: необходимо ежемесячно (или еженедельно/ежедневно) обработать такие-то логи, построить по ним отчет и отправить его на заданный E-Mail. В этой статье я как раз хотел бы рассказать о второй части такой задачи, а именно об отправке отчетов. Казалось бы, такая рутинная операция, но трудности с ней возникают чаще, чем может показаться на первый взгляд.

Я предпочитаю использовать уже готовые, проверенные временем, программы, а не писать каждый раз собственные скрипты. В большинстве случаев нужная программа уже была когда-то кем-то написана, зачем изобретать велосипед?

Для отправки отчетов я пользуюсь mutt. В нем меня привлекает простота интерфейса, возраст (читай - стабильность) программы и то, что mutt портирован если не под все, то почти под все unix-like системы. В моей любимой FreeBSD искать его следует в /usr/ports/mail/mutt.

Чтобы при помощи mutt послать письмо с аттачем, достаточно команды

Mutt -s Subject -a File [email protected]

Где Subject - тема сообщения, File - имя прикрепляемого файла, а [email protected] - получатель письма. К письму можно прикрепить несколько файлов или указать несколько получателей. Текст письма программа читает из stdin.

По умолчанию mutt использует sendmail в качестве MTA. Обычно с этим не возникает трудностей - после установки mutt мы можем сразу приступить к написанию скриптов и все будет прекрасно работать. Но мне приходилось сталкиваться с ситуацией, когда посылка писем напрямую с сервера просто запрещена правилами фаервола. В этом случае следует использовать сторонний SMTP сервер.

Проблема в том, что mutt не имеет функций MTA, то есть работа с SMTP - не его задача. Тем не менее, можно научить его слать почту через заданный smtp-сервер и поможет ему в этом программа ssmtp.

Строго говоря, ssmtp является не MTA, а просто smtp-клиентом, эмулирующим работу sendmail. Если вы, как и я, пользуетесь FreeBSD, то можете поставить ssmtp из портов - /usr/ports/mail/ssmtp.

Настройка ssmtp производится путем редактирования файла /usr/local/etc/ssmtp/ssmtp.conf (в вашей ОС путь к файлу может быть другим). Вот как он примерно выглядит:

[email protected] # от чьего имени шлем письма
mailhub=smtp.example.ru:465 # smtp-сервер и порт
hostname=localhost # имя нашего хоста, желательно вписать верное
UseTLS=Yes # используем зашифрованное соединение
[email protected] # логин
AuthPass=qwerty # пароль
FromLineOverride=Yes # Поле From: может задавать mutt

Если вы хотите слать отчеты через Gmail, конфиг будет выглядеть немного иначе:

[email protected]
mailhub=smtp.gmail.com:587
hostname=localhost
UseSTARTTLS=YES
[email protected]
AuthPass=qwerty

Пытаемся послать тестовое письмо с помощью ssmtp:

Echo "" | ssmtp -v -s Hello [email protected]

Если письмо успешно дошло, значит все было сделано правильно. Если ssmtp говорит нечто вроде:

. . .
[->] MAIL FROM:
[<-] 573 root@localhost failed to route the address
ssmtp: 573 root@localhost failed to route the address

Тоже не проблема, просто ssmtp указал неверный адрес отправителя, и smtp-сервер это заметил. Когда будем слать почту через mutt, все будет задано верно.

Чтобы mutt слал почту через ssmtp, в домашнем каталоге пользователя, от имени которого мы собираемся слать отчеты, нужно подправить файл.muttrc

Set sendmail="/usr/local/sbin/ssmtp" # путь к ssmtp
set realname="Example Report System" # имя отправителя
set from="[email protected]" # e-mail отправителя

Проверяем работу mutt:

Echo "" | mutt -s Hello [email protected]

Письмо должно успешно дойти до получателя. Если вы хотите использовать mutt в скриптах, запускаемых по крону, нужно иметь ввиду, что mutt находится в каталоге /usr/local/bin, который по умолчанию не прописан в переменную окружения PATH в вашем crontab. Решения два - либо исправить переменную окружения PATH в кронтабе, либо использовать полное имя mutt в скриптах.

Бывает и такое, что на сервере, с которого приходится слать отчеты, у нас нет root-привилегий. В этом случае либо придется уговаривать админа установить и настроить mutt, либо все-таки написать свой собственный скрипт отправки электронной почты. Но это уже совсем другая история.

Мотивация пользоваться вместо обычных почтовых клиентов, таких, как Thunderbird, или, скажем, Claws Mail, консольным почтовым клиентом Mutt сродни мотивации пользоваться irssi вместо HexChat . Консольные приложения, как правило, намного проще своих GUI-аналогов, а значит не так сильно жрут батарею и более безопасны. Также они управляются исключительно при помощи клавиатуры, могут быть запущены на сервере в screen , и вот это все. К сожалению, конкретно Mutt совершенно незаслуженно пользуется репутацией программы, очень сложной в настройке. Сегодня мы убедимся, что в действительности настройка Mutt не сильно отличается от настройки любого другого почтового клиента.

На момент написания этих строк в качестве основной системы я использую FreeBSD, поэтому у меня установка необходимых пакетов выглядит так:

sudo pkg install mutt msmtp

В дополнение к пакету mutt нужен еще и msmtp по той причине, что сам Mutt является только MUA, а не MTA . Другими словами, непосредственно для отправки писем Mutt использует сторонние программы. Не переживайте, это не так страшно, как может показаться.

Дополнение: Начиная с версии 1.5 стало возможным использовать smtp напрямую , без сторонних MTA. Для этого Mutt должен быть собран с соответствующими опциями. В зависимости от вашей системы / дистрибутива эти условия могут выполняться или не выполняться, поэтому в этой статье описывается способ, работающий всегда.

Первым делом указываем параметры подключения к SMTP . В файле ~/.msmtprc пишем что-то вроде:

account [email protected]
host mail.example.ru
port 587
from [email protected]
tls on
tls_starttls on
# tls_trust_file /etc/ssl/cert.pem
tls_trust_file /usr/local/etc/ssl/cert.pem
auth on
user [email protected]
password PASSWORD

Адрес сервера, имя пользователя и пароль, разумеется, нужно заменить на свои. Кроме того, в вашей системе путь к связке корневых сертификатов может быть немного другим. Думаю, вы без труда найдете нужный файл при помощи утилиты find.

Меняем права доступа к конфигу, иначе msmtp откажется использовать его:

chmod go-rwx ~/ .msmtprc

Проверяем, что письма ходят:

echo "Test message" | \
msmtp --debug -a afiskon@ example.ru -t -i afiskon@ example.ru

set spoolfile="imaps://[email protected]:[email protected]/"
set folder="imaps://[email protected]:[email protected]/"
set sendmail="/usr/local/bin/msmtp -a [email protected] -t -i"
set from="[email protected]"
set realname="Aleksander Alekseev"
set use_from=yes
set envelope_from="yes"
set record="=Sent"
set postponed="=Drafts"
set signature="~/.signature"

Насколько мне известно, в третьем тысячелетии абсолютно все почтовые сервисы предоставляют IMAP, и про POP3 можно наконец-то забыть.

Запускаем Mutt. Некоторые основные клавиши (все не привожу, так как их очень много и в клиенте все равно повсюду есть подсказки):

  • ? — помощь;
  • Вверх/вниз — перемещение между письмами;
  • Enter — открыть письмо;
  • d — пометить, что письмо следует удалить;
  • u — отменяет пометку письма на удаление;
  • N — пометить письмо как прочитанное/непрочитанное;
  • $ — сохранить изменения (удалить помеченные письма, и т.д.);
  • (цифра) — переход к письму с заданным номером;
  • m — написать новое письмо;
  • r — ответить на письмо;
  • g — group reply, ответить всем;
  • f — forward, перенаправить письмо;
  • h — показать/скрыть все заголовки письма;
  • a — создать алиас для отправителя письма;
  • t — поставить/снять метку (tag);
  • ;(что-то) — выполнить что-то с отмеченным;
  • s — сохранить письмо на диск или в папку;
  • c? — просмотр папок (там же см справку про создание/удаление папок);
  • q — выйти из Mutt;

В любой непонятной ситуации просто нажмите Ctr+C, и на вопрос закрыть ли Mutt ответьте «no». Поиск по письмам работает примерно так. Нажмите T , затем введите ~B pattern для поиска по телу сообщения или ~s pattern для поиска по subject. По тому же принципу можно делать untag найденных ранее сообщений, только вместо T следует использовать Ctr+T. Подробности о поиске можно найти в документации .

Заметьте, что нажатие $ не приводит к загрузке новых писем. Загрузить новые письма можно, введя команду c? , и заново открыв папку INBOX. Понятно, что постоянно так делать неудобно, поэтому в ~/.muttrc стоит дописать такой хоткей:

bind index G imap-fetch-mail

Еще один момент, который поначалу не очень понятен. Новые непрочитанные письма помечаются как N (new). Но если переподключиться, то они будут отмечены, как O (old). Это все еще непрочитанные письма, но которые мы уже видели в прошлый раз. Таким образом можно отличить новые письма от совсем-совсем новых.

Еще один хинт. По умолчанию Mutt отображает все письма «плоско». Мне лично древовидное отображение нравится больше. Включается оно так:

set sort=threads

Примите во внимание, что Mutt имеет очень гибкие настройки в отношении что каким цветом подсвечивать. Вот вам для примера небольшой кусок ~/.muttrc, чтобы вы могли представить масштабы (какая строчка что означает, думаю, и так понятно):

# old unread messages
color index green default "~O"

# new unread messages
color index brightgreen default "~N"

# messages to me
color index cyan default "~p"
color index brightcyan default "~p~O"
color index brightcyan default "~p~N"

# messages from me
color index yellow default "~P"

# tagged messages
color index red default "~T"

# messages about to be deleted
color index brightyellow default "~D"

# message displaying settings
color hdrdefault green default
color header brightgreen default ^Subject:
color quoted cyan default
color signature red default

Мне очень нравится, что можно подсветить сообщения, отправленные лично тебе, а не просто в какой-нибудь мейлинг лист! Вообще, Mutt настолько гибок в плане настройки цветов, что для него делают целые темы .

Кстати, после внесения изменений в ~/.muttrc, их можно подгрузить без перезапуска Mutt, введя:

:source ~/.muttrc

По умолчанию Mutt скролит текст писем и списки писем экранами , а не по одной строке. Чтобы исправить это, я дописал в конфиг:

# scroll message line by line using arraws
bind pager previous-line
bind pager next-line

# scroll index line by line
set menu_scroll

Также в Mutt есть искуственные паузы, чтобы пользователь успевал прочитать все, что клиент выводит при подключении к IMAP серверу, и так далее. В целом это создает ощущение, что клиент тормозит, поэтому отключаем:

# disable artifitial pauses
set sleep_time = 0

Еще, чтобы клиент работал быстрее, можно включить кэширование (не забудьте предварительно создать соответствующие каталоги):

# enable caching
set header_cache="~/.mutt/header_cache"
set message_cachedir="~/.mutt/message_cache"

Теперь, допустим, нам нужна адресная книга. Нет ничего проще!

В ~/.muttrc дописываем что-то вроде:

alias afiskon "Aleksander Alekseev"

Теперь, когда предлагается ввести адрес получателя при написании нового письма, просто начните вводить его никнейм. Никнеймы автодополняются при нажатии Tab. А если нажать Tab дважды, то открывается полный список алиасов.

И последняя пара полезняшек. Чтобы при редактировании писем в Vim ширина текста автоматически ограничивалась до 72-х символов, в ~/.vimrc допишите:

" limit the width of e-mail text to 72 characters
au BufRead /tmp/mutt-* set tw=72

Интересно также, что Mutt позволяет слать письма прямо из консоли:

echo "Message from a console" | mutt -s "Test msg" afiskon@ example.ru

Чтобы вы могли лучше представить, как происходит работа с Mutt, я приготовил пару скриншотов. Оба скришота кликабельные, в полном размере имеют формат PNG, 1366 x 768 пикселей, размер менее 250 Кб.

Просмотр списка писем:

Чтение конкретного письма:

А теперь, внимание, вопрос! А как работать с несколькими мейлбоксами? Ну-ка, ну-ка, кто уже догадался? :)

Да просто дописываем информацию об еще одном SMTP-аккаунте в ~/.msmtprc, создаем еще один.muttrc и переключаемся между ними при помощи :source . Я лично сложил все аккаунты в ~/.mutt/user1, ~/.mutt/user2 и так далее, а дэфолтный подключил в ~/.muttrc с помощью директивы source. Адресную книгу по тому же принципу можно положить в ~/.mutt/contacts. Единственная хитрость заключается в том, что после переключения на другой аккаунт при помощи :source , нужно сделать c! , чтобы клиент переподключился. Все гениальное — просто! Разумеется, для удобства можно определить хоткеи для переключения между аккаунтами. Пример вы найдете в полной версии ~/.muttrc к данной статье .

В нем же вы найдете кое-какие другие интересные вещи. Например, открытие ссылок из письма в браузере через urlscan , рендеринг HTML-писем при помощи lynx и их открытие в браузере по умолчанию, открытие картинок в gpicview, и не только. Кстати, много полезных рецептов, связанных с Mutt, можно найти на wiki-сайте Arch Linux . Ну и, конечно же, обратите внимание на официальный мануал по Mutt . Он классный и легко превращается в PDF-книгу, если нажать Ctr+P (print) в Chrome или Chromium.

Многое, к сожалению, остается за кадром. Например, настройка фильтров и работа с IMAP в оффлайне. Для последнего часто используют offlineimap . Но эти вопросы уже выходят за рамки данного поста и, откровенно говоря, мне это сейчас попросту не особо нужно.

А используете ли вы Mutt и если да, быть может, вам есть что дополнить?