RaspberryPi に cron を仕込んで定期実行をやってみようと考えました。
cron の設定自体は crontab -e
コマンドを実行すれば簡単にできます。
ただ、これだけだとちゃんと動いているか少し心配なので、
エラーが起きた時に何か通知して欲しい。
普通なら設定ファイルに MAILTO=hogehoge@example.com
と書いておくと
メールが送られるはずなのですが、
メールサーバが動いてないのでうまくいかない・・・。
そういうわけで、RaspberryPiからメールを送るための設定をしたのでメモ。
MTAをインストールする
Raspberry Pi には標準でMTA(Message Transfer Agent)が入ってないようなのでインストール。 今回はPostfixを採用
sudo apt-get install postfix
最初、Sendmailも試してみたんだけど、送信者マスカレードがなぜかうまく行かなったので断念。 後述するように、この設定がないとスパムフィルタに引っかかってしまうのです。
プロバイダのSMTPにリレーしてもらう
実際にメールを送りには以下の条件を満たす必要があるようです。
- 送信元のドメインを引ける
- 固定IPからのアクセス
固定IPなんて自前で持ってないし、 cron からのメールは送信元が pi@raspberrypi になってしまいドメインを引けません。 そのためそのままではスパムメールとして扱われてしまい、メールが届きません。
そこで、プロバイダが提供しているSMTPサーバにメールをリレーしてもらいます。
/etc/postfix/main.cf
に以下の行を追加します。
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 で認証する必要があるので、 ユーザ名とパスワードを設定しておきます。
smtp.example.com hogehoge:your-password
postmapコマンドを使って、Postfixから扱える形式に変換します。
$ postmap hash:/etc/postfix/relay_password
さらに、エンベロープのFromがプロバイダから提供されたメールアドレスでないと メールをリレーしてくれないので、 すべてのメールのFromをすべて書き換えるよう設定します。
/.*/ hogehoge@example.com
最後にPostfixに設定を読み込ませて設定完了。 cron からメールを送れるようになるはず。
$ sudo /etc/init.d/postfix reload
・・・この設定にたどり着くのに非常に苦労した。 メールなんてもう嫌だ・・・。