Обновить

Работаем с почтой через Emacs и Wanderlust: несколько аккаунтов

Emacs
Пришло таки время для второй статьи о почтовом клиенте 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"))
Теги:emacswanderlustemail
Хабы: Emacs
Рейтинг +10
Количество просмотров 6,2k Добавить в закладки 37
Комментарии
Комментарии 3

Похожие публикации

Python для веб-разработки
5 марта 202159 400 ₽SkillFactory
Профессия Perfomance-маркетолог
5 марта 2021305 572 ₽Skillbox
HR-аналитика с нуля
5 марта 202146 800 ₽Skillbox
Веб-аналитик
5 марта 202122 495 ₽GeekBrains
Контекстная реклама
5 марта 202169 990 ₽Нетология

Лучшие публикации за сутки