【Google Compute Engine】【Ubuntu 22.04】メール配信サービス Mailjetを使ってVMリブート検知のメールを作る
GCPには、OCIのようなメール配信サービス「Email Delivery」がありません。
なのでインターネット上にある他のサービスを利用します。
GCPのドキュメントにもあるSendGrid,Mailgun, Mailjetなどがあったので、そのうちMailjetを使ってみました。
Mailjetにアカウント登録
MailJetにアカウント登録後SMTPの内容(SMTP and SEND API Settings)を確認します。
デフォルトではパスワード(SECRET KEY)が生成されていないみたいで、
「Generate Secret Key」をクリックしてIDと生成されたパスワードをコピペして保存しておきます。
作成すると以下の画面のようになりますが、パスワードは2度と表示されないみたいなので 要注意です。
また画面にあるようにサーバ名とポートは以下のようになっています。
メールサーバ:in-v3.mailjet.com ポート:587
Ubuntuにメール送信クライアントを入れる
Ubuntuにもmailxコマンドがあるのですが、
Redhat系のmailxコマンドとは違うようでbsd-mailxなどをインストールするとサーバソフトもインストールされます。
期待していることと違うので、同様のことができるソフト msmtpをインストールします。
# apt install msmtp msmtp-mta
msmtpの設定ファイル
サンプルをコピーします。
# cp /usr/share/doc/msmtp/examples/msmtprc-system.example /etc/msmtprc
/etc/msmtprcファイルを以下のように書き換えました。
上のdefaultsの箇所は使いません。
user, passwordは、mailjetsのサイトのAPI KEYのIDとSECRET KEYSです。
TLSは使わず、authだけ使う場合は、auth login と書くようです。
fromのメールアドレス(from_hogehoge@gmail.com)は、mailjetにログインしたメールアドレスです。
別途mailjetにはメールアドレスを登録できる箇所もあるので、必要だったら変えた方がよいと思います。
# Example for a system wide configuration file defaults host mail.oursite.example port 465 tls on tls_starttls off from %U@oursite.example syslog LOG_MAIL #-------------------- my settings # mail service account mailjet host in-v3.mailjet.com port 587 from from_hogehoge@gmail.com user 4ed.....65aa66a51d password 26bfea.....02339 auth login tls off tls_starttls off syslog on # Set a default account account default : mailjet
送信テスト
デバッグオプションを付けて、確認します。to_hogehoge@gmail.comにメール送信します。
echo "vm rebooted on `date`." | msmtp -d to_hogehoge@gmail.com
リブートしたときに実行するようにcron.dにファイルを置きます。
/etc/crond.d/reboot-mail
reboot root /etc/reboot-mail/send.sh
/etc/reboot-mail/send.sh
#!/bin/sh printf "Subject: GCP VM rebooted" > /etc/reboot-mail/mail.txt printf "\n\n" >> /etc/reboot-mail/mail.txt printf "rebooted on `date`" >> /etc/reboot-mail/mail.txt msmtp to_hogehoge@gmail.com < /etc/reboot-mail/mail.txt
# chmod +x /etc/reboot-mail/send.sh # chown root:root /etc/reboot-mail/send.sh