Gnus+MSMTP实现多账号邮件发送

| No Comments | No TrackBacks
多年来一直使用Gnus作为新闻组和邮件程序,但是一直为Gnus的多账号情况下发送邮件问题所困扰,最近有想法换一个别的程序,可惜研究之后发现找不到一个能满足我需求的程序,因为我使用offlineimap进行本地和服务器端的同步(我的多数邮箱都支持IMAP),然后用nnmaildir后端管理。最后决定还是回到Gnus本身来寻找解决方法,因为毕竟唯一的问题就是多账号SMTP发送。 网络上有几种可选方案,其中被广泛采用的可能是 fs-change-smtp 这个函数,但是我使用并不成功。 我一直以来使用的是msmtp,但是为此需要配置复杂的posting styles,而我的工作邮件是按照公司名归档的,这样一个组里我所用的邮箱就不只是一个,这特别对回复邮件特别不方便,因为为了激活posting style需要在特定的组里回复才行。 昨晚经过几个小时的艰辛努力,终于写除了一个10来行代码(汗!),彻底解决了这个困扰已久的问题。自认为这是到目前为止最简单也是最灵活有效的解决办法。 设置MSMTP MSMTP配置很简单,参考主站的文档即可。 注意事项 文档中的配置文件中,指定了一个 default account,通过 account default 或者 default account : defaultemail。我发现为了Gnus正常使用,不能指定default账号。(这一点有时间需要再研究一下) 建议 为了记忆的方便,建议account label直接使用email地址,也就是说: 文档中 account gmail host … … 我的建议是 account youraccount@gmail.com host … … Gnus设置 在.gnus.el中加入以下代码: [Code] ;; Choose account label to feed msmtp -a option based on From header in Message buffer; ;; This function must be added to message-send-mail-hook for on-the-fly change of From address ;; before sending message since message-send-mail-hook is processed right before sending message. (defun cg-feed-msmtp () (if (message-mail-p) (save-excursion (let* ((from (save-restriction (message-narrow-to-headers) (message-fetch-field “from”))) (account (cond ;; I use email address as account label in ~/.msmtprc ((string-match “myemail1@server1.com” from)“myemail1@server1.com”) ;; Add more string-match lines for your email accounts ((string-match “myemail2@server2.com” from)“myemail2@server2.com”)))) (setq message-sendmail-extra-arguments (list “-a” account)))))) (setq message-sendmail-envelope-from ‘header) (add-hook ‘message-send-mail-hook ‘cg-feed-msmtp) 根据email账号增加相应的 ((string-match “myemail1@server1.com” from) “myemail1@server1.com”) 行,其中 myemail1@server1.com 等就是在 .msmtprc 中的对应的account label。 结束语 这个设置就是这么简单,但是完全避免了使用复杂的posting styles来配置。 以上代码关于获取 From header部分借自 fs-change-smtp。

No TrackBacks

TrackBack URL: http://cyberhut.org/mt/mt-tb.cgi/27

Leave a comment

About this Entry

This page contains a single entry by cg published on October 13, 2007 5:15 PM.

Leafnode was the previous entry in this blog.

ERC is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.