Mutt - dim13/lor GitHub Wiki
Mutt - консольный почтовый клиент, гибко настраиваем и прост в управлении (из коробки имеет панель с хоткеями и подсказками, для управления Mutt'ом которых "хватит всем"). Практически каждый элемент настраивается как угодно, поэтому если вы не брезгуете консолью - это и вовсе лучший из существующих почтовых клиентов.
Если вы впервые сталкиваетесь с почтой - это хорошо, но плохо, если вы ранее работали с почтой, привыкли к чему-то ("синдром утенка") и уже избалованы современными интерфейсами. Забудьте все, что вы знали о почте раньше. К примеру: в современных клиентах при добавлении аккаунта - каждый аккаунт имеет свою директорию "Входящие" и т.п., Mutt на это не расчитан, и это не является его архитектурным недостатком, просто поймите, что разделять почту между своими аккаунтами не нужно, ведь аккаунты и так принадлежат вам, поэтому хранить ту же "Входящую" почту со всех аккаунтов следует в одной директории.
В данной статье раскрыто множество советов и трюков, ответов на частозадаваемые вопросы и остальное. Статью такого уровня вы более нигде не встретите. Только если сами потратите месяц на изучение всей документации.
Как клиент, Mutt может самостоятельно заходить на почтовые серверы и читать почту прямо с них или отправлять ее, т.е. вполне себе standalone-клиент, но я (Spoofing) считаю правильнее использовать для того более подходящие программы. И куда более лучшим будет хранить почту локально (хотя бы с целью бэкапа от факапа).
Через mutt мы будем читать почту, при помощи msmtp отправлять письма, и через fetchmail скачивать письма - далее, загруженная почта будет направлена на фильтр procmail, который уже после ее обработки сохранит почту в ящиках.
Конфигурационный файл 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 +
Почему все так? Потому что так было задумано архитектурой почтового клиента Mutt. Что-то из данного вам может показаться непривычным: только лишь потому, что как было сказано в начале статьи, - вы можете быть избалованы современными клиентами. :)
msmtp используется для отправки писем, настройки пишутся в ~/.msmtprc.
Настроим наш Google Mail для отправки.
defaults
tls on
tls_starttls on
tls_certcheck off
auth on
account google
from [email protected]
host smtp.gmail.com
port 587
user [email protected]
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
Указав имя пользователя [email protected] и пароль вместо звездочек. В данном конфиге мы включили шифрование tls и авторизацию перед отправкой письма, но отключили проверку сертификатов. Далее настроили аккаунт google (указав его аккаунтом по-умолчанию) и укажем fingerprint вручную, как альтернативу проверке подлинности сертификатов.
Чтобы получить fingerprint сервера, достаточно выполнить команду
msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
и впишите его (SHA1 Fingerprint) в конфигурационный файл. Теперь вы можете быть уверены в безопасности отправляемой почты, т.к. в случае чего почта попросту не будет отправлена.
fetchmail загружает почту и отправляет на обработку фильтру (к примеру procmail), настройки лежат в ~/.fetchmailrc.
На примере Google Mail настроим сбор почты с вашего аккаунта, открыв ~/.fetchmailrc любым текстовым редактором.
defaults
fetchall
keep
poll imap.gmail.com protocol imap
username "[email protected]" 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 вам нужно только указать свой логин [email protected], имя пользователя (любое) и пароль от аккаунта.
Включим SSL и укажем из каких ящиков нам следует забрать почту, - в списке указаны все ящики по-умолчанию, которые создаются в Google Mail, так что вам нужно только раскомментировать необходимое, но а сейчас почта будет загружена из "Входящих" и "Спама". И затем, каждое письмо пройдет уже вашу фильтрацию...
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"
вы еще можете иногда встретить знак = (равенства), и знайте, что функциональной разницы межды ними абсолютно никакой нет, а просто так было сделано для жителей Германии (из-за раскладки клавиатуры).
Maildir - это директория, в которой так же находятся еще 3 директории new, cur и tmp, и каждое письмо сохраняется отдельным файлом.
mbox - это файл, в котором каждое письмо начинается со слова From (не путайте с заголовком From:)
Что лучше? В целом не важно, потому что при помощи того же клиента Mutt вы всегда можете перемещать почту между ящиками, и из ящика в ящик она автоматически конвертируется в нужный формат. Преимущество для пользователей Maildir в том, что вы можете в своих скриптах легко вывести количество новых писем.
#!/bin/bash
# считаем список всех файлов (писем) в массив
NEW=("${HOME}/Mail/INBOX/new/"*)
# запишем количество элементов в массиве
COUNT=${#NEW[@]}
# вот столько у нас новых писем
echo $COUNT