Shogo's Blog

たぶんプログラミングとかについて書いていくブログ

RaspberryPiからメールを送る

RaspberryPi に cron を仕込んで定期実行をやってみようと考えました。 cron の設定自体は crontab -e コマンドを実行すれば簡単にできます。 ただ、これだけだとちゃんと動いているか少し心配なので、 エラーが起きた時に何か通知して欲しい。 普通なら設定ファイルに MAILTO=hogehoge@example.com と書いておくと メールが送られるはずなのですが、 メールサーバが動いてないのでうまくいかない・・・。

そういうわけで、RaspberryPiからメールを送るための設定をしたのでメモ。

MTAをインストールする

Raspberry Pi には標準でMTA(Message Transfer Agent)が入ってないようなのでインストール。 今回はPostfixを採用

1
sudo apt-get install postfix

最初、Sendmailも試してみたんだけど、送信者マスカレードがなぜかうまく行かなったので断念。 後述するように、この設定がないとスパムフィルタに引っかかってしまうのです。

プロバイダのSMTPにリレーしてもらう

実際にメールを送りには以下の条件を満たす必要があるようです。

  • 送信元のドメインを引ける
  • 固定IPからのアクセス

固定IPなんて自前で持ってないし、 cron からのメールは送信元が pi@raspberrypi になってしまいドメインを引けません。 そのためそのままではスパムメールとして扱われてしまい、メールが届きません。

そこで、プロバイダが提供しているSMTPサーバにメールをリレーしてもらいます。 /etc/postfix/main.cfに以下の行を追加します。

/etc/postfix/main.cf
1
2
3
4
5
6
sender_canonical_maps = regexp:/etc/postfix/canonical

relayhost = [smtp.example.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/relay_password
smtp_sasl_security_options = noanonymous

プロバイダにリレーしてもらうには SMTP-Auth で認証する必要があるので、 ユーザ名とパスワードを設定しておきます。

/etc/postfix/elay_password
1
smtp.example.com hogehoge:your-password

postmapコマンドを使って、Postfixから扱える形式に変換します。

command
1
$ postmap hash:/etc/postfix/relay_password

さらに、エンベロープのFromがプロバイダから提供されたメールアドレスでないと メールをリレーしてくれないので、 すべてのメールのFromをすべて書き換えるよう設定します。

/etc/postfix/canonical
1
/.*/ hogehoge@example.com

最後にPostfixに設定を読み込ませて設定完了。 cron からメールを送れるようになるはず。

command
1
$ sudo /etc/init.d/postfix reload

・・・この設定にたどり着くのに非常に苦労した。 メールなんてもう嫌だ・・・。

参考

Comments