fetchmailとssmtpでIMAPのメールを転送する
プッシュ通知/受信に対応していないIMAPのメールボックスに着信するメールを、プッシュ対応のメールボックスに転送してプッシュ通知を受け取ろうと思い設定してみました。
最初はfetchmailだけで転送までしたかったのですが、うまくいかないのでSMTP部分はssmtpに任せることになりました。
作業環境はいつものとおりdebianです。/etc/debian_versionは7.4の状態です。
以下手順のメモ
どちらもapt-getでインストールすることが可能なのでapt-getを使ってインストールを行います。
# apt-get install fetchmail ssmtp
ssmtpを設定
設定ファイルを編集します。
# nano -w /etc/ssmtp/ssmtp.conf
FromLineOverride=YES mailhub=%SMTPサーバーアドレス%:%ポート% AuthUser=%SMTPユーザー名% AuthPass=%SMTPパスワード% AuthMethod=LOGIN UseTLS=YES UseSTARTTLS=YE
今回はTLS対応のSMTPサーバーに送りつけるのでSMTPサーバーアドレスの後ろに「:」を付けてポート番号587を書きました。
AuthMethod、UseTLS、UseSTARTTLSもTLSのために付けてあります。
FromLineOverride=YESを設定しないと送信元のメールアドレスがssmtpを設定したサーバーの「ユーザ名@ドメイン名」に書き替えられてしまうようです
設定ファイルが書き終わったらテストのメールを送ってみます。例えば下記のようなtest.txtファイルを作成し、
To:%宛先メールアドレス% From:%送信元メールアドレス% Subject:テスト送信 テストメールです
ssmtpに投げます。
# /usr/sbin/ssmtp -t < test.txt
宛先に設定したメールアドレスに着信があれば設定成功です。
fetchmailを設定
今回はユーザー権限でfetchmailを動かしてみるのでホームディレクトリに.fetchmailrcを作成して編集します。.fetchmailrcはパーミッションを700に設定しないと怒られるのでパーミッションも変更しておきます。
# touch ~/.fetchmailrc # chmod 700 ~/.fetchmailrc # nano -w ~/.fetchmailrc
poll %IMAPサーバーアドレス% proto imap uidl timeout 20 username "%IMAPユーザー名%" password "%IMAPパスワード%" smtpname "%転送先メールアドレス%" mda '/usr/sbin/ssmtp -C/etc/ssmtp/ssmtp.conf %転送先メールアドレス%' idle no mimedecode keep ssl
最初はmdaではなくsmtphostを設定していましたが、ローカルホストにも外部SMTPにも接続できなかったのでssmtpをmdaとして設定する方法を教えてもらってそのようにしました。
もしかしたらsmtpnameはいらないかもしれません。
設定ファイルができたらfetchmailを起動します。
# fetchmail -v
vオプションを付けて起動することでfetchmailの情報が標準出力に吐き出されるのでうまくいかなかった時に便利だと思います。
fetchmailを動かしたらIMAPサーバーに設定したメールアドレスに対して適当なメールを送ると瞬時と言えそうなタイミングで転送先のアドレスにもメールが届きます。
なぜこの設定を行ったか
そもそもIMAPのメールをプッシュ対応のメールアドレスに転送したかったのはドコモメールがExchange設定で使用できず、対応しているアプリ・機種でしかプッシュ通知がされないということからです。
それならプッシュに対応しているメールアドレスに転送すればいいんじゃないかということで考えました。
今現在はiモードメールをiモード.netとimotenの連携でGmailに送っていますが、iモード.netが来年にはサービス終了するらしいので他の方法を探った結果です。
ドコモメールへの変更はまだですが、この組み合わせでうまくいってくれると助かるんですよね。