Mutt
Mutt — консольный почтовый клиент, гибко настраиваем и прост в управлении (из коробки имеет панель с хоткеями и подсказками для управления Mutt'ом, которых «хватит всем»). Практически каждый элемент настраивается как угодно, поэтому если вы не брезгуете консолью — это и вовсе лучший из существующих почтовых клиентов.
Если вы впервые сталкиваетесь с почтой — это хорошо, но плохо, если вы ранее работали с почтой, привыкли к чему-то («синдром утенка») и уже избалованы современными интерфейсами.
Забудьте все, что вы знали о почте раньше.
К примеру: в современных клиентах при добавлении аккаунта — каждый аккаунт имеет свою директорию «Входящие» и т. п., Mutt на это не рассчитан, и это не является его архитектурным недостатком, просто поймите, что разделять почту между своими аккаунтами не нужно, ведь аккаунты и так принадлежат вам, поэтому хранить ту же «Входящую» почту со всех аккаунтов следует в одной директории.
В данной статье раскрыто множество советов и трюков, ответов на частозадаваемые вопросы и остальное. Статью такого уровня вы более нигде не встретите. Только если сами потратите месяц на изучение всей документации.
Связка mutt, msmtp, fetchmail и procmail
Как клиент, Mutt может самостоятельно заходить на почтовые серверы и читать почту прямо с них или отправлять её, т. е. вполне себе standalone-клиент, но яSpoofing считаю правильнее использовать для того более подходящие программы. И куда более лучшим будет хранить почту локально (хотя бы с целью бэкапа от факапа).
Через mutt мы будем читать почту, при помощи msmtp отправлять письма, и через fetchmail скачивать письма — далее загруженная почта будет направлена на фильтр procmail, который уже после ее обработки сохранит почту в ящиках.
mutt
Конфигурационный файл Mutt находится в ~/.muttrc, либо ~/.mutt/muttrc. Почта хранится в файле /var/spool/mail/${LOGNAME} формата mbox (где ${LOGNAME}@example.org имя вашего пользователя.). Hint: для пользователя root это postmaster@example.org
Создадим в домашней директории папку Mail, в которой будет лежать вся почта, и в ней же создадим «ящики» (файлы формата mbox).
user@linux$ mkdir ~/Mail user@linux$ cd ~/Mail user@linux$ touch "INBOX" "Drafts" "Sent Mail" "All Mail" "Spam" "Trash"
По порядку: входящие (новые или непрочитанные письма), черновики (неотправленные письма), отправленные, вся почта (прочитанные письма), спам, удаленные (ненужные письма).
Теперь создайте директорию ~/.mutt, в ней любым текстовым редактором откройте (создайте новый) файл muttrc, и уже в нем мы укажем, где хранится наша почта.
set folder = "${HOME}/Mail" set spoolfile = "+INBOX" set mbox = "+All Mail" set postponed = "+Drafts" set record = "+Sent Mail" set move set postpone set copy
- folder — директория, где лежат «ящики», она также может быть на удаленном сервере (imap, pop3).
- spoolfile — «Входящие». Mutt запустится и откроет этот ящик по умолчанию.
- mbox — когда вы прочитаете письмо, при закрытии клиента вся прочитанная почта переместится сюда (опция set move).
- postponed — черновики, если начали писать письмо и решили отложить «на потом» (опция set postpone).
- record — отправленная почта (опция set copy)
Мы указали корневой каталог folder, и путь до всех ящиков теперь начинается относительно этого folder. Знак + (плюса) перед ящиком означает, что в начало к нему будет подставлено значение из folder, например: $folder + $spoolfile = ${HOME}/Mail/INBOX.
Далее включим опции: move, postpone, copy. И теперь прочитанные письма по закрытию клиента будут перемещены из ящика «Входящие» в ящик «Архив», при редактировании письма и отмены этого действия оно сохранится в ящике «Черновики», и при отправке письма оно сохранится в ящике «Отправленных» писем.
Почему все так? Потому что так было задумано архитектурой почтового клиента Mutt. Что-то из данного вам может показаться непривычным: только лишь потому, что, как было сказано в начале статьи, — вы можете быть избалованы современными клиентами. :-)
msmtp
msmtp используется для отправки писем, настройки пишутся в ~/.msmtprc.
Настроим наш Google Mail для отправки.
defaults tls on tls_starttls on tls_certcheck off auth on account google from username@gmail.com host smtp.gmail.com port 587 user username@gmail.com password ******** tls_certcheck on tls_fingerprint 34:B4:3E:66:71:D8:AC:5A:47:76:7F:B7:CD:E4:31:08:F4:A5:DD:A8 account default: google
Указав имя пользователя username@gmail.com и пароль вместо звездочек. В данном конфиге мы включили шифрование TLS и авторизацию перед отправкой письма, но отключили проверку сертификатов. Далее настроили аккаунт google (указав его аккаунтом по-умолчанию) и укажем fingerprint вручную, как альтернативу проверке подлинности сертификатов.
Чтобы получить fingerprint сервера, достаточно выполнить команду
msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
и впишите его (SHA1 Fingerprint) в конфигурационный файл. Теперь вы можете быть уверены в безопасности отправляемой почты, т. к. в случае чего почта попросту не будет отправлена.
fetchmail
fetchmail загружает почту и отправляет на обработку фильтру (к примеру procmail), настройки лежат в ~/.fetchmailrc.
На примере Google Mail настроим сбор почты с вашего аккаунта, открыв ~/.fetchmailrc любым текстовым редактором.
defaults fetchall keep poll imap.gmail.com protocol imap username "username@gmail.com" is "username" password "password" ssl folder "INBOX" # folder "[Gmail]/All Mail" folder "[Gmail]/Spam" # folder "[Gmail]/Trash" # folder "[Gmail]/Drafts" # folder "[Gmail]/Sent Mail" # folder "[Gmail]/Important" # folder "[Gmail]/Chats" # folder "[Gmail]/Starred" mda "procmail -d %T"
В директиве defaults определяются настройки по-умолчанию ко всем аккаунтам, далее следуют директивы poll с указанием адреса сервера и протокола, по которому загружать почту. Мы указали сбор всей почты, но оставлять оригинальную копию на сервере.
В директиве poll вам нужно только указать свой логин username@gmail.com, имя пользователя (любое) и пароль от аккаунта.
Включим SSL и укажем, из каких ящиков нам следует забрать почту, — в списке указаны все ящики по умолчанию, которые создаются в Google Mail, так что вам нужно только раскомментировать необходимое, но сейчас почта будет загружена из «Входящих» и «Спама». И затем каждое письмо пройдет уже вашу фильтрацию…
procmail
procmail фильтрует почту и затем её сохраняет в ящики. В конфигурационном файле ~/.procmailrc укажем, чтобы просто вся входящая почта сохранялась в ~/Mail/INBOX.
PATH="/bin:/usr/bin:/usr/bin" MAILDIR="${HOME}" DEFAULT="/var/spool/mail/${LOGNAME}" VERBOSE="off" :0 c Mail/INBOX
Hint: если вы укажите / (слэш) в конце пути ящика, то почта будет сохранена в формате Maildir, а если без /, то в обычном mbox файле.
В начале файла в переменных мы указали настройки по умолчанию, их можно было бы и не указывать, но для наглядности пускай будет. Далее описываются выражения для фильтрации почты, выглядит это как
флаги
условие или выражение, которому должно соответствовать письмо
действие с ним
и может повторяться в файле сколько угодно раз. Для примера, я подписан на почтовую рассылку веб-сервера nginx, и чтобы письма с рассылки не засоряли мои «Входящие», то будем сохранить их в отдельный ящик.
PATH="/bin:/usr/bin:/usr/bin" MAILDIR="${HOME}" DEFAULT="/var/spool/mail/${LOGNAME}" VERBOSE="off" :0: * ^TO_.*@nginx\. Mail/nginx :0 c Mail/INBOX
Теперь все письма, которые отправлены (^TO_ определяет To: или Cc: заголовки) на адрес *@nginx. будут сохранены в файл ~/Mail/nginx. Остальные письма, которые не подойдут под условия фильтрации, сохранятся в ~/Mail/INBOX.
Ответы на вопросы
Разница между «+» и «=»
Помимо «+» (плюса) перед путями ящиков а-ля
spoolfile = "+INBOX"
вы еще можете иногда встретить знак «=» (равенства), и знайте, что функциональной разницы межды ними абсолютно никакой нет, а просто так было сделано для жителей Германии (из-за раскладки клавиатуры).
mbox или Maildir?
Maildir — это директория, в которой так же находятся еще 3 директории new, cur и tmp, и каждое письмо сохраняется отдельным файлом.
mbox — это файл, в котором каждое письмо начинается со слова From (не путайте с заголовком From:)
Что лучше? В целом не важно, потому что при помощи того же клиента Mutt вы всегда можете перемещать почту между ящиками, и из ящика в ящик она автоматически конвертируется в нужный формат. Преимущество для пользователей Maildir в том, что вы можете в своих скриптах легко вывести количество новых писем.
#!/bin/bash # считаем список всех файлов (писем) в массив NEW=("${HOME}/Mail/INBOX/new/"*) # запишем количество элементов в массиве COUNT=${#NEW[@]} # вот столько у нас новых писем echo $COUNT