Raspberry Pi で装置を作った時に装置の状況をメールで管理者に通知出来たら便利です。今回はPiからメールを出す事を目標にします。
Raspberry Piにメールサーバを立ててそれを管理しメールを出すことは可能ですが、
- サーバーの調整、管理が難しい
- 頻繁にメールを出す事を想定していない。
- なるべく簡単に済ませたい
から、サーバは契約しているメールサーバを使い、そのメールサーバまで送りたいメールを届けるメールソフト、”msmtp” を使用する事にしました。
msmtpのインストール
インストールは簡単です。apt を使って、以下でインストール出来ます。
sudo apt update
sudo apt install msmtp
設定ファイルの編集
設定ファイルは、/usr/share/doc/msmtp/examples/msmtprc-user.example に有ります。
# Example for a user configuration file ~/.msmtprc
#
# This file focusses on TLS and authentication. Features not used here include
# logging, timeouts, SOCKS proxies, TLS parameters, Delivery Status Notification
# (DSN) settings, and more.
# Set default values for all following accounts.
defaults
# Use the mail submission port 587 instead of the SMTP port 25.
port 587
# Always use TLS.
tls on
# Set a list of trusted CAs for TLS. The default is to use system settings, but
# you can select your own file.
#tls_trust_file /etc/ssl/certs/ca-certificates.crt
# If you select your own file, you should also use the tls_crl_file command to
# check for revoked certificates, but unfortunately getting revocation lists and
# keeping them up to date is not straightforward.
#tls_crl_file ~/.tls-crls
# A freemail service
account freemail
# Host name of the SMTP server
host smtp.freemail.example
# As an alternative to tls_trust_file/tls_crl_file, you can use tls_fingerprint
# to pin a single certificate. You have to update the fingerprint when the
# server certificate changes, but an attacker cannot trick you into accepting
# a fraudulent certificate. Get the fingerprint with
# $ msmtp --serverinfo --tls --tls-certcheck=off --host=smtp.freemail.example
#tls_fingerprint 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33
# Envelope-from address
from joe_smith@freemail.example
# Authentication. The password is given using one of five methods, see below.
auth on
user joe.smith
# Password method 1: Add the password to the system keyring, and let msmtp get
# it automatically. To set the keyring password using Gnome's libsecret:
# $ secret-tool store --label=msmtp \
# host smtp.freemail.example \
# service smtp \
# user joe.smith
# Password method 2: Store the password in an encrypted file, and tell msmtp
# which command to use to decrypt it. This is usually used with GnuPG, as in
# this example. Usually gpg-agent will ask once for the decryption password.
passwordeval gpg2 --no-tty -q -d ~/.msmtp-password.gpg
# Password method 3: Store the password directly in this file. Usually it is not
# a good idea to store passwords in plain text files. If you do it anyway, at
# least make sure that this file can only be read by yourself.
#password secret123
# Password method 4: Store the password in ~/.netrc. This method is probably not
# relevant anymore.
# Password method 5: Do not specify a password. Msmtp will then prompt you for
# it. This means you need to be able to type into a terminal when msmtp runs.
# A second mail address at the same freemail service
account freemail2 : freemail
from joey@freemail.example
# The SMTP server of your ISP
account isp
host mail.isp.example
from smithjoe@isp.example
auth on
user 12345
# Set a default account
account default : freemail
上記の例を参考に各パラメータを設定してホームディレクトリに”.msmtprc” として保存します。今回はメールサーバに、”yahooメール(co.jp)”を使います。”Yahoo!メールをより安全にご利用いただくためのメールソフト設定(送受信認証方式)変更のお願い“ から送信メールサーバの各パラメターは下記と分かりました。これを元にファイルの設定を行います。
送信メール(SMTP)サーバー | smtp.mail.yahoo.co.jp |
送信メール(SMTP)通信方法 | SSL(暗号化) |
送信メール(SMTP)ポート番号 | 465 |
defaults
auth on
tls on
account xxxxx
host smtp.mail.yahoo.co.jp
port 465
from AAAAA@yahoo.co.jp
user AAAAA
password BBBBB
account default : xxxxx
行 | 項目 | 内容 |
1 | defaults | 各アカウントで共通部分を定義。今回は、auth とtls が共通部分 |
2 | auth on | 参照ファイルをが on になっていたのでまま使用。 |
3 | tls on | 参照ファイルをが on になっていたのでまま使用。 |
5 | account xxxxx | ”msmtp”で使用するアカウントを指定。 |
6 | host smtp.mail.yahoo.co.jp | SMTPのアドレスを設定。今回は、smtp.mail.yahoo.co.jp |
7 | port 465 | SMTPのポートを設定。今回は、465 |
8 | from AAAAA@yahoo.co.jp | Yahooと契約しているメールアドレスを指定します。 |
9 | user AAAAA | ユーザー設定。普通は、メールアドレスの、”AAAAA”の部分。 |
10 | password BBBBB | 契約しているメールのパスワードを入力 |
12 | account default : xxxxx | Defaultアカウント設定。アカウントが1つですがDefaultに設定。 |
設定しホームディレクトリに、”.msmtprc” として保存して設定は終了。
実行
実行する前に、”.msmtprc”の権限を設定する必要が有ります。権限の設定は、chmod 600 .msmtprc ユーザのみ R/W可能。多分このファイル、メールのパスワードを平分で入力しているので他のユーザに見られない様にする為でしょうか。権限を設定したターミナルで下記を実行。これで宛先、mmmmm@xxx.xxx に ”hello there.” とメールが送られるはずです。
echo "hello there." | msmtp mmmmm@xxx.xxx
でも、エンターを押すとカーソルが改行するのですが帰って来ません。もちろんメールの届きません。何か問題が有る様です。
設定をもう一度見直す
ここに、”msmtp (1) – Linux Man Pages” 詳細が有ったので参考にして設定を見直しました。
- auth on
- onと設定するとSMTPサーバの認証を設定したパスワードを用いて自動行ってくれるようです。
- ここは、”on” で OK
- tls on
- ここを、”on”にすると、tls_certcheck を ”off” にしなさいと有ります。
- ”off” にするため、tls_certcheck off を追加
- tls_starttls [(on|off)]
- tlsをonにした場合、これをoffにしなさいと有ります。
- ”off” にするため、tls_starttls off を追加
修正した、”.msmtprc” は、以下の通り。前回から4,5行を追加しています。
defaults
auth on
tls on
tls_certcheck off
tls_starttls off
account xxxxx
host smtp.mail.yahoo.co.jp
port 465
from AAAAA@yahoo.co.jp
user AAAAA
password BBBBB
account default : xxxxx
これで、再度メールを送信したら、今度はメールが届きました。
ちゃんとした形式でメールを送る
先ず、送信したいメールを下記の様に作成します。
to: ttttt@ttt.ttt
From: AAAAA@yahoo.co.jp
Subject: 送信テスト
ファイルの送信テストです。
- to: ttttt@ttt.ttt:
- 宛先メールアドレス。
- From: AAAAA@yahoo.co.jp
- 送信元メールアドレス。今回使用しているメールアドレス。
- Subject: 送信テスト
- メールのタイトル
- ファイルの送信テストです。
- メール本体
このファイルを
- ”test.mail”と保存
- ターミナルで $msmtp ttttt@ttt.ttt(宛先アドレス) <test.mail
と入力すればメールが送れます。前回の echo 送信ではタイトルが有りませんでしたが、今回はちゃんとタイトル付きのメールとなります。