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 root
gpg: 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.gpg
msmtp
も削除します。
sudo apt purge msmtpsudo apt autoremovesudo rm -f /etc/msmtprcrm -f ~/.msmtprc