軽量SMTPクライアント(msmtp)

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

複数に送りたい場合は , で区切って記載する。