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

        Пришло таки время для второй статьи о почтовом клиенте 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"))
    
    • +10
    • 5,8k
    • 3
    Поделиться публикацией

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

    Комментарии 3
      0
      Попробуйте outlook. Несколько аккаунтов поддерживается.
        0
        Пробовал. Не смог настроить под линуксом.
        0
        Спасибо, очень пригодилось!

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое