msmtpの使う状況
msmtpは、自身でメールサーバーを構築するまでもないくらいの環境で Gmail とか yahoo!メールとか、外部の smtp サーバーを使う時に
軽量 smtp クライアントとして使います。
一般的には、通常のユーザーがメールを送受信するようなものではなく、zabbixとか、運用現場で、ある閾値を超えた場合 管理者にメールを送ると
いうような時に使えるかな と思います。
このようなメール クライアントは msmtp の他、s-nailなどありますが、s-nailは、レガシーシステムで使われることが多いとの情報があったので、msmtp を選びました。
特徴としては
■軽量でシンプルな smtp クライアント
■外部 smtp サーバーとの連携が簡単。Gmail や yahoo!メールとか。
■TLS や SSL に対応して セキュリティ面で優れている
■ログファイルを設定することで送信ログを記録できる
■商用環境での利用実績が多く 特に クラウド環境や スクリプトでのメール送信に向いている。
こんな感じなので msmtp 一択で良いかと思います。
あくまでも ユーザーが送受信するメールじゃなくて システムから送信される またはスクリプト 上から送信する軽量 メール クライアントとしての良さになります。
gmailを使う時の設定手順
msmtpをgmailで使う場合、Gmail側の設定とホスト側の設定を行う必要があります。
Googleアプリパスワードの取得
Googleアプリパスワードを取得する理由は、安全に外部アプリやサービスからGoogleのSMTPサーバーを利用するためです。
通常のGoogleアカウントのパスワードではなく、アプリ専用のパスワードを使うことで、セキュリティを強化できます。
アプリパスワードを使う理由
① Googleの二段階認証が有効なアカウントでは、通常のパスワードでSMTP認証できない
→ Googleはセキュリティ強化のため、通常のパスワードを使っての外部認証を制限している。
② アプリごとに異なるパスワードを割り当てられる
→ msmtp や Thunderbird など、特定のメールクライアントだけに専用パスワードを設定できる。
③ アプリパスワードをいつでも無効化できる
→ 万が一流出した場合でも、Googleアカウントから簡単に削除・無効化可能。
こんな理由になります。
Googleアプリパスワードの取得手順をまとめました。
このパスワードは、2段階認証を有効にしているアカウントでのみ使用できます。
① Googleアカウントにログイン
まず、Googleアカウントにログインします。
Googleアカウント管理ページ にアクセスしてください。(Chromeの設定から)
Googleアカウントの管理 → セキュリティ → 2段階認証プロセスを有効にする。
② アプリパスワードを生成
2段階認証を有効にしたら、アプリパスワードを取得できます。
「セキュリティ」 ページに戻る。
「Googleへのログイン」 セクションで 「アプリパスワード」 をクリック。
「アプリを選択」 で 「メール」 を選択。
「生成」 をクリックすると、16桁のアプリパスワードが表示される。(メモしておかないといけません(重要)
③ アプリパスワードの保存
このパスワードは一度しか表示されない ため、コピーして安全な場所に保存する。
msmtp の設定に使用する際は、スペースを除去して入力してくださいな。
これでGoogle側の手順は終了です!
Linuxホストにmsmtpをinstall
インストールは、簡単です
① dnf install msmtp
② 設定ファイルの作成
~/.msmtprc の作成 vim .msmtprc で編集
内容
account default #複数のアカウントがある場合は、任意の名称をつける
host smtp.gmail.com
port 587
auth on
user ●●●@gmail.com
password abcdefghijklmnop ← 上記で取得した、Googleアプリパスワード
tls on
tls_starttls on
from ●●●@gmail.com
logfile ~/.msmtp.log
③ .msmtprc のパーミッションを600に変更 chmod 600 ~/.msmtprc
④ テストメールの送信を行う
echo "テストメールの本文" | msmtp -a default USER@example.com
msmtpは、Subjectの -s オプションがないので注意する
Subjectを入れたい場合は printfコマンドを使いヘッダを記載し、msmtpに渡す
printf "Subject: メールの件名\n\nメールの本文" | msmtp USER@example.com
複数に送りたい場合は , で区切って記載する。