お知らせメールを出したい(msmtp)

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
項目 内容
defaults 各アカウントで共通部分を定義。今回は、auth とtls が共通部分
auth on 参照ファイルをが on になっていたのでまま使用。
tls on 参照ファイルをが on になっていたのでまま使用。
account xxxxx ”msmtp”で使用するアカウントを指定。
host smtp.mail.yahoo.co.jp SMTPのアドレスを設定。今回は、smtp.mail.yahoo.co.jp
port 465 SMTPのポートを設定。今回は、465
from AAAAA@yahoo.co.jp Yahooと契約しているメールアドレスを指定します。
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 送信ではタイトルが有りませんでしたが、今回はちゃんとタイトル付きのメールとなります。