2010年6月12日 星期六

在 Ubuntu 8.04 上透過 gmail 用命令列寄信

2012-03-01 更新

找到更通用的作法, 用 Python 的 smtplib, 細節見 segfault.in » Sending Emails Via Gmail SMTP With Python

( 之前寫的舊方法 )

用命令列寄信好處多多, 像是程式掛的時候寄個信通知自己。但若又懶得自己架個 mail server, 可以透過 gmail 幫忙寄信。

安裝

參考這篇設定 ~/.mailrc 和 ~/.msmtprc。這篇有更詳細的 msmtp 設定。之後用命令列的 mail 寄信時就會透過設好的 gmail client 寄信。簡記過程如下。
$ sudo aptitude install heirloom-mailx msmtp
$ vim ~/.mailrc # 見下文
$ vim ~/.msmtprc # 見下文
$ chmod 600 ~/.msmtprc
$ echo "Hello, world!" | mail -s "Test from command line" somebody@somedomain.org
~/.mailrc
set from="YOURNAME@gmail.com (YOURNAME)"
set sendmail="/usr/bin/msmtp"
set message-sendmail-extra-arguments="-a gmail"
~/.msmtprc
defaults
logfile /home/USER/msmtp.log

# gmail account
account gmail
auth on
host smtp.gmail.com
port 587
user YOURNAME@gmail.com
password YOURPASSWORD
from YOURNAME@gmail.com
tls on
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt

# set default account to use (not necessary with single account)
account default : gmail

可能遇到的問題

msmtp: no recipients
mail 裝到mailutils。移掉它改裝 heirloom-mailx。
msmtp: TLS certificate verification failed: the certificate hasn't got a known issuer
用到舊的 certificate, 參照 msmtp 設定, 在 ~/.msmtprc 裡這麼設 tls_trust_file:
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
這檔案本來就在我的系統裡, 不知是 Ubuntu 裝好時就有還是之前裝啥東西時一併裝進來的。

6 則留言:

  1. Dear fcamel,
    我照了你的作法設定, 測式寄信到我的gmail信箱.
    但是連線到 smtp.google.com 就會 timeout 了.
    不知你是否有遇過相同的狀況? 謝謝!

    回覆刪除
  2. Hi superptt,

    我當時沒遇到這問題, 這篇文章有點舊了, 也許後來有些變化就失效了

    回覆刪除
  3. @superptt, 我有個在 msmtp-1.4.23 確定會動的設定範例在此:
    http://itrs.tw/hg/personal-config/file/206e087662de/.msmtprc

    你需要改的除:
    1. from
    2. user
    3. password (行首註解要拿掉)
    若你用的不是 Fedora / Red Hat 還要改:
    4. tls_trust_file

    題外話,憑證安裝在 Linux distro 間分裂的特別嚴重。Ubuntu, Fedora, openSUSE certificate 都放在不的地方,甚至用不同格式。想裝個憑證然後讓 nss, openssl 與 gnutls 都會去讀在各個 distro 間也需要不同作法。比 Windows 與 Mac 麻煩的多。 Fedora 本有計畫將全部程式 port 到用 nss, 可惜未竟全工就遇到很多阻力而 stall 住了: http://fedoraproject.org/wiki/FedoraCryptoConsolidation

    回覆刪除
  4. To Scott,
    真是太感謝你了 ^^

    回覆刪除
  5. Dear Fcamel:
    我照您的作法在Linux Mint 13會出現event not found 如下:

    egret@power ~ $ echo "Hello, world!" | mail -s "Test from command line" bunjinw@gmail.com
    bash: !": event not found

    請您指導,感謝

    回覆刪除

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...