Mutt - dim13/lor GitHub Wiki

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 [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

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

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
⚠️ **GitHub.com Fallback** ⚠️