gmailを経由してsendmailでメール送信
ここでは, sendmail
コマンドを利用した, メール送信の方法について説明する. 通常, 25番ポートに対するメール送信には制限があるため, gmailを利用して, サブミッションポートでのメール送信を行った.
背景と問題
ubuntuなどのターミナル上でメールを送信する際, よく使うコマンドとしてsendmail
があります. sendmail
は, メール転送エージェント(MTA: Mail Transfer Agent)と呼ばれるもので, ネットワーク上でメールを転送また配送するソフトウェアです[1]. sendmail
は標準でメールを送信する際, 送信先のメールサーバのポート25へメールを送ります.
ですが, このように直接送信先サーバのポート25に接続することは, 外向き25番ポートのブロック機能(OP25B)の対象になり, 正常に送ることができません. OP25Bとは, TCPの宛先が25番になっているISP外への接続をブロックする機能です[2].
そこで, ここではサブミッションポートを使用して目的のメールサーバへ送信を行います. つまり, 通常の25番ポートを使用するのではなく, サブミッションポート(587番)を使用してメールを送信します. また, 送信元が送信先に信頼される, 送信履歴が残る点からgmailを経由して送ります.
解決
gmailの設定
googleアカウントを作成します
アプリケーションパスワードの生成
sendmailの設定[4]
ubuntuを想定しています.
sendmail
のインストール
sudo apt install sendmail
gmailアカウント認証ファイルの作成
sudo mkdir /etc/mail/authinfo/ cd /etc/mail/authinfo/ sudo touch gmail-auth
gmail-auth
に以下を書きます.
AuthInfo: "U:root" "I:YOUR GMAIL EMAIL ADDRESS" "P:YOUR PASSWORD"
"YOUR GMAIL EMAIL ADDRESS"には, gmailのアカウント(メールアドレス)を, "YOUR PASSWORD"には, 生成したアプリパスワードに置き換えます.
最後に, ハッシュマップを作成します.
sudo makemap hash gmail-auth < gmail-auth
設定ファイルの変更と反映
ディレクトリの移動
cd /etc/mail
以下から設定ファイルを変更していきますが, 前の状態に戻せるように, バックアップを取ることをお勧めします.
sudo cp sendmail.mc sendmail.mc.1
変更
以下のコードをsendmail.mc
にある一番初めにでるMAILER definitionの行の上に加えます.
define(`SMART_HOST',`[smtp.gmail.com]')dnl define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl define(`confAUTH_OPTIONS', `A p')dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl FEATURE(`authinfo',`hash -o /etc/mail/authinfo/gmail-auth.db')dnl
反映
以上の設定を反映します.
sudo make -C /etc/mail
sendmailサービスをリロードします.
sudo /etc/init.d/sendmail reload
ここで, グーグルアカウントのページからアプリパスワードの紐づけがされているようでしたら問題ないでしょう.
確認
以下のコマンドで動作を確認します. 問題なければ, 終わりです.
sendmail "送り先のメールアドレス"
上のコマンド実行後, 本文を入力.
Subject: Hello Hello there! .
sendmail
のログは, /var/log/maillog
で確認できます. 無ければ, /var/log/
以下から"mail"を含むファイルを検索してください.