💾 Archived View for tilde.team › ~rami › mutt.gmi captured on 2024-05-12 at 15:18:13. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-05-10)
-=-=-=-=-=-=-
רמי
SUBJECT: Mutt: Консольный почтовый клиент с поддержкой POP3/IMAP/SMTP и GNUPG
AUTHOR: Rami Rosenfeld
DATE: 03/04/24; upd. 04/04/24; 04/04/24; 08/04/24; 10/04/24
TIME: 01.00
LANG: ru, en
LICENSE: GNU FDL 1.3
TAGS: gnu, gnome, software, opensource, linux, system, man, manual, bash, privacy, security, rhel, centos, mate, xfce, lxde, spin, de, systemd, systemctl, terminal, console, mail, gnupg, pop, imap, mutt, abook
Mutt обладает огромным функционалом, и описание всех настроек и "горячих клавиш" - дело абсолютно бессмысленное (обратите внимание на впечатляющий список приведенных man'ов в конце этого текста). Поэтому в данном руководстве я привожу лишь самые необходимые настройки конфигурации и распространенные управляющие команды. Оба варианта muttrc тщательно протестированы на "получение/отправку" сообщений и полностью работоспособны.
Создание структуры файлов и каталогов:
mkdir -p ~/.mutt/cache/headers
mkdir ~/.mutt/cache/bodies
mkdir ~/.mutt/attachments
cd ~/.mutt
touch muttrc mutt_drafts mutt_sent mutt_trash certificates signature aliases mailcap
Примечание: После установки и полной настройки Mutt, в целях исключения доступа к каталогу и файлам обязательно исполните команду:
chmod 700 -R ~/.mutt
Редактирование конфигурационного файла muttrc:
nano ~/.mutt/muttrc
В данном подразделе рассматриваются ДВЕ РАЗНЫЕ конфигурации muttrc (используйте только одну из них!). Лично я - приверженец получения почты по протоколу POP3, но во втором варианте рассмотрена и конфигурация с использованием IMAP. Настройки SMTP являются общими для обеих конфигураций.
Примечание 1: Используйте свой реальный E-mail и парольную фразу вместо "your_name@server.name" и "YOUR_PASSPHRASE"
Примечание 2: Будьте внимательны! В примерах указаны POP-сервер "pop.server.name", IMAP-сервер "imap.server.name" и SMTP-сервер "mail.server.name" (с портами, характерными для задействованных протоколов: 995, 993 и 465); в реальных же ситуациях могут встретиться "smtp.server.name" и даже (в обоих случаях!) - просто "server.name:port". Поэтому перед настройкой muttrc обязательно сверьтесь с данными, которые предоставляет почтовый провайдер. Особенно тщательно проверяйте номера портов по всему тексту конфигурационного файла!
Примечание 3: Используйте абсолютные пути для файлов и каталогов. В противном случае, они гипотетически могут сохраняться в общую папку ~/Mail, которая уже задействована другим почтовым приложением, например ClawsMail. Итог: возникнет конфликт или мешанина из файлов.
Примечание 4: Парольные фразы (в целях безопасности) рекомендовано не хранить в открытом виде: оставьте эти поля пустыми. Однако вам придется вводить их при каждой проверке почты или отправке сообщений; это плохо совместимо с автопроверкой сообщений "mail_check" (и ее следует закомментировать).
# POP3 + SMTP SETTINGS # MailCheck Settings set beep_new = yes set timeout = 660 set mail_check = 300 set mail_check_stats = yes set mail_check_stats_interval = 120 # Account set realname = 'Your Name' set from = 'your_name@server.name' set use_from = yes set envelope_from = yes set send_charset = 'utf-8' set signature = '~/.mutt/signature' set pop_pass = 'YOUR_PASSPHRASE' set smtp_pass = 'YOUR_PASSPHRASE' # HTML-messages set mailcap_path = '~/.mutt/mailcap' auto_view text/html # VARIANT 1: Aliases for E-mails set alias_file = '~/.mutt/aliases' set sort_alias = alias set reverse_alias = yes source $alias_file # VARIANT 2: Abook settnigs # set query_command="abook --mutt-query '%s'" # macro index a "|abook --add-email\n" 'add sender to abook' # macro pager a "|abook --add-email\n" 'add sender to abook' # Server settings set pop_host = 'pops://your_name@server.name@pop.server.name:995' set smtp_url = 'smtps://your_name@server.name@mail.server.name:465/' set ssl_force_tls = yes # Folders and Files set spoolfile = 'pops://your_name@server.name@pop.server.name' set postponed = '~/.mutt/mutt_drafts' set record = '~/.mutt/mutt_sent' set trash = '~/.mutt/mutt_trash' set attach_save_dir = '~/.mutt/attachments' set header_cache = '~/.mutt/cache/headers' set message_cachedir = '~/.mutt/cache/bodies' set certificate_file = '~/.mutt/certificates'
# IMAP + SMTP SETTINGS # MailCheck Settings set beep_new = yes set timeout = 660 set mail_check = 300 set mail_check_stats = yes set mail_check_stats_interval = 120 # Account set realname = 'Your Name' set from = 'your_name@server.name' set imap_user = 'your_name@server.name' set use_from = yes set envelope_from = yes set send_charset = 'utf-8' set signature = '~/.mutt/signature' set smtp_pass = 'YOUR_PASSPHRASE' set imap_pass = 'YOUR_PASSPHRASE' # HTML-messages set mailcap_path = '~/.mutt/mailcap' auto_view text/html # VARIANT 1: Aliases for E-mails set alias_file = '~/.mutt/aliases' set sort_alias = alias set reverse_alias = yes source $alias_file # VARIANT 2: Abook settnigs # set query_command="abook --mutt-query '%s'" # macro index a "|abook --add-email\n" 'add sender to abook' # macro pager a "|abook --add-email\n" 'add sender to abook' # Server settings set smtp_url = 'smtps://your_name@server.name@mail.server.name:465/' set ssl_force_tls = yes # Folders and Files set folder = 'imaps://imap.server.name:993' set spoolfile = '+INBOX' set postponed = '~/.mutt/mutt_drafts' set record = '~/.mutt/mutt_sent' set trash = '~/.mutt/mutt_trash' set attach_save_dir = '~/.mutt/attachments' set header_cache = '~/.mutt/cache/headers' set message_cachedir = '~/.mutt/cache/bodies' set certificate_file = '~/.mutt/certificates'
Некоторые опции будут весьма полезны при работе с Mutt, и я добавил их в оба muttrc, указанных выше.
1) Принудительное указание кодировки отправляемых сообщений (весьма важная опция!):
set send_charset = 'utf-8'
Примечание: Никогда не создавайте сообщения в национальной кодировке: это дурной тон! Используйте UTF-8.
2) Создание автоподписи к отправляемым сообщениям:
nano ~/.mutt/signature
С уважением,
Имя Фамилия
set signature = '~/.mutt/signature'
3) Создание алиасов к почтовым адресам (с автодополнением при составлении писем) без использования сторонней адресной книги:
set alias_file = '~/.mutt/aliases'
set sort_alias = alias
set reverse_alias = yes
source $alias_file
Вторая строка означает, что при показе на экране данные будут отсортированы по алиасам (никнеймам), а не по реальным E-mail'ам. Если вам удобнее, измените это значение на "address".
Последняя строка гарантирует, что содержимое файла "aliases" будет подгружено при запуске Mutt; это необходимо для автодополнения по клавише [TAB].
Наполните файл следующим содержимым (пример):
nano ~/.mutt/aliases
alias friend "Name Longname" <my@friend.server>
alias mylove "Name" <my@love.server>
Примечание: Не запутайтесь! В приведенных выше примерах конфигурационных файлов указаны сразу ДВА ВАРИАНТА возможного хранения адресов: с помощью алиасов и с помощью сторонней программы Abook (второй вариант закомментирован, т.е. отключен).
Адреса приводите в указанном формате, т.е. с кавычками и скобками: < >.
4) Просмотр HTML-писем в стороннем консольном браузере:
ВАЖНО: Старайтесь никогда не открывать HTML-письма в их исходном (оригинальном) виде из-за возможно вредоносного содержимого. Например, мои почтовые клиенты всегда показывают их в режиме "только текст".
set mailcap_path = '~/.mutt/mailcap'
auto_view text/html
nano ~/.mutt/mailcap
text/html; links2 -dump %s; copiousoutput;
Примечание: У вас должен быть предварительно установлен консольный браузер; в данном случае - links2.
5) Сохранение вложений в указанный каталог:
set attach_save_dir = '~/.mutt/attachments'
6) Хранение паролей к POP/IMAP/SMTP в защищенном хранилище PASS и их подстановка при приеме/отправке сообщений:
Вначале ознакомьтесь с руководством по PASS:
GNUPG/PWGEN/PASS: Генерирование криптостойких паролей и их безопасное хранение
Инициализируйте базу данных PASS. Затем создайте запись в ее корне, связанную с паролем для POP/IMAP/SMTP:
pass add your_name@server.name
(Для справки - см. также субкоманды):
pass insert your_name@server.name
pass your_name@server.name
Отредактируйте muttrc:
ВАЖНО: Следите за правильностью расставления одинарных и двойных кавычек в каждой из строк!
set pop_pass = "`pass show your_name@server.name`"
set smtp_pass = "`pass show your_name@server.name`"
или
set imap_pass = "`pass show your_name@server.name`"
set smtp_pass = "`pass show your_name@server.name`"
Запуск из консоли:
mutt
Главное окно:
q - Выход из программы
d - Удалить
u - Восстановить
s - Сохранить
m - Создать
r - Ответить
g - Всем
? - Помощь
Окно чтения сообщения:
i - Выход из окна
"-" - Вернуться на начало просматриваемого сообщения
"Space" - Листать сообщение вниз. Далее - переход на следующее сообщение
v - Вложения
d - Удалить
r - Ответить
j - Следующий
? - Помощь
Окно составления сообщения:
y - Отправить
q - Прервать
t - To ("Кому")
c - CC ("Копия")
s - Subj ("Заголовок письма")
a - Вложить файл; далее нажмите на "?" (открыть список каталогов)
d - Описание
? - Помощь
Три строки в конфигурационных файлах (см. подраздел "Abook settnigs") настраивают взаимодействие с базой данных Abook. Подробности см. в расширенном руководстве:
Abook: Консольная адресная книга и ее интеграция с почтовым клиентом Mutt
В своем письме г-н dikeyOficial справедливо указал мне на наличие возможности защитить пользовательские PASSPHRASE(s) с помощью GNUPG.
Если вкратце, во множестве источников предлагается примерно такой вариант (опишу своими словами):
1. Создать свою связку асимметричных ключей GNUPG, связанную с текущим E-Mail: your_name@server.name (подробнее см. мое руководство в разделе Manuals).
2. Отредактировать muttrc, приведя две строки к следующему состоянию (т.е. исключив из них парольные фразы):
set pop_pass = ''
set smtp_pass = ''
3. Создать текстовый файл и наполнить его следующим содержимым:
nano ~/.mutt/password
set pop_pass = 'YOUR_PASSPHRASE'
set smtp_pass = 'YOUR_PASSPHRASE'
4. Зашифровать файл собственным ключом (и для себя):
gpg -r your_name@server.name -e ~/.mutt/password
где опция "-r" обозначает реципиента, "-e" - субкоманду "зашифровать".
В итоге должен получиться файл password.gpg.
Примечание от Рами: Лично я не стал бы активировать здесь связку ключей, применяемую для шифрования переписки (она не для того создана), а воспользовался бы симметричным(!) шифрованием, т.е. основанным на парольной фразе. Или вообще - использовал бы хранилище PASS (подробное описание см. выше).
5. Уничтожить исходный файл password с помощью команды shred (см. раздел Manuals).
6. Внести в muttrc следующую строку:
source 'gpg -d ~/.mutt/password.gpg |'
где опция "-d" обозначает субкоманду "расшифровать".
ИТОГ:
1) Теперь парольные фразы не хранятся в muttrc в открытом виде;
2) при каждой операции, связанной с получением или отправкой сообщений, будет запрашиваться дополнительная парольная фраза, необходимая для расшифрования файла password.gpg;
3) полученные исходные данные будут передаваться через "трубу"/"пайп" в muttrc.
ЗАКЛЮЧЕНИЕ ОТ РАМИ. Увы, я считаю такой подход неоправданным: не с точки зрения надежности, но с точки зрения общей конструкции. Немножко отстранитесь от идеи и взгляните сами: ведь теперь, чтобы получить или отправить письмо, мы должны помнить и постоянно вводить еще и дополнительную парольную фразу, связанную не(!) с текущим E-mail, но со связкой ключей, обслуживающих ее.
Подобный вариант нелогичен и сложен; по-моему, достаточно оставить поля для парольных фраз пустыми в muttrc и хорошенько ЗАПОМНИТЬ их (вернее - "ее"! как правило, она одна для получения и отправки, т.е. для POP3 + SMTP), чем обременять свою память еще одним паролем... Звучит разумно, нет?
... Хорошо, двинемся дальше. В качестве следующей конструкции, призванной обойти неудобства, связанные с постоянными вводами парольной фразы к password.gpg, на разных сайтах и форумах предлагается дополнительно использовать gpg-agent, который будет удерживать расшифрованное содержимое этого файла. Подробности приводить не буду (краем глаза заметил, что они весьма тяжеловесны), но лишь приведу свой контр-аргумент:
Представьте, что вы "вручную" расшифровываете другой произвольный файл file_name.gpg. Вы вводите парольную фразу, но (такое частенько случается) ошиблись при наборе... Что произойдет далее? Вы пробуете расшифровать файл заново, однако следующего запроса "Введите пароль" уже не возникнет! А почему? Да потому что предыдущий неправильный(!) пароль намертво осел в gpg-agent'e на неопределенное время в N-минут (честно говоря, я не помню, сколько установлено там по умолчанию). И у вас попросту не будет второй попытки, чтобы расшифровать содержимое (нет, компьютер честно примется отрабатывать операцию, но каждый раз станет подставлять в нее сохраненный неправильный пароль). А в особо экстренных случаях - не будет еще и времени, чтобы дождаться сброса неправильного пароля, запомненного gpg-agent'ом.
Поэтому я не стану рекомендовать описанные способы, хотя конечно же подразумеваю, что для кого-то они окажутся полезными. Ибо мой принцип всегда весьма прост: "Тренируйте память! Держите все парольные фразы в собственной голове - это единственное надежное место!" :)
Дополнительно см.:
man mutt_dotlock(1), mutt_pgpring(1), pgpewrap(1), sendmail(1), smail(1), smime_keys(1), curses(3), ncurses(3), mail‐cap(5), maildir(5), mbox(5), mmdf(5), muttrc, abook
🄯 Rami Rosenfeld, 2024. GNU FDL 1.3.