Raspberry Pi から Gmail のメールサーバーを経由してメールを送信する方法です.
ラズパイで稼働しているサーバの監視用途,たとえばcrontabのエラー,セキュリティの警告などをメールで通知する用途を想定しています
OSはdebian系を使っているものとして,exim4を使います.
Gmail側の仕様が変わったので2024年版として新しく記事を用意しました
Gmail側の設定
2024年現在,gmailでSMTPを使うためには「アプリパスワード」を使う必要があります.
アプリパスワードは16文字で,具体的には以下の手順で作成できます.
- Googleアカウントにログインする.URLは https://myaccount.google.com.
- 「2 段階認証プロセス」を有効にする
- 有効にしてない場合は,左のメニューから「セキュリティ」 を選択し,「Google にログインする方法」の「2 段階認証プロセス」を有効にします
- Googleアカウントの画面、左のメニューから「セキュリティ」 を選択
- 「2 段階認証プロセス」をクリックして「2 段階認証プロセス」の設定画面を開く
- 画面下にある「アプリ パスワード」をクリック
- 「アプリ パスワード」を新規作成する
ラズパイ側の設定
exim4 の設定を行います
設定ファイル /etc/exim4/update-exim4.conf.conf の内容を次のように編集します
dc_eximconfig_configtype='smarthost' dc_other_hostnames='' dc_local_interfaces='127.0.0.1' dc_readhost='ホスト名' dc_relay_domains='' dc_minimaldns='false' dc_relay_nets='' dc_smarthost='smtp.gmail.com::587' CFILEMODE='644' dc_use_split_config='true' dc_hide_mailname='false' dc_mailname_in_oh='true' dc_localdelivery='mail_spool'
dc_readhost はホスト名を指定します.指定した文字列はメールの送信元などに利用されますが,DNSに登録されてないホスト名でもとりあえずはOKです
送信用パスワードは,ファイル /etc/exim4/passwd.client に記載します
smtp.gmail.com:GMAILのメアド:アプリパスワード
アプリパスワードは空白を除外した16文字の文字列を記載します
設定を反映させます
$ sudo /usr/sbin/update-exim4.conf
$ sudo systemctl restart exim4
動作確認
ログファイルを確認します.ファイル名は /var/log/exim4/mainlog です
試しにメールを送信してみます
$ date | mail 送信先メールアドレス
ログファイルに Completed とメッセージが出力されればメール送信は成功しています
補足
mainlogのTLS error
ログファイルに
TLS error on connection (recv): The TLS connection was non-properly terminate
と TLS のエラーが出力されますが,これは無視して良いようです.
eximのバグレポートはこちら
https://bugs.exim.org/show_bug.cgi?id=2034
要約すると
- このメッセージはTLSの接続が切断された場合に出力される
- 接続切断はサーバーの負荷低減になるので,サーバー側が意図的に切断している場合がある(つまりサーバー側は正常動作してる)
- exim側からみるとこれは強制切断なのでログメッセージを消すことはできない
ということのようです.