メールを送受信できるように、メールサーバを構築すると、ドメインやらセキュリティやら色々と大変のため。
メール発信元としてGmailアカウントを使用させて頂き、Raspberry Pi からメールを飛ばしてみようと思います。(送信専用
今回は、ユーザアカウント向けの設定ではなく、システム(Raspberry Pi OS等)全体で送信できる設定にしたいと思います。
理由は、たとえばストレージの状態等、システムの警告等をメールで飛ばせるようにしたいからです。
設定手順を記録させて頂こうと思います。
目次
msmtpによるGmail送信設定手順
二段階認証のアプリパスワード作成
今回、Gmailアカウントを使用させて頂くということで。Gmail側で、下記の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 --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つ作るだけで完了しました。
コミュニケーションとしてのメール送受信とは別に、システムのシグナル、情報や警告の送信に使用できると思いますので、応用範囲はかなり広いと思います。
次回は、ストレージか何かのデバイスのレポートを、通知できるように設定してみたいと思います。
ではまた!