RockyLinux10 Gmail経由でメール送信したい

サーバーを移転してから以前ならローカル経由でGmailのメールアドレスにアラートメールとか送信するようにしていますが、Gmailのメールアドレスに送信すると、SPF・DKIMの設定していないとかの理由でGmail宛のメールが拒否されます。
Gmail宛にメール送信もしたいしローカル経由でメールが送る必要があるので、Postfixを利用してGmail経由でメール送信するようにします。

以前ならGmailのSMTPサーバーのパスワード認証で送信できていましたが、現在はセキュリティ強化されており「アプリパスワード」を使った認証する方式に変更されています


アプリパスワードを取得

アプリパスワードを取得するには、Googleアカウントの「2段階認証」を有効にした後、アプリパスワードを作成し、16桁のパスワードを取得します。

1.Googleアカウントの「2段階認証」を有効にします。
Googleアカウントの設定画面により2段階認証プロセスより設定できます。有効にしている方は設定不要です

2.「アプリパスワード」の設定画面より「アプリ名」を入力して「作成」を選択します

3.作成ボタンをクリックするとアプリパスワードが発行されます。パスワードは4文字ごとでスペースで区切られており16桁のパスワードです。

Postfixの設定

postfixに以下の設定を追加します

# RHEL10以外
$ sudo vim /etc/postfix/main.cf
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt

RHEL系10では、パスワードデータベースの形式として hash (Berkeley DB) の代わりに lmdb を推奨されているので、そちらで再作成します。
hashのまま使用すると以下のようなエラーがでてメール送信できません

$ tail /var/log/maillog
Mar  6 13:58:41 example postfix/smtp[18000]: 03D0B109A8CD: local data error while talking to smtp.gmail.com[172.217.221.109]
Mar  6 13:58:42 example postfix/smtp[18000]: warning: hash:/etc/postfix/sasl_passwd is unavailable. unsupported dictionary type: hash
Mar  6 13:58:42 example postfix/smtp[18000]: warning: hash:/etc/postfix/sasl_passwd lookup error for "smtp.gmail.com"

hashではなく、lmdbを利用するので、上記の「smtp_sasl_password_maps」の箇所で以下を変更して下さい

$ sudo vim /etc/postfix/main.cf
# smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# 上記をコメントアウトして、hashからlmdbに変更します
smtp_sasl_password_maps = lmdb:/etc/postfix/sasl_passwd

認証ファイルの作成

/etc/postfix/sasl_passwd を作成し、中身を記述します。
アプリのパスワードが下記の場合は、空白を取り除いた12桁がパスワードとなります
abcd efgh ijkl mnop sdes
↓空白を取り除く
abcdefghijklmnopsdes

$ sudo vim /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 あなたのメールアドレス@gmail.com:取得したアプリパスワード

# 例
[smtp.gmail.com]:587 testuser@gmail.com:abcdefghijklmnopsdes

作成した設定を反映します

$ sudo chmod 600 /etc/postfix/sasl_passwd

# RHEL10系以外(hash)
$ sudo postmap /etc/postfix/sasl_passwd

# RHEL10系の場合(lmdb)
$ sudo postmap lmdb:/etc/postfix/sasl_passwd

# postfixを再起動します
$ sudo systemctl restart postfix

動作確認

mailコマンドでメール送信してメールが送れるか確認します

$ echo "test" | mail -s "test mail" example@example.com

mailコマンドが利用できない場合は、mailコマンドを利用するパッケージがインストールされていない場合あるので、下記のコマンドでパッケージをインストールします

$ sudo dnf install s-nail

\ 最新情報をチェック /

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です