読者です 読者をやめる 読者になる 読者になる

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が来年にはサービス終了するらしいので他の方法を探った結果です。

ドコモメールへの変更はまだですが、この組み合わせでうまくいってくれると助かるんですよね。

3月26日追記

テストの構成は下図のような感じです。
Gmailの状態をfetchmailで監視、新着メールがあったらローカルのssmtpに転送、ssmtpがさくらのメールボックスのssmtpに転送して、そこからYahoo メールに転送されます。
テストのために構成してるので終着点がプッシュ対応のメールサービスではありません。
f:id:k-side:20140326112509p:plain