目次 このページのソースコードを表示

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アカウントを作成します

アプリケーションパスワードの生成

アカウントページ→"ログインとセキュリティ"→パスワードとログイン方法→二段階認証プロセス と行き, 二段階認証を有効にします[3].

もし二段階認証を有効にしないと

二段階認証を使用しない, つまりgoogleアカウントのパスワードをそのまま後述するアカウント認証ファイルで使用すると, 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"を含むファイルを検索してください.

参考文献

「https://contentsviewer.work/Master/ShellScript/SendMail」から取得