Ubuntu 20.04でcronの実行結果をmsmtpでメール送信

Server

cronで定期実行したいときに気になるのは、エラーなくプログラムが実行されているかどうか、、、
cronのMAILTOを設定すれば、実行結果をメールで通知することができます

・環境

Ubuntu 20.04
msmtp version 1.8.24

・メール送信ツールでcron実行結果をメール送信

cronは実行結果をデフォルトでメールで送信できるようになっています。ただし、メール送信ツールと設定が必要です

今回はmsmtpを使用します
msmtpは外部SMTPサーバーを経由してメールを送信するシンプルなツールです

msmtpをインストール

アップデートしてからインストールします

sudo apt update
sudo apt install msmtp

インストール途中で、AppArmor supportを使用するか聞かれますが使用するを選択します

AppArmor (Application Armor) は、Linuxシステムでアプリケーションごとにセキュリティポリシーを定義して動作を制御するためのセキュリティモジュールです
AppArmorは、アプリケーションがアクセス可能なリソースを制限することで、システムのセキュリティを強化しますAppArmor supportは、AppArmorがインストールされ、有効化されているシステム上で特定のアプリケーションやプロセスがAppArmorのポリシー管理に対応していることを意味します

設定ファイルの作成

gmailを使う場合を想定して設定ファイルを作成します

nano ~/.msmtprc

~/.msmtprcは、現在のユーザーのホームディレクトリ内にある隠し設定ファイル.msmtprcを指します

以下に設定内容を記述します

defaults
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log

account default
host smtp.gmail.com
port 587
auth on
user XXX@gmail.com
password XXXXXXXXXXXXXXXXX
from XXX@gmail.com

userとfromには使用するgmailアドレスを書きます
passwordはgmailのアプリパスワードを空白なしで書きます
アプリパスワードがわからない方は以下の記事を参考に取得してください

パーミッションの変更

chmod 600 ~/.msmtprc

sendmailコマンドの代替として設定

sudo ln -sf /usr/bin/msmtp /usr/sbin/sendmail

複数のユーザーやrootユーザーで設定する場合

crontabはユーザーごとに違うため、この設定ファイルもユーザーごとに作成する必要があります
ユーザー切り替えコマンドでユーザーを切り替えて先ほどの設定ファイルの作成から同じ作業をする必要があります

# rootユーザーに変更
sudo su

# 他のユーザーに変更
su username

これでmsmtpの設定が完了です

・cronでMAILTOに設定

cronジョブでメール通知を有効化します
crontabを編集します

crontab -e

crontabの中にMAILTOを追加して、メールアドレスを記述します
MAILTOを””にするとメール送信が無効になります

MAILTO="XXX@gmail.com"

メール通知が正しく動作するかを確認するため、以下の簡単なジョブを設定します

* * * * * echo "Cron job executed successfully"

1分ごとにメールが届いていれば確認完了です

実行ログを見るには以下のコマンドを入力します
リアルタイムでログを監視することができます

tail -f ~/.msmtp.log

ログは以下のようなものが出力されると思います

12月 08 05:55:05 host=smtp.gmail.com tls=on auth=on user=XXX@gmail.com 
from=XXX@gmail.com recipients=XXX@gmail.com mailsize=503 smtpstatus=250 
smtpmsg='250 2.0.0 OK exitcode=EX_OK

ログの解析

host=smtp.gmail.com

メール送信に使用したSMTPサーバーがgmailのSMTPサーバー(smtp.gmail.com)であることを示しています

tls=on

メール送信時にTLS(Transport Layer Security)が有効であり、通信が暗号化されていることを示します

auth=on

SMTP認証が有効であり、認証情報(ユーザー名とパスワード)が使用されたことを示しています。

user=XXX@gmail.com

GmailのSMTPサーバーにログインするために使用されたユーザーアカウントを示しています

from=XXX@gmail.com

メールの送信元アドレスを示しています

recipients=XXX@gmail.com

メールの送信先アドレス(受信者)を示しています

mailsize=503

送信されたメールのサイズが503バイトであることを示しています。

smtpstatus=250

SMTPプロトコルにおけるステータスコード。250は「リクエスト成功」を意味します

smtpmsg=’250 2.0.0 OK …’

SMTPサーバーからの詳細なレスポンスメッセージ。250 2.0.0 OKは、メールが正しく受け付けられたことを示します

exitcode=EX_OK

プロセスの終了コードで、EX_OKは正常終了を意味します

このように、TLS(Transport Layer Security)が有効であり、通信が暗号化されて、SMTP認証が有効であり、正常に終了したことがわかります

コメント