Mutt

Материал из MediaWiki
Перейти к навигации Перейти к поиску

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