2009年10月6日火曜日

fetchmail+procmailで携帯へメール転送

fetchmailで複数のアカウントのメールを携帯に転送する方法について。自分の設定のまとめ。使用しているのはFreeBSDが稼働する自宅サーバ。
fetchmailをデーモン起動し、pop3にて複数サーバからメールを取得し、これをprocmailに渡して、必要なメールだけをフィルタリングして携帯のアドレスに送信している。以下に僕の場合の例として紹介します。
なお、 fetchmail release 6.3.8+RPA+SDPS+SSL+OPIE+NLS / procmail v3.22 です。

■インストール
# cd /usr/ports/mail/fetchmail
# make
# make install

# cd /usr/ports/mail/procmail
# make
# make install

■基本設定
上記のインストールで、
/usr/local/etc/rc.d/fetchmail
が自動生成されていた。これがデーモンでのfetchmailの起動コマンドになる。すなわち
/usr/local/etc/rc.d/fetchmail start ←起動
/usr/local/etc/rc.d/fetchmail restart ←再起動
/usr/local/etc/rc.d/fetchmail stop ←停止
とできる。

fetchmail を root で使うことは推奨されていない。FreeBSD上にあるいずれかのユーザーで使うようにする。
どのユーザーで使用できるようにするかを、利用の有効化と合わせて、/etc/rc.conf に設定する。
ここでは仮に hoge ユーザーで使用することにする。ユーザーはスペース区切りで複数指定できる。なお、ポーリングのインターバル時間(何秒毎にメールサーバに問い合わせるか)も合わせて設定。
↓/etc/rc.conf に追加する設定の記述
fetchmail_enable="YES"
fetchmail_users="hoge"
fetchmail_polling_interval="180"
■転送設定
▼fetchmail
fetchmailの設定自体は、上記で使うことにしたユーザーのホームディレクトリに .fetchmailrc ファイルを作って行う。つまり、.fetchmailrc があれば自動的に読み込まれ、指定のインターバルで実行される。以下のように設定した。
なお、このファイルのパーミッションは 600 にすること。> chmod 600 .fetchmailrc
↓/home/hoge/.fetchmailrc の設定
set postmaster hoge
set logfile fetchmail.log
defaults
  protocol pop3
  uidl
  no rewrite
  no mimedecode
  keep
  mda "/usr/local/bin/procmail"

poll pop.smallmake.com
  username "hogege"
  password "********"
poll pop3.nifty.com
  username "hogege"
  password "*******"
poll pop.appale.com
  username "ichirohoge"
  password "********"
poll pop.atandta.net
  username "info"
  password "********"
"keep" の指定によってサーバーにメールを残している。この場合のポイントは、 "udil" の指定。これは一度転送したメールは転送しない設定。これがないとインターバル時間毎に、同じメールを何回も送って来てしまう。"protocol" 指定の直後に指定しておくのがよいようだ。
そして、"mda" としてprocmail コマンドを指定。これで、メールをprocmailに引き渡せる。
"poll"指定のあとに、メールサーバーとアカウント名とパスワードを指定。複数指定できる。

▼procmail
procmail もホームディレクトリに設定用ファイルを作る。ファイル名 .procmailrc である。
↓/home/hoge/.procmailrc の設定
TRANSTO=hogenokeitai@docomo.ne.jp
:0
* ^Subject:.*TASK-ML.*
/dev/null
:0 E
* ^Subject:.*Report www.appale.com.*
/dev/null
:0 E
* ^To:.*hogege@smallmake.com.*|^To:.*ichiro@smallmake.com.*
!$TRANSTO
:0 E
* ^To:.*hogege@nifty.com.*
!$TRANSTO
:0 E
* ^To:.*info@atandta.net.*
  {
     :0
      * ^From:.*@ atandta.net.*|^From:.*@ atandta-net.com.*
      * ! ^From:.*info@ atandta.net.*
       !$TRANSTO
  }
":0" はプログラム構文の IF にあたり、 ":0 E" は ELSE IF にあたると考えてよい。つまり僕の場合、頭から条件に当てはまるものを順に処理し、前の条件で処理しなかったものを次の処理に回わすようにしている。
"*" で始まる行が条件の内容で一致した場合にその次の行の評価または実行を行う。なお、ここでは全てメールのヘッダを対象に検査している。メール本文を検査したい場合は、上記の指定を":0 B"と記述するらしいが僕の場合は使用していない。また、ELSE IF ではなく、前に評価したものをさらに次の条件でも検査したい場合 ":0 c"と書くらしいが、これも今回は使わなかった。条件の内容については ORは "|" で、 NOT は "!" で記述できる。また"{" と "}" でくくることで条件をネストできる。
"!" で始まる行がメール転送先の指定。転送先は冒頭でTRANSTOという変数を作って代入し、それを参照している。"/dev/null" はその条件に当てはまるメールをnullに捨てて、転送しない設定である。転送やnull指定以外にもファイルに書き出したりなどする方法もあるが、今回は使っていない。

だいたい以上のような内容である。FreeBSDが起動したときにfetchmailがデーモンとして自動起動するようにしたいが、それについてはまだやっていない。

参考にしたサイト:
ノートPC ARMADAにPlamoLinuxをインストール
.procmailrc - メール振り分け
procmailレシピ

0 件のコメント:

コメントを投稿