Ubuntuにmsmtpをインストール
外部メールサーバー(SMTP)経由でメールを送信する方法を紹介します。
パッケージのインストール
msmtpをインストールします。
sudo apt updatesudo apt install msmtp設定ファイル
/etc/msmtprcを編集します。hostやport、user、passwordなどの情報は、各メールサーバーから取得してください。
auth ontls ontls_starttls on
host XXXXXXXXXXXXX.sakura.ne.jpport 587from contact@XXXXXXXXXXXXX.sakura.ne.jpuser contact@XXXXXXXXXXXXX.sakura.ne.jppassword smtp-password
# LOG_USERではなくLOG_MAIL(`/var/log/mail.log`など)でログを管理syslog LOG_MAILメール送信
send-to@example.com(送信先のメールアドレス)にメールを送信します。
printf %b "From: 送信元 <contact@XXXXXXXXXXXXX.sakura.ne.jp>To: send-to@example.comSubject: 件名
こんにちは!現在の日時: $(date '+%Y-%m-%d %H:%M:%S')" | sudo msmtp send-to@example.comパスワードを別のファイルから取得
passwordevalを使用することで、平文でパスワードを保存することを避け、外部プログラムから取得できます。
GPG 鍵の生成
sudo gpg --batch --passphrase '' --quick-generate-key root default default 0# gpg [オプション] --quick-generate-key USER-ID [ALGO [USAGE [EXPIRE]]]暗号化
SMTP パスワードを暗号化し、/etc/.msmtp-password.gpgに出力します。
echo "Please enter SMTP password:"read -r -s smtp_passwordecho "$smtp_password" | sudo gpg --default-recipient-self -e -o /etc/.msmtp-password.gpgunset smtp_password復号
以下のコマンドでパスワードを復号できます。
sudo gpg --quiet --for-your-eyes-only --no-tty --decrypt /etc/.msmtp-password.gpg改善後の設定ファイル
auth ontls ontls_starttls on
host XXXXXXXXXXXXX.sakura.ne.jpport 587from contact@XXXXXXXXXXXXX.sakura.ne.jpuser contact@XXXXXXXXXXXXX.sakura.ne.jp# password smtp-passwordpasswordeval 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を実行してパスワードを復号できるようにします。
sudo gpg --export-secret-keys -a > root_secret_key.ascgpg --import root_secret_key.ascrm root_secret_key.ascこれにより、パスワードをそのまま記述することなく、一般ユーザーがsudoなしでmsmtpコマンドを実行してメールを送信できるようになります。
また、~/.msmtprcに設定ファイルを作成し、一般ユーザーごとにパスワードや認証情報を管理することも可能です。
後片付け
msmtpが不要になった場合は以下の手順で GPG 鍵を削除できます。
GPG 鍵の削除
GPG 鍵の一覧を表示して、削除したい鍵の ID を確認します。
sudo gpg --list-keys rootgpg: checking the trustdbgpg: marginals needed: 3 completes needed: 1 trust model: pgpgpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1upub rsa3072 2025-04-30 [SC] 1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0Tuid [ultimate] rootsub rsa3072 2025-04-30 [E]出力から得られる鍵 ID(上記例では 1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T)を使って、GPG 鍵を削除します。
# 秘密鍵を削除(--batchは対話なし、--yesは確認に自動的にYesと応答)sudo gpg --batch --yes --delete-secret-keys 1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T
# 公開鍵を削除sudo gpg --batch --yes --delete-keys 1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T
# または、以下で秘密鍵と公開鍵をまとめて削除sudo gpg --batch --yes --delete-secret-and-public-keys 1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T一般ユーザーと共有した場合は、そのユーザーでも同様の手順で削除します。
gpg --batch --yes --delete-secret-and-public-keys 1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0Tその他削除
SMTP パスワードの暗号化ファイルも削除します。
sudo rm /etc/.msmtp-password.gpgmsmtpも削除します。
sudo apt purge msmtpsudo apt autoremovesudo rm -f /etc/msmtprcrm -f ~/.msmtprc