RaspberryPi でメール送信できるようにする方法は、検索すればたくさん出てきます。
で、よくあるのが GMail + sSMTP を利用する方法。
表題の通りですが、ハマりました。
謎のエラーで解決策はほぼ皆無でした。
お手上げです。
今回は sSMTP を諦めて Exim4 で解決した、そんな話です。
環境
Raspbian GNU/Linux 10 (buster)
Google アプリ パスワードを取得
Google アカウントの2段階認証プロセスを使わない場合は、下記設定は必要ないです。
むしろ別の設定が必要なので、「Google 安全性の低いアプリのアクセスを有効にする方法 」をご参照くださいませ。
- Google アカウントにログイン
- セキュリティ → アプリ パスワード
- アプリを選択:メール / デバイスを選択:その他(名前を入力)
- 名前は適当に RaspberryPi とか付けて生成
- 以降の AuthPass= に貼り付ける
sSMTP で謎のエラー
検索で出てきた方法をいろいろ参考にして設定。
$ sudo apt install ssmtp
$ sudo vi /etc/ssmtp/ssmtp.conf
修正前:root=postmaster
修正後:root=メールアドレス@gmail.com
修正前:mailhub=mail
修正後:mailhub=smtp.gmail.com:587
ファイル末尾に追加:
AuthUser=メールアドレス@gmail.com
AuthPass=アプリ パスワード(16文字空白なし)
UseSTARTTLS=YES
ファイアウォールを設定しているので、とりあえずポート開放。
$ sudo ufw allow 587
$ sudo ufw status
Status: active
To Action From
-- ------ ----
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
22/tcp ALLOW 192.168.X.X/24
587 ALLOW Anywhere
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
587 (v6) ALLOW Anywhere (v6)
mailutils を入れてテスト送信してみます。
$ sudo apt install mailutils
$ mail 別のメールアカウント@gmail.com
Cc: [何も入力せず Enter]
Subject: From Raspberry Pi
Send mail test.
[Ctrl+D で送信]
cannot send message: Process exited with a non-zero status
ふむ。
メッセージを送信できません:ゼロ以外のステータスでプロセスが終了しました
ならどんなステータスだったんよ?
$ echo $?
36
何それ分からん。
エラーログに何か残ってないかしら。
$ tail -n 10 /var/log/mail.log
Aug 14 16:39:56 raspberrypi sSMTP[6853]: Creating SSL connection to host
Aug 14 16:39:56 raspberrypi sSMTP[6853]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384
Aug 14 16:39:57 raspberrypi sSMTP[6853]: (raspberrypi)
$ tail -n 10 /var/log/mail.err
Aug 14 16:39:57 raspberrypi sSMTP[6853]: (raspberrypi)
Linux とは長い付き合いだけど、(raspberrypi) っていうエラーは初めて見たわ。
まじで意味わからん。
この後、Google 先生に散々泣きつきましたが結局解決策は何も無し。・・・無念。
sSMTP を諦めて Exim4 に救いを求める
「捨てる神あれば、拾う神あり」というやつですかね。
結論から言うと、自分の環境では Exim4 でメール送信できました。ありがたや。
受信もできるらしいのですが、今回はメール送信したかっただけなので受信設定は適当です。
$ sudo apt install exim4
$ sudo dpkg-reconfigure exim4-config
# ここからダイアログ形式ですが、<了解> だけの画面は省略します。
# ホスト名は「raspberrypi」の場合を想定してます。
メール設定の一般的なタイプ:
スマートホストでメール送信; SMTP または fetchmail で受信する
システムメール名:
raspberrypi.local
入力側 SMTP 接続をリスンする IP アドレス:
127.0.0.1 ; ::1
メールを受け取るその他の宛先:
raspberrypi.local
メールをリレーするマシン:
(空白)
送出スマートホストの IP アドレスまたはホスト名:
smtp.gmail.com::587
送出するメールでローカルメール名を隠しますか?
いいえ
DNS クエリの数を最小限に留めますか (ダイヤルオンデマンド)?
いいえ
ローカルメールの配送方式:
/var/mail/ 内の mbox 形式
設定を小さなファイルに分割しますか?
いいえ
root と postmaster のメール受信者:
pi
# ダイアログ形式の設定は以上です。
$ sudo vi /etc/exim4/passwd.client
# 以下をファイルの末尾に追加してください(もちろん全角文字のところは置き換えてね!)
gmail-smtp.l.google.com:メールアドレス@gmail.com:アプリ パスワード
*.google.com:メールアドレス@gmail.com:アプリ パスワード
smtp.gmail.com:メールアドレス@gmail.com:アプリ パスワード
$ sudo update-exim4.conf
期待と不安のメール送信テスト
もうドキドキでしたよ。
$ mail 別のメールアカウント@gmail.com
Cc: [何も入力せず Enter]
Subject: From Raspberry Pi
Send mail test.
[Ctrl+D で送信]
$
きた!きた!メールが飛んできた!
‹‹\('ω' )/››‹‹\( ')/››‹‹\( 'ω')/››
3時間ぐらい格闘しましたが、
なんとかメール送信できました。
まとめ
結局 sSMTP のエラーがなんだったのかは分からず仕舞いでしたが、メールが送信できるようになって良かったです。
今後は Exim4 を崇拝していきたいと思います。
同じようなエラーでお困りの方は参考にしてくださいませ。
ネタ元:
改訂版 Linux(Raspberry pi)で G-Mail を送信させる。 - なおさんの IPHONE 日記