Пришло таки время для второй статьи о почтовом клиенте Wanderlust, работающим под Emacs. Сегодня мы попробуем настроить его для работы с почтой из нескольких разных почтовых ящиков, доступ к которым производится как по IMAP, так и по POP3 протоколу. Основы работы с Wanderlust описаны тут.
Перво-наперво небольшое введение в логику работы Wanderlust — почтовых ящиков как единиц конфигурации в клиенте нет, зато есть папки. В простейшем случае папка может являться аналогом почтового ящика, как например в Thunderbird. Обычно в рамках одного почтового ящика мы имеем несколько основных папок — Входящие, Черновики, Спам, Отправленные. В Wanderlust их можно сгруппировать в одну категорию — и мы получим тот самый почтовый ящик, к которому привыкли в Thunderbird.
Для того чтобы настроить список почтовых ящиков Wanderlust использует файл .folders, пребывая в святой уверенности что никакая другая программа не будет использовать для своих нужд файл с таким же именем. Файл этот хранится в вашей домашней директории. Вот пример содержимого файла .folders для трех учетных записей — IMAP и POP3:
# группа папок, изображающая почтовый ящик на gmail.com
some_test@gmail.com {
%INBOX:some_test/clear@imap.gmail.com:993! "Входящие"
%[Gmail]/Черновики:some_test/clear@imap.gmail.com:993! "Черновики"
%[Gmail]/Корзина:some_test/clear@imap.gmail.com:993! "Корзина"
%[Gmail]/Отправленные:some_test/clear@imap.gmail.com:993! "Отправленные"
# формат строки такой:
# % - значит что папка в формате IMAP
# INBOX или [Gmail]/Черновики - имя папки на IMAP сервере
# : - разделитель
# some_test - имя пользователя для авторизации
# / - разделитель
# clear - тип авторизации, для IMAP почти всегда это значение
# @ - разделитель
# imap.gmail.com:993 - сервер и порт
# ! - означает что при подключении к серверу нужно использовать SSL, если !!, то TLS
# "Входящие" - имя папки которое будет отображаться в Wanderlust
}
# тоже самое что и в предыдущей группе - меняются только имена IMAP папок.
# кажется каждый почтовый сервис использует свою схему именования, и вам таки придется
# выяснить как называются папки на вашем
rambler_test@rambler.ru {
%INBOX:rambler_test/clear@imap.rambler.ru:993! "Входящие"
%DraftBox:rambler_test/clear@imap.rambler.ru:993! "Черновики"
%SentBox:rambler_test/clear@imap.rambler.ru:993! "Отправленные"
%Spam:rambler_test/clear@imap.rambler.ru:993! "Спам"
%Trash:rambler_test/clear@imap.rambler.ru:993! "Корзина"
}
# теперь настроим POP3 папку
# к сожалению по POP3 возможен доступ только ко входящим сообщениям
# забудьте о том что у вас там имеется в остальных папках
# или переместите содержимое других папок во "Входящие" в веб-интерфейсе
mail_ru_test@mail.ru {
&mail_ru_test/user@pop.mail.ru:995! "Входящие"
# & - значит что папка в формате POP3
# mail_ru_test - имя пользователя
# / - разделитель
# user - тип авторизации для POP3
# @ - разделитель
# pop.mail.ru:995 - сервер и порт
# ! - использовать SSL
}
Gmail использует русские имена папок IMAP, что Wanderlust не поддерживает по умолчанию, поэтому чтобы получать почту из них вам придется добавить в свой файл .emacs следующее:
(setq elmo-imap4-use-modified-utf7 t)
Между прочим пакет wl-beta из состава дебиан содержит баг из-за которого загрузка почты из POP3 папки вешает Wanderlust намертво. Так что, возможно вам придется установить более свежую версию с помощью el-get. Хорошая статья, описывающая как его настроить находится тут.
Теперь можете запустить новый экземпляр Emacs, нажать M-x wl и ввести пароли для ваших почтовых ящиков. Чтобы пароли не нужно было каждый раз вводить при запуске Wanderlust, после того как вы введете их все, нажмите A-x elmo-passwd-alist-save.
Теперь вы можете читать почту, но пока только читать — ни писать письма ни даже удалять их вы не можете, а посему давайте попробуем настроить и этот столь желанный функционал. Вот что нужно добавить в файл .emacs, чтобы получить полноценный почтовый клиент:
;; список правил для удаления писем - тут вы указываете какую папку использовать для
;; удаления сообщений в каждом ящике. Правила срабатывают по регулярному выражению,
;; применяемому к имени папки, в которой вы сейчас находитесь. Например папка для входящих
;; сообщений %INBOX:some_test/clear@imap.gmail.com:993! подпадает под регулярное выражение
;; "^%.*some_test", и сообщения удаленные из нее будут перемещаться в папку
;; [Gmail]/Корзина:some_test/clear@imap.gmail.com:993!
(setq wl-dispose-folder-alist
'(
("^%.*some_test" . "%[Gmail]/Корзина:some_test/clear@imap.gmail.com:993!")
("^%.*rambler_test" . "%Trash:rambler_test/clear@imap.rambler.ru:993!")
))
;; список почтовых адресов, с которых вы планируете отправлять письма
(setq wl-user-mail-address-list (quote ("some_test@gmail.com" "rambler_test@rambler.ru" "mail_ru_test@mail.ru")))
;; чтобы не выдавало ошибку при старте из-за того, что smtp сервер по умолчанию не определен сразу
(setq wl-insert-message-id nil)
;; чтобы при создании нового сообщения отправитель подставлялся в
;; зависимости от того в какой папке вы сейчас находитесь
(add-hook 'wl-mail-setup-hook 'wl-draft-config-exec)
(remove-hook 'wl-draft-send-hook 'wl-draft-config-exec)
;; указываем что выбор SMTP сервера для отправки должен осуществляться в зависимости от правил
(setq wl-draft-config-matchone t)
;; и вот эти правила и настройки применяющиеся в случае срабатывания одного из них
(setq wl-draft-config-alist
'(
;; some_test@gmail.com
(
(string-match "some_test" wl-draft-parent-folder)
(wl-message-id-domain . "some_test@gmail.com")
(wl-from . "some_test ")
("From" . "some_test@gmail.com")
(wl-smtp-posting-server . "smtp.gmail.com")
(wl-smtp-connection-type . 'starttls)
(wl-smtp-posting-port . 587)
(wl-smtp-authenticate-type . "plain")
(wl-smtp-posting-user . "some_test")
(wl-local-domain . "smtp.gmail.com")
)
;; rambler_test@rambler.ru
(
(string-match "rambler_test" wl-draft-parent-folder)
(wl-message-id-domain . "rambler_test@rambler.ru")
(wl-from . "rambler_test ")
("From" . "rambler_test@rambler.ru")
(wl-smtp-posting-server . "smtp.rambler.ru")
(wl-smtp-connection-type . 'starttls)
(wl-smtp-posting-port . 587)
(wl-smtp-authenticate-type . "plain")
(wl-smtp-posting-user . "rambler_test")
(wl-local-domain . "smtp.rambler.ru")
)
;; mail_ru@mail.ru
(
(string-match "mail_ru" wl-draft-parent-folder)
(wl-message-id-domain . "mail_ru@mail.ru")
(wl-from . "mail_ru ")
("From" . "mail_ru@mail.ru")
(wl-smtp-posting-server . "smtp.mail.ru")
(wl-smtp-connection-type . 'starttls)
(wl-smtp-posting-port . 587)
(wl-smtp-authenticate-type . "plain")
(wl-smtp-posting-user . "mail_ru")
(wl-local-domain . "smtp.mail.ru")
)))
На всякий случай проверьте имена серверов и способы аутентификации. Узнать эту информацию обычно можно в веб-интерфейсе к вашему почтовому сервису. Более того, чтобы не загрязнять файл .emacs, поддерживает чтение настроек при запуске из файла .wl — он так же как .folders должен находиться в вашей домашней директории. И в завершение — немного подправим внешний вид, чтобы получить что-то похожее на скриншот в начале статьи:
(setq
;; чтобы интерфейсы был как у Thunderbird - слева панель папок,
;; справа список писем и прсомотр текущего сообшения
wl-stay-folder-window t
wl-folder-window-width 40
;; чтобы при просмотре сообщения не видеть слишком много ненужных полей
wl-message-ignored-field-list '("^.*:")
wl-message-visible-field-list
'("^\(To\|Cc\):"
"^Subject:"
"^\(From\|Reply-To\):"
"^Organization:"
"^Message-Id:"
"^\(Posted\|Date\):"
)
wl-message-sort-field-list
'("^From"
"^Organization:"
"^X-Attribution:"
"^Subject"
"^Date"
"^To"
"^Cc"))
Автор: PerlPower