コンテンツにスキップ

Ubuntuにmsmtpをインストール

外部メールサーバー(SMTP)経由でメールを送信する方法を紹介します。

パッケージのインストール

msmtpをインストールします。

https://marlam.de/msmtp/

Terminal window
sudo apt update
sudo apt install msmtp

設定ファイル

/etc/msmtprcを編集します。hostportuserpasswordなどは各メールサーバーから情報を取得してください。

/etc/msmtprc
auth on
tls on
tls_starttls on
host XXXXXXXXXXXXX.sakura.ne.jp
port 587
from contact@XXXXXXXXXXXXX.sakura.ne.jp
user contact@XXXXXXXXXXXXX.sakura.ne.jp
password smtp-password
# LOG_USERではなくLOG_MAIL(`/var/log/mail.log`など)でログを管理
syslog LOG_MAIL

メール送信

send-to@example.com(送信先のメールアドレス)にメールを送信します。

Terminal window
echo 'hello world' | msmtp -v send-to@example.com

件名や送信元も設定する場合は、以下のように指定します。

詳細
printf %b "Subject: 件名
From: 送信元 <support@XXXXXXXXXXXXX.sakura.ne.jp>
To: send-to@example.com
こんにちは!" | msmtp send-to@example.com

パスワードを別のファイルから取得

passwordevalを使用することで、平文でパスワードを保存することを避け、外部プログラムから取得できます。

https://marlam.de/msmtp/msmtp.html#index-passwordeval

GPG

Terminal window
sudo gpg --batch --passphrase '' --quick-generate-key root default default 0
# gpg [オプション] --quick-generate-key USER-ID [ALGO [USAGE [EXPIRE]]]

GPG 鍵の生成

https://wiki.archlinux.jp/index.php/Msmtp#GnuPG

暗号化

SMTP パスワードを暗号化し、/etc/.msmtp-password.gpgに出力します。

Terminal window
echo "Please enter SMTP password:"
read -r -s smtp_password
echo "$smtp_password" | sudo gpg --default-recipient-self -e -o /etc/.msmtp-password.gpg
unset smtp_password

復号

以下のコマンドでパスワードを復号できます。

Terminal window
sudo gpg --quiet --for-your-eyes-only --no-tty --decrypt /etc/.msmtp-password.gpg

改善後の設定ファイル

/etc/msmtprc
auth on
tls on
tls_starttls on
host XXXXXXXXXXXXX.sakura.ne.jp
port 587
from contact@XXXXXXXXXXXXX.sakura.ne.jp
user contact@XXXXXXXXXXXXX.sakura.ne.jp
# password smtp-password
passwordeval gpg --quiet --for-your-eyes-only --no-tty --decrypt /etc/.msmtp-password.gpg
# LOG_USERではなくLOG_MAIL(`/var/log/mail.log`など)でログを管理
syslog LOG_MAIL

一般ユーザーが復号できるように設定

セキュリティ上のリスクは高いですが、root の GPG 秘密鍵を一般ユーザーと共有することで、一般ユーザーがgpg --quiet --for-your-eyes-only --no-tty --decrypt /etc/.msmtp-password.gpgを実行してパスワードを復号できるようにします。

Terminal window
sudo gpg --export-secret-keys -a > root_secret_key.asc
gpg --import root_secret_key.asc
rm root_secret_key.asc

また、~/.msmtprcに設定ファイルを作成し、一般ユーザーごとにパスワードや認証情報を管理することも可能です。