Raspberry PiからGmailを送信するには

メールを送受信できるように、メールサーバを構築すると、ドメインやらセキュリティやら色々と大変のため。

メール発信元としてGmailアカウントを使用させて頂き、Raspberry Pi からメールを飛ばしてみようと思います。(送信専用

今回は、ユーザアカウント向けの設定ではなく、システム(Raspberry Pi OS等)全体で送信できる設定にしたいと思います。

理由は、たとえばストレージの状態等、システムの警告等をメールで飛ばせるようにしたいからです。

設定手順を記録させて頂こうと思います。


msmtpによるGmail送信設定手順

二段階認証のアプリパスワード作成

今回、Gmailアカウントを使用させて頂くということで。Gmail側で、下記の2点の設定を行いました。

  1. 二段階認証の有効化
  2. アプリパスワードの作成

Raspbrery Piのメール送信用に、専用のパスワードを発行します。そのために、二段階認証を有効にする感じです。

こちらから行うことが可能です。

アプリパスワードにつきましては。

作成画面から、「メール」→「その他(名前を入力)」→あとでパスワードを管理するときに、「ああ、Raspberry Piからメールを飛ばす用のパスワードか」とわかる名前をつけておきましょう。

画面右上の「お使いのデバイスのアプリ パスワード」が、今回生成されたパスワードになります。こちらを控えておきましょう。


msmtpのシステム向け設定

それでは、Raspberry Pi側の設定に入ります。

今回はRaspberry Pi OSを使用しましたが、一般的に使用されるパッケージのため、他のディストリビューションでも同じ設定手順で使用可能かと思います。

メールの送信は、msmtpを使用させて頂きました。

msmtpインストール

msmtp本体と、sendmail互換として使用するためのmtaパッケージ、メール送信コマンド用にs-nailをインストールします。

sudo apt install msmtp msmtp-mta s-nail

msmtprcファイルの確認

インストールされた、msmtpのバージョンを確認します。

msmtp --version

これは、設定ファイルを確認するためです。システム用の設定は、「/etc/msmtprc」であることがわかります。もしもユーザ向けに作成する場合は、「~/.msmtprc」になります。

/etc/msmtprc作成

作成時の注意点は、msmtprcファイルのモードは640にしたことと、所有者をmsmtpに変更する点です。所有者がrootユーザでは、正しく動作しないと思います。

また今回はシステム向けということで、パスワードを平文で記録します。もしユーザ用に設定を作成する場合は、平文ではなく必ず暗号化して下さい。

sudo touch /etc/msmtprc
sudo chown msmtp:msmtp /etc/msmtprc
sudo chmod 640 /etc/msmtprc
cat << EOF | sudo tee /etc/msmtprc
defaults
auth on
tls on

account        gmail
host           smtp.gmail.com
port           587
from           <gmailユーザ名>@gmail.com
user           <gmailユーザ名>
password       <作成したアプリパスワード>

account default : gmail
syslog LOG_MAIL
EOF

送信ログは、syslogに残るようにしました。

設定作成後、念のためサービスを再起動しました。

sudo systemctl daemon-reload
sudo systemctl restart msmtpd.service


メールの送信

インストールしました、s-nailを使用してメールを送信してみます。

s-nailコマンドのオプションで、from、to、Subject(タイトル)を指定しました。

catコマンドで本文を入力後、EOFで終了・送信する感じです。

cat << EOF| s-nail -r <gmailユーザ名>@gmail.com -s <タイトル> -T "to:<宛先のメールアドレス>"
<メール本文を記入>
EOF

このような感じで、警告やエラーメッセージが表示されていなければ、送信されていると思いますが。

Tinker Board 2SのDebianで試したところ、s-nailのオプションが異なっていました。こちらも記録しておきます。

cat << EOF| s-nail -r <gmailユーザ名>@gmail.com -s <タイトル> <宛先のメールアドレス>
<メール本文を記入>
EOF

-Tオプションが使用できず、代わりに直接宛先アドレスを指定しました。


送信ログの確認

送信ログを見てみましょう。

sudo cat /var/log/syslog |grep msmtp
sudo cat /var/log/mail.log

ふむふむ。

msmtpコマンドまたはsendmailコマンドで送信した場合は、上記のログが記録されるようですが。

s-nailで送信した場合は、こちらにログは残らない感じでしょうか。

このあたりは、システムからメールを送信する場合、どのように送信し、どのようにログを記録するかを検討する必要がありそうです。

ちなみに、先程送信したテストメールは、正しく送信されて、受信側のメールアドレスで内容を確認することができました。

設定に問題は無さそうです。(s-nail送信時のログ以外

※23.12.23追記:送信ログですが、systemdのユニットのジャーナルに残るかどうか確認してみました。msmtp.serviceユニットのジャーナルは、このような感じで起動時のみ記録されていました。

送信ログはジャーナルにも無い感じです。


Raspberry Piを動かしていて、なにか通知を受け取りたい場合、古い技術ながら、メールは信頼できる通知の手段の1つかと思います。

Twitterは色々と状況が変わっているようですし、信頼できる他の通知の手段は、いったい何があるのか、思いつかない状況です。

Gmailの送信設定は、それほど複雑ではなく、設定ファイルを1つ作るだけで完了しました。

コミュニケーションとしてのメール送受信とは別に、システムのシグナル、情報や警告の送信に使用できると思いますので、応用範囲はかなり広いと思います。

次回は、ストレージか何かのデバイスのレポートを、通知できるように設定してみたいと思います。

ではまた!

スポンサーリンク

フォローする

スポンサーリンク