Raspberry Pi で Gmail のメールサーバーを利用してメールを送信する (exim4)

Raspberry Pi で Gmail のメールサーバーを利用してメールを送信する (exim4)

Raspberry Pi からメールアラートを飛ばしたかったので、 mail コマンドでメールが送信できるよう設定を行いました。

が、 ssmtp と mailutils でやっても一向にうまくいかなかったため、少々ハマりました。

下記の記事が大変助けになりました。というかほぼそのままです。ありがとうございます。

環境

  • Raspberry Pi 3
  • Raspberry Pi OS (32-bit)
  • ホスト名: raspberrypi

下記の過去記事の手順でインストールした状態です。

メールサーバーは Gmail を利用します。Google (Gmail) アカウントは2段階認証設定済みを前提とします。

Google のアプリパスワードの発行

Google にログインした状態で セキュリティ設定 を開き、 [アプリ パスワード] を選択します。

send mail via smtp with exim4 on raspberry pi 1

[アプリを選択] で「その他」 を選択し、適当なアプリ名を入力して [生成] を押します。今回は “My Alert” としました。

send mail via smtp with exim4 on raspberry pi 2

send mail via smtp with exim4 on raspberry pi 3

16 文字のアプリパスワードが生成され、画面にが表示されます。これをアカウントのパスワードとして利用できます。

send mail via smtp with exim4 on raspberry pi 4

当然ながら、このパスワードによってアカウント情報にアクセスできるようになるため、取り扱いには注意しましょう。同設定画面からいつでも削除できますので、不要になったアプリパスワードはすぐに削除しましょう。

インストールと設定

apt で exim4 と mailutils をインストールし、 exim4 の設定を開きます。

$ sudo apt install exim4 mailutils -y
$ sudo dpkg-reconfigure exim4-config

設定は図のようなダイアログ形式です。

send mail via smtp with exim4 on raspberry pi 5

exim 4 では下記のように設定します。ご自分の環境に合わせて書き換えてください。

General type of mail configuration:
  mail sent by smarthost; received via SMTP or fetchmail

System mail name:
  raspberrypi.local (独自ドメインがあればそれを設定)

IP-addresses to listen on for incoming SMTP connections:
  127.0.0.1 ; ::1

Other destinations for which mail is accepted:
  raspberrypi.local

Machines to relay mail for:
  (未入力)

IP address or host name of the outgoing smarthost:
  smtp.gmail.com:587

Hide local mail name in outgoing mail?
  No

Keep number of DNS-queries minimal (Dial-on-Demand)?
  No

Delivery method for local mail:
  mbox format in /var/mail/

Split configuration into small files?
  No

次に /etc/exim4/passwd.client に SMTP の認証用アカウントを設定します。

Gmail の場合、下記の 3 種類を設定するとよいようです。 <メールアドレス> には Gmail のアカウントを、 <アプリ パスワード> には冒頭で取得した 16 文字のアプリパスワードを記述します。(3 種類とも同じアカウント、パスワードで OK です。)

$ sudo vi /etc/exim4/passwd.client

gmail-smtp.l.google.com:<メールアドレス>:<アプリ パスワード>
*.google.com:<メールアドレス>:<アプリ パスワード>
smtp.gmail.com:<メールアドレス>:<アプリ パスワード>

exim4 の設定を反映させます。

$ sudo update-exim4.conf

これでインストールと設定は完了です。

送信テスト

ちゃんと設定できていればこれでメールが送信できるはずです。

$ echo "Hello world!" | mail -s "Test Subject" your-email@example.com
kenzauros