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

