fetchmailでgmail受信

※実際には10/16のネタです。

■fetchmailの導入
 デーモンとして起動するのは後回しにします。

$ sudo apt-get install fetchmail
$ sudo grep START_DAEMON /etc/default/fetchmail
START_DAEMON=no

■未設定だと動きません。

$ fetchmail -v
fetchmail: メールサーバが指定されておりません。

■サンプルを確認。

$ ls /usr/share/doc/fetchmail/examples/fetchmailrc.example

■これだけは設定しておく。

$ man fetchmail 2>&1 | grep "^ .*keep.*-k"
keep -k 既読のメッセージをサーバから削除しません。

$ man fetchmail 2>&1 | grep "^ .*set syslog.*s"
set syslog syslog(3) を使ったエラーのログ取得を行います。
最後に、`set syslog' を指定するとログメッセージが syslogd(8) に 送られるようになります。

後はお好みで。。。
■fetchmailrcの最小限の設定を行ないます。
 後はマニュアルを見ながらカスタマイズするということで。

 概要:995ポートのPOP3でSSLを使用したgmailの受信を行なう。
    syslogに出力し確認する。

$ FUSER=`whoami` 
FPASS=password
echo "
set postmaster ${FUSER}
set bouncemail
set syslog

defaults
no mimedecode
keep

poll pop.gmail.com
port 995
username \"${FUSER}@gmail.com\"
password \"${FPASS}\"
ssl is ${FUSER} here" > .fetchmailrc.org

■パスワードがあるので、600に。

$ cp .fetchmailrc.org .fetchmailrc
$ sudo chown `whoami`:`whoami` .fetchmailrc*
$ sudo chmod 600 .fetchmailrc*

■ステータスチェック
 何も表示されなければ正常です。

$ fetchmail -c

■受信チェック

$ fetchmail -v

※結果はsyslogで見ます。

$ sudo tail -f /var/log/syslog
Oct 16 09:29:02 vmsqueeze fetchmail[2451]: SMTP> MAIL FROM:<********@gmail.com> SIZE=3305
Oct 16 09:29:02 vmsqueeze fetchmail[2451]: SMTP< 250 2.1.0 Ok
Oct 16 09:29:02 vmsqueeze fetchmail[2451]: SMTP> RCPT TO:<********@localhost>
Oct 16 09:29:02 vmsqueeze postfix/smtpd[2452]: XXXXXXXXXXX: client=localhost[127.0.0.1]
Oct 16 09:29:02 vmsqueeze fetchmail[2451]: SMTP< 250 2.1.5 Ok
Oct 16 09:29:02 vmsqueeze fetchmail[2451]: SMTP> DATA
Oct 16 09:29:02 vmsqueeze fetchmail[2451]: SMTP< 354 End data with .
Oct 16 09:29:02 vmsqueeze fetchmail[2451]: SMTP>. (EOM)
Oct 16 09:29:02 vmsqueeze postfix/cleanup[2894]: XXXXXXXXXXX: message-id=<********@gmail.com>
Oct 16 09:29:02 vmsqueeze postfix/qmgr[1172]: XXXXXXXXXXX: from=<********@gmail.com>, size=3676, nrcpt=1 (que
ue active)
Oct 16 09:29:02 vmsqueeze fetchmail[2451]: SMTP< 250 2.0.0 Ok: queued as XXXXXXXXXXX
Oct 16 09:29:02 vmsqueeze fetchmail[2451]: サーバからメッセージを削除しませんでした。
Oct 16 09:29:02 vmsqueeze fetchmail[2451]: POP3> QUIT
Oct 16 09:29:02 vmsqueeze postfix/local[2474]: XXXXXXXXXXX: to=<********@localhost>, relay=local, delay=0.06, 
delays=0.04/0/0/0.01, dsn=2.0.0, status=sent (delivered to command: procmail -a "$EXTENSION")
Oct 16 09:29:02 vmsqueeze postfix/qmgr[1172]: XXXXXXXXXXX: removed
Oct 16 09:29:12 vmsqueeze fetchmail[2451]: POP3< +OK Farewell.
Oct 16 09:29:12 vmsqueeze fetchmail[2451]: SMTP> QUIT
Oct 16 09:29:12 vmsqueeze postfix/smtpd[2452]: disconnect from localhost[127.0.0.1]
Oct 16 09:29:12 vmsqueeze fetchmail[2451]: SMTP< 221 2.0.0 Bye
Oct 16 09:29:12 vmsqueeze fetchmail[2451]: 6.3.18 は pop.gmail.com とプロトコル POP3 を用いて 20111016092912秒 に交信しています。交信が終了しました。
Oct 16 09:29:12 vmsqueeze fetchmail[2451]: 6.3.18 は pop.gmail.com とプロトコル auto を用いて 20111016092912秒 に交信しています。交信が終了しました。
Oct 16 09:29:12 vmsqueeze fetchmail[2451]: 通常の終了です。status 0

■デーモンとして動作させる。

$ sudo cp -pi /etc/default/fetchmail /etc/default/fetchmail.org
$ sudo sed s/START_DAEMON=no/START_DAEMON=yes/ /etc/default/fetchmail.org > /etc/default/fetchmail
$ sudo /etc/init.d/fetchmail restart

■crontabでも構いません。

$ env EDITOR=vim crontab -e
0,10,20,30,40,50 * * * * /usr/bin/fetchmail -v

次は送信と文字コードかな。。。

■追記(2011/10/16)

1GBほどのメールを少しづつ同期して、約2日かかる。

※下記URLのように設定にはコメントを追加した方が良い。

http://kajuhome.com/fetchmail.shtml

☆既読かどうかチェックして(uidl)、未読のみ(no fetchall)を追加するように変更。

$ sudo tail -f /var/log/syslog | sed s/"宛に届いた"/"\n&"/
Oct 16 18:10:10 vmsqueeze fetchmail[31387]: ********@gmail.com@pop.gmail.com 宛に届いた
 289 番目のメッセージを読み飛ばしています。 サーバからメッセージを削除しませんでした。

■postfixと同様syslogで内部配送の送信チェックを行なう。 

$ sudo tail -f /var/log/syslog | grep status= --color
Oct 16 13:25:24 mlsqueeze postfix/local[17334]: 4058A18C4FC: to=, relay=local, delay=0.06, delays=0.05/0/0/0.01, 
dsn=2.0.0, status=sent (delivered to command: procmail -a "$EXTENSION")

■mailコマンドからのアクセスでも1GBもあると、結構時間がかかる。。。

$ ls -l /var/spool/mail/labunix
-rw-rw---- 1 labunix mail 1480372744 2011-10-16 16:51 /var/spool/mail/labunix

$ ls -lh /var/spool/mail/labunix
-rw-rw---- 1 labunix mail 1.3G 2011-10-16 16:51 /var/spool/mail/labunix

■既読分は/homeに移動する。これはpostfixのmail_locationで設定した場所。

$ ls -l /home/labunix/mbox
-rw------- 1 labunix labunix 18944261 2011-10-16 17:33 /home/labunix/mbox

■内部配送

後は別のdebianシステムにローカルのdovecotを指定して、fetchmailで配送出来る。
ポートやアカウント、SSLの有無を設定すれば良い。
このシステム間メールは送受信共に可能。

☆POP3の110ポート、SSL無しで取りに言った場合。

$ tail -f /var/log/syslog
Oct 16 17:52:48 amdlenny fetchmail[5481]: POP3< 12425 000030894e9a9a35

☆SSL自己証明書で取りにいった場合

$ tail -f /var/log/syslog
Oct 16 17:52:32 ibm-amddebian fetchmail[5481]: サーバ証明書検証エラー: self signed certificate

■中間まとめ

 「自己証明書ですよね?」という感じの親切なログです。
 後は、gmail経由で送信出来ればOKです。
 英語ですが、以下に必要なものはそろっている様子。

http://souptonuts.sourceforge.net/postfix_tutorial.html
 
 特に内部サーバ間のローカル配送の際にはループになら無いよう
 syslogを監視しましょう。(自戒の意味も込めて。。。)