Чтение и запись электронной почты с помощью emacs

78

Как мы можем использовать emacs для чтения и записи электронной почты?

Этот вопрос предназначен для обеспечения канонической точки посадки для пользователей, желающих работать с электронной почтой с использованием emacs.

Пожалуйста, опубликуйте только один пакет / решение для каждого ответа, с максимально подробной информацией. Информация, которая может быть полезной, включает:

  • требования, поддерживаемая среда
  • поддерживаемые методы (чтение и / или отправка)
  • поддерживаемые протоколы (pop, imap, smtp, настройка локальной почты ...)
  • поддерживаемые аутентификации
  • хранение пароля (нет, обычный текст, доступ к внешнему кошельку ...)
  • поддержка в автономном режиме (нет, агрессивное кэширование, по запросу ...)
  • насколько легко использовать вложения? (добавление с помощью перетаскивания, загрузка, открытие с помощью emacs или другого приложения ...)
  • инструкция по настройке (чем детальнее, тем лучше), скриншоты ...
  • поддержка дополнительных функций электронной почты (архивирование, фильтрация, папки)
  • поддержка дополнительных связанных функций (контакты, RSS-каналы) ... здесь не нужно быть слишком подробным, в зависимости от того, насколько тесно эта функция относится к электронной почте

Решения, требующие внешнего инструмента для обработки почты, приветствуются, если пользователю не нужно напрямую взаимодействовать с внешним процессом.

Примеры: пакет, выступающий в качестве внешнего интерфейса для mutt, является тематическим, а решение, позволяющее пользователю thunderbird писать свое сообщение с использованием emacs, - нет.

Мета пост для обсуждения.

Быстрые ссылки на ответы (в алфавитном порядке):

Т. Веррон
источник
2
Есть ли способ прочитать электронную почту с помощью emacs, поддерживающего перетаскивание, чтобы добавить вложение? Эта функция действительно упрощает жизнь почтовому клиенту.
Имя
1
@Name Emacs даже поддерживает перетаскивание?
PythonNut
@PythonNut хорошо, если я перетаскиваю файл в буфер, Emacs открывает этот файл. Похоже, что в принципе Emacs может обрабатывать вызовы из системы.
Имя
@PythonNut Да, Emacs поддерживает DnD. Смотрите здесь и здесь .
Василий
@ Имя: я считаю, что использовать helm или ivy гораздо проще, чем перетаскивать вложения , но это вопрос личных предпочтений.
Омар

Ответы:

40

Я использую Mu4e . Это хорошо задокументировано (также через Info), и на момент написания статьи активно развивалось .

Mu4e поставляется как дополнение к mu , «набору инструментов для работы с Maildirs и файлами сообщений, в частности для индексации и поиска сообщений электронной почты» . Работает вместе с offlineimap или fetchmail . Я также использую пакет Emacs smtpmail-multi, чтобы отправлять сообщения из разных учетных записей с разными настройками. Для гладкой интеграции с вашим провайдером электронной почты, вы должны apt-get install ca-certificates. И если вам нужна версия с управлением пакетами, вы можете получить ее самостоятельно apt-get install maildir-utils.

Предоставлено несколько примеров конфигураций , включая следующую «минимальную конфигурацию»:

(require 'mu4e)     
(setq message-send-mail-function   'smtpmail-send-it
      smtpmail-default-smtp-server "smtp.example.com"
      smtpmail-smtp-server         "smtp.example.com"
      smtpmail-local-domain        "example.com")

Завершая настройку вашего почтового провайдера, вам нужно будет сделать немного больше; и, в частности, вам нужно будет настроить OfflineIMAP или Fetchmail для фактического получения почты. В моей конфигурации, показанной ниже, я настроил все для работы с двумя учетными записями. Если вам просто нужно извлечь данные из одной учетной записи, вы можете обратиться к примеру .offlineimaprc, включенному в руководство по mu4e.

Что касается расширений и интеграции с другими пакетами Emacs: Mu4e удобно интегрируется с режимом Org (для захвата ссылок на сообщения или пользовательских поисков и даже для создания писем в формате HTML с использованием синтаксиса Org, хотя я не использую эту функцию) через включенную организацию -mu4e.el . Существует отдельная интеграция helm-mu, которая может использоваться, но требует дополнительной работы IMO. Это тематически в Solarized.el . Существует также расширение mu4e-maildirs-, которое дает удобное количество прочитанных и непрочитанных сообщений для каждого почтового каталога, а также есть некоторые другие вещи, которые я не пробовал.

Вместе с документами эти примеры конфигураций могут помочь новому пользователю mu4e подняться с мертвой точки.

.offlineimaprc

[general]
accounts = Gmail, Uni
maxsyncaccounts = 3

[Account Gmail]
localrepository = Local
remoterepository = Remote
status_backend = sqlite

[Repository Local]
type = Maildir
localfolders = ~/Maildir/google

[Repository Remote]
type = IMAP
remotehost = imap.gmail.com
remoteuser = other.e.mail@gmail.com
remotepass = TryAndGuess12345
ssl = yes
maxconnections = 1
realdelete = no

# cert_fingerprint = fa88366ccd90cd02f7a5655800226c43c8044ada
# but they change all the time, so...
sslcacertfile = /etc/ssl/certs/ca-certificates.crt

# Folders to get:
#
# In Gmail, filter all current mail that isn't *otherwise*
# filtered into the folder or folders you want to receive/sync.
# Keep that up to date; it will boost efficiency if you would
# otherwise be syncing a very large "Inbox" here.
folderfilter = lambda foldername: foldername in [
             'JUNE2015', 'Drafts', 'Sent']

[Account Uni]
localrepository = UniLocal
remoterepository = UniRemote
status_backend = sqlite

[Repository UniLocal]
type = Maildir
localfolders = ~/Maildir/uni

[Repository UniRemote]
type = IMAP
remotehost = pod666.outlook.com
remoteuser = username@campus.university.ac.uk
remotepass = TryAndGuess9876
ssl = yes
maxconnections = 1
realdelete = no

sslcacertfile = /etc/ssl/certs/ca-certificates.crt

Конфиг для mu4eи smtpmail-multi:

;;; Replies

(setq message-citation-line-function 'message-insert-formatted-citation-line) 
(setq message-citation-line-format "On %a, %b %d %Y, %f wrote:\n")

;;; smtp

(add-to-list 'load-path "~/smtpmail-multi")
(require 'smtpmail-multi)
(require 'smtpmail)

(setq smtpmail-multi-accounts
      (quote
       ((uni . ("username@campus.university.ac.uk"
                 "pod666.outlook.com"
                 587
                 "e.mail@uni.ac.uk"
                 nil nil nil nil))
        (gmail . ("other.e.mail@gmail.com"
                   "smtp.gmail.com"
                   587
                   "other.e.mail@gmail.com"
                   starttls
                   nil nil nil)))))

(setq smtpmail-multi-associations
      (quote
       (("other.e.mail@gmail.com" gmail)
        ("e.mail@uni.ac.uk" uni))))

(setq smtpmail-multi-default-account (quote gmail))

(setq message-send-mail-function 'smtpmail-multi-send-it)

(setq smtpmail-debug-info t)
(setq smtpmail-debug-verbose t)

;;; MU4E config

(require 'shr)

(defun shr-render-current-buffer ()
  (shr-render-region (point-min) (point-max)))

(setq mu4e-compose-dont-reply-to-self t)
(setq mu4e-compose-signature-auto-include nil)
(setq mu4e-html2text-command 'shr-render-current-buffer)

(setq mu4e-mu-binary "~/mu/mu/mu")

(setq user-full-name "Hello World")
(setq user-mail-address "other.e.mail@gmail.com")

(setq mu4e-hide-index-messages t)

(setq
   mu4e-maildir       "~/Maildir"   ;; top-level Maildir
   mu4e-sent-folder   "/sent"       ;; folder for sent messages
   mu4e-drafts-folder "/drafts"     ;; unfinished messages
   mu4e-trash-folder  "/trash"      ;; trashed messages
   mu4e-refile-folder "/archive")   ;; saved messages

(setq
   mu4e-get-mail-command "offlineimap"   ;;  -a Uni to just do university acc't
   mu4e-update-interval nil)             ;; 300 to update every 5 minutes

(setq mu4e-bookmarks
  '( ("flag:unread AND NOT flag:trashed"                "Unread messages"        ?u)
     ("date:today..now"                                 "Today's messages"       ?t)
     ("date:7d..now"                                    "Last 7 days"            ?w)
     ("date:1d..now AND NOT list:emacs-orgmode.gnu.org" "Last 1 days"            ?o)
     ("date:1d..now AND list:emacs-orgmode.gnu.org"     "Last 1 days (org mode)" ?m)
     ("maildir:/sent"                                   "sent"                   ?s)
     ("maildir:/uni/INBOX AND date:7d..now"             "University Last 7 days" ?g)
     ("maildir:/google/JUNE2015 AND date:7d..now"       "Gmail Last 7 days"      ?c)
     ("mime:image/*"                                    "Messages with images"   ?p)))

(setq mu4e-maildir-shortcuts
      '( ("/google/JUNE2015" . ?c)
         ("/uni/INBOX"       . ?g)
         ("/sent"            . ?s)))

(setq mu4e-user-mail-address-list (list "other.e.mail@gmail.com" "e.mail@uni.ac.uk"))

(setq message-kill-buffer-on-exit t)

(setq
 mu4e-view-show-images t
 mu4e-view-image-max-width 800)

;; A little demo function for switching accounts
(defun switch ()
  (interactive)
  (save-excursion (goto-char (point-min))
                  (forward-char 19)
                  (cond
                   ((looking-at "other.e.mail@gmail.com")
                    (delete-region (match-beginning 0) (match-end 0))
                    (insert "e.mail@uni.ac.uk")
                    (buffer-face-set 'default))
                   ((looking-at "e.mail@uni.ac.uk")
                    (delete-region (match-beginning 0) (match-end 0))
                    (insert "other.e.mail@gmail.com")
                    (buffer-face-set 'bold-italic))
                   (t nil))))

(add-hook 'mu4e-compose-mode-hook (lambda () (buffer-face-set 'bold-italic)))

;;; Saving outgoing mail

;; Following tip from documentation for `mu4e-sent-messages-behavior' - see also
;; http://www.djcbsoftware.nl/code/mu/mu4e/Saving-outgoing-messages.html
;; for some related points, but not necessary to do things both ways.

(setq message-sendmail-envelope-from 'header)

(setq mu4e-sent-messages-behavior
      (lambda ()
    (if (string= (message-sendmail-envelope-from) "other.e.mail@gmail.com")
        (progn (message "Delete sent mail.")
           'delete)
      (progn (message "Save sent mail.")
         'sent))))

;;; Org mode compatibility

;; Use `org-store-link' to store links, and `org-insert-link' to paste them

(require 'org-mu4e)

;;; That's all

(provide 'my-mu4e-config)

снимок экрана: просмотр списка поисковых запросов: emacs-orgmode.gnu.org

просматривая список организаций

Джо Корнели
источник
1
Поддерживает ли Windows emacs?
Leu_Grady
1
@ user3173715, OfflineIMAP официально не поддерживает Windows, «но некоторые заставили ее работать»; Fetchmail - это еще одна опция, которая является частью этого порта Unixmail для Windows ; Сам мю "написан на C и немного на C ++ (для взаимодействия с Xapian)", в котором есть "два варианта поддержки нативной Microsoft Windows". Если вам удобно собирать такие кусочки кода, вы, вполне вероятно, можете заставить его работать. Я сам не пользователь Windows, поэтому не могу рассказать вам больше, может быть, кто-то еще прокомментирует это.
Джо Корнели
2
Есть ли какой-нибудь веб-сайт, объясняющий, почему пользователь gnus хотел бы переключиться или переключился на mu4e и почему? Мне любопытно, сейчас это кажется популярным.
политза
2
@Malabarba, я добавил «минимальную конфигурацию» из документов mu4e и привел их простой пример .offlineimaprc.
Джо Корнели
2
В зависимости от того, как пользователь может видеть его, важной функцией или нарушителем соглашения является то, что mu сервер запускается все время после запуска, mu4eи это сильно влияет на производительность Emacs в моем тестировании и предотвращает использование других утилит, таких как открытие другого буфера, который необходимо использовать. aspell, Общение с mu сервером - это встроенная функция, которую нельзя отключить. На мой взгляд, это недостаток дизайна, который должен был быть исправлен с отдельными вызовами muбез запуска сервера 24/7. Чтобы проверить, напечатайте M-x list-processesпосле запускаM-x mu4e
lawlist
24

Если вы используете Gnus (уже в комплекте с Emacs), проверьте https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/master/gnus-guide-en.org

Вот краткое изложение руководства:

  • Использовать минимальную настройку из EmacsWiki достаточно ( http://www.emacswiki.org/emacs/GnusGmail ). Это настройка для любого почтового сервиса, не только Gmail
  • Вы можете читать / писать html почту
  • Вам необходимо подписаться на почтовые папки вручную
  • Нажмите C-u Enterна любую почтовую папку, чтобы увидеть ВСЕ элементы в этой папке, иначе будут видны только непрочитанные письма.
  • популярные протоколы и методы аутентификации поддерживаются "из коробки"
  • для хранения паролей я просто использовал easygpg, который входит в комплект Emacs. easygpg - это общая структура. Таким образом, пароль зашифрован и хранится в автономном режиме.
  • автономная почта локальный кеш поддерживается в Gnus много лет назад
  • Добавить / удалить / скачать вложения легко. Я не знаю, что такое перетаскивание, потому что я использую только клавиатуру. Вам нужно установить 'mailcap-mime-data`, чтобы открыть вложение в сторонних приложениях.
  • поиск почты локально / удаленно поддерживается из коробки
  • Фильтр / архив поддерживается. Но я предлагаю popfile, который является независимым почтовым фильтром. Я использую popfile, потому что он намного лучше любого другого почтового фильтра (например, собственный фильтр Gmail).
  • Управление контактами осуществляется с помощью bbdb (другого плагина Emacs), также легко импортировать контакты из Gmail с помощью gmail2bbdb.el (написано мной).
  • Для чтения rss лучше использовать elfeed (Gnus может сделать это с помощью службы Gwene, но elfeed прост в настройке и имеет больше функций из коробки). Gwene мощен, но требует гораздо больше знаний (мое руководство по Gnus, API-интерфейсы emacs-w3m, гидра, программирование на Лиспе, инструменты Linux cli, оболочка)
  • Gnus поддерживает все платформы. Но в Windows вам нужно добавить двоичный файл из OpenSSH и GnuTLS в переменную окружения PATH. Эти два пакета могут быть установлены через Cygwin. Emacs может быть родной версией Windows. Начиная с Emacs 26, все зависимости упакованы в один пакет.

Проверьте мое руководство для получения дополнительных советов.

IMO, лучше не заменять веб-интерфейс Gmail (или веб-интерфейс любой другой почтовой службы) на Gnus. Лучший способ освоить Gnus - это обращаться с Gnus как с расширением Gmail. Таким образом, вы не будете разочарованы, если Gnus может сделать определенную вещь, потому что вы всегда можете использовать веб-интерфейс.

Скриншот:

введите описание изображения здесь

чен бен
источник
4
Спасибо за добавление gnus в список, это один из канонических способов использования электронной почты с emacs. Но на данный момент этот ответ - всего лишь нечто большее, чем ответ только по ссылке. Было бы более полезно извлечь информацию из этой ссылки (или в другом месте!), Чтобы более точно ответить на вопрос: кроме предотвращения гниения ссылок, это также поможет в сравнении с другими почтовыми пакетами.
Т. Веррон
Кроме того, скриншот был бы отличным, чтобы новые посетители могли легко почувствовать внешний вид.
Джо Корнели
11

Немного

Я использую notmuch для моих писем в emacs.

Снимок экрана с видом "не очень привет"

Он работает только с локальными письмами, которые нужно хранить по одному сообщению на файл, и я использую папки maildir, в которые доставляет мой smtp-сервер. Он должен быть в состоянии справиться с другими решениями, синхронизируя почту с папками maildir на вашем компьютере.

Чтобы начать использовать его, вы устанавливаете базу командной строки и интерфейс emacs и начинаете конфигурирование с помощью мастера коротких текстов, вызывая notmuch, настраивая регулярный вызов сценария фильтрации, который вызывает notmuch newи маркирует другие письма из отмеченных вами тем (например, список рассылки). темы, которые вы хотите игнорировать) или помечайте письма, отсортированные вашим почтовым демоном, в специальные почтовые ящики. В emacs вы вызываете, M-x notmuchчтобы увидеть интерфейс раньше. Почти все настройки интерфейса могут быть выполнены через интерфейс настройки из emacs.

Так как он не загружает сообщения из других систем, он не имеет встроенной аутентификации или протоколов, кроме использования встроенной поддержки emacs для отправки электронных писем.

Он не использует папки как таковые, но на практике сохраненные поиски напоминают их для чтения писем. Он отображает все используемые теги в представлении notmuch-hello, так что когда вы решаете, как пометить свою почту, ваши списки автоматически обновляются. Он не нуждается в архивировании, так как он не должен замедляться, когда у вас много писем.

В elisp-части notmuch предусмотрены возможности быстрого полнотекстового поиска, поиска по тегам и областям поиска, чтобы составить список совпадений и ответить на сообщения. Я не знаю, как перетаскивание будет работать с notmuch, так как я использую его через терминалы и удаленные оболочки на моем сервере.

Просмотр сообщений в ветке сообщений

альтернативное древовидное представление результатов поиска

больше скриншотов: https://notmuchmail.org/screenshots/

Самым сложным было бы иметь синхронизированные теги, когда вы используете notmuch на 2 разных компьютерах, но люди обошли это, и из того, что я взял из списка рассылки, это, вероятно, работает сейчас. Или посмотрите на https://notmuchmail.org/remoteusage/ новую настройку, на которую я только что наткнулся.

Существуют пакеты для большинства дистрибутивов Linux, и он разрабатывается в базарной среде через список рассылки. Если вы самостоятельно компилируете из tarballs или git, он использует код C и имеет зависимости от Xapian для хранения выдержек из сообщений, GMime для декодирования сообщений MIME, Talloc для управления памятью и zlib (который также является зависимостью от Xapian) ,

Это, вероятно, будет хорошо работать с rss2email или любым решением, преобразующим RSS-каналы в maildirs.

Его можно использовать через командную строку, и помимо стандартного интерфейса emacs elisp другие люди используют его с Mutt (результаты поиска копий / жестких ссылок в папку maildir на диске) или vim.

Вероятно, потребуется некоторое обслуживание для продолжения работы, если объем вашей почты превышает мой (~ 90 тыс. Сообщений, не так много почты).

оборота p_wiersig
источник
1
Emacs Notmuch приятен в использовании, очень мощный, очень быстрый и довольно простой в освоении и настройке (гораздо проще, чем Gnus). Я очень доволен этим. Я не проверял Mu4e, мяу или Wanderlust, хотя. Во всяком случае, вот несколько хороших статей: lwn.net/Articles/705856 wwwtech.de/articles/2016/jul/my-personal-mail-setup
Хорхе
6

Я был счастливым пользователем мяу в течение многих лет.

Я давно не использую emacs для чтения и написания почты, поэтому эта информация вполне может быть устаревшей. Надеемся, что более поздние пользователи мяу могут заполнить его. А пока посчитайте этот ответ заглушкой. (Я сделаю это вики-сообществом, чтобы другие могли редактировать его более свободно.)

Во-первых, по моему опыту, мяу было быстро . У меня не было проблем с обработкой списков рассылки с огромным трафиком с использованием мяу.

Настройка mew была немного сложна, тем более что она используется (используется?) stunnelДля создания зашифрованных соединений с SMTP и IMAP серверами. Но в основном это просто редактирование файла ~/.mew.elи настройка каталога для хранения данных. Кроме stunnel(и, конечно, emacs), у него нет никаких зависимостей.

Документация кажется адекватной, хотя я часто смотрю в неправильный раздел. Обслуживание, кажется, замедлилось до струйки, все же. Время от времени есть некоторые исправления ошибок, но я не заметил каких-то новых функций.

Харальд Ханче-Олсен
источник
Я бы предоставил более подробную информацию, но, как я уже сказал, я давно не использовал emacs для работы с почтой. Главным образом из-за потопа электронной почты, отформатированной только в HTML, которая в долгосрочной перспективе стала основной болью в задней части страницы. Поэтому в настоящее время я использую только почтовые клиенты с графическим интерфейсом.
Харальд Ханче-Олсен
Спасибо за то, что перечислили его, надеюсь, что какой-нибудь другой пользователь может зайти и заполнить пробелы. Что касается электронных писем в формате html, может быть ситуация изменилась в целом сейчас, когда emacs поставляется с рендерером html?
Т. Веррон
@ Т.Веррон Может быть. Я почти уверен, что mew не поддерживает встроенный рендерер html из коробки. Большой вопрос, однако, как бороться с встроенными изображениями? Если это ссылки на внешние изображения, нет проблем, но как насчет изображений, включенных в сообщение? Кстати, его можно настроить для показа почты в HTML-коде с помощью w3m, но я так и не удосужился протестировать это.
Харальд Ханче-Олсен
5

WANDERLUST : https://github.com/wanderlust/wanderlust

ФУНКЦИИ:

  • Реализация только в elisp.
  • Поддержка IMAP4rev1, NNTP, POP (POP3 / APOP), MH и Maildir.
  • Интегрированный доступ к сообщениям на основе спецификаций папок, таких как Mew.
  • Связывание клавиш и обработка меток, например, Mew.
  • Управление темами и непрочитанными сообщениями.
  • Режим папок для выбора и редактирования подписанных папок.
  • Кеш сообщений, отключенная операция.
  • MH-подобный Fcc (Fcc: возможно резервное копирование%).
  • Полная поддержка MIME (от SEMI).
  • Черновик редактирования почты и новостей в виде одного интерфейса.
  • Значок на основе интерфейса для списка папок (XEmacs и> = Emacs 21).
  • Пропустить выборку части большого сообщения MIME (IMAP4).
  • Поиск на стороне сервера (IMAP4), доступен международный поиск.
  • Виртуальная папка, включая, но не ограничиваясь, пользовательский поиск с использованием Wanderlust или внешние утилиты, такие как muи grep.
  • Сжатая папка.
  • Автоматический срок действия старых сообщений.
  • Автоматическая заправка.
  • Черновые шаблоны.

EMACS WIKI: https://www.emacswiki.org/emacs/WanderLust

lawlist
источник