LoginSignup
4
2

More than 3 years have passed since last update.

RaspberryPi でメール送信しようとしたら GMail + sSMTP でハマった件

Last updated at Posted at 2020-08-14

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 日記

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2