星期一, 3月 12, 2007

[tip] 使用Emacs透過gmail SMTP server 寄信.

網路上有不少使用emacs透過gmail收發信的文章,
不過這篇Bill Clementson發表的vm跟emacs的使用方法可以說解釋的最為清楚.
http://bc.tech.coop/blog/061023.html
如果你有完全使用emacs收發信的需求, 可以參考這篇.
如果你跟我一樣, 其實只需要使用emacs寄信, 你可以接下去繼續看.

話說我習慣了emacs的編輯方式之後,
自然會想利用emacs透過gmail來幫我作簡單的信件功能.
由於收信比較沒有打字的需求,
其實直接用firefox瀏覽就可以了.
(對了 最近發現這個conkeror http://conkeror.mozdev.org/ 真是個好東西,
這個相當於firefox+emacs的plugin裝在筆記型電腦上 會很快就讓你忘了為什麼操作瀏覽器還需要滑鼠.)

所以其實呢,
我也不必像上述的網頁中的說明特地去多裝一個vm來收信.
只要用emacs內建的mail功能就好了.

而這個設定其實是相當簡單的.
只要在你的.emacs上加入這段:


;; ***** setup email sending names*****
(setq user-full-name "username")
(setq user-mail-address "username@gmail.com")
;; Configure outbound mail (SMTP)
(setq smtpmail-starttls-credentials '(("smtp.gmail.com" 587 nil nil))
smtpmail-smtp-server "smtp.gmail.com"
smtpmail-default-smtp-server "smtp.gmail.com"
send-mail-function 'smtpmail-send-it
message-send-mail-function 'smtpmail-send-it
smtpmail-smtp-service 587
smtpmail-auth-credentials '(("smtp.gmail.com"
587
"username@gmail.com"
nil)))

只要把上面例子的3個username替換成你的gmail帳號名字就好了.

加了幾行設定之後,以後你只要M-x mail 就可以透過emacs舒舒服服的寫信,
C-c C-c 就送出囉.
也不必裝什麼postfix還是exim,sendmail的,
emacs會透過gmail的SMTP來替你送信.
所以寄出的信件也能自動備份在你的gmail帳號裡.
這所有的一切都讓emacs跟gmail幫你搞定. 真的是很方便喔. :)

其實關於emacs我還有很多可以說的,
看一下我的.emacs.d大小:

localhost tim # du -sh .emacs.d
21M .emacs.d

就知道我真的有很多東西想說啊,

不過這篇只能算是個備忘記事,
就等有機會再慢慢講好了,,,

3 則留言:

Cornelius 提到...

照上面設定了,可是不行耶

輸入密碼後出現
Sending failed: SMTP Protocol Error

使徒提姆 !? 提到...

在smtpmail.el裏面有段註釋:

(defcustom smtpmail-sendto-domain nil
"*Local domain name without a host name.
This is appended (with an @-sign) to any specified recipients which do
not include an @-sign, so that each RCPT TO address is fully qualified.
\(Some configurations of sendmail require this.)

Don't bother to set this unless you have get an error like:
Sending failed; SMTP protocol error
when sending mail, and the *trace of SMTP session to <somewhere&rt;*
buffer includes an exchange like:
RCPT TO: <someone&rt;
501 <someone&rt;: recipient address must contain a domain
"
:type '(choice (const nil) string)
:group 'smtpmail)

在.emacs裡設定smtpmail-sendto-domain
看能不能解決你的問題.

另外會顯示這個錯誤訊息的地方也只有在smtpmail.el裡的兩處, 你可以自行研究看看.

我用同樣的設定方式倒是沒有任何問題就是了.

Cornelius 提到...

我發現為什麼了!因為他用到 curl 和 starttls 套件。

用 apt 裝好就 OK 了,感謝你的幫忙。 :)