結果だけでなく過程も見てください

日々の奮闘を綴る日記です。

PostfixからGmail宛へのメール送信で550-5.7.1エラーやポート25番Connection refusedエラーになるときの対処法

自分は携帯電話の写真や動画を自宅サーバーのRAID1で運用しているのですが、冗長化したディスクの一部にエラーが発生した場合等、メールで通知してほしい場合があります。

で、手軽に扱えるGmailを使いたいわけですが、何も考えずにmailコマンドなどでGmailにメールを送ろうとすると題名にあるエラーになってしまいます。今回はこのエラーを回避して自宅サーバーやAWS等のサーバーからGmail宛にメールを送れるようにする方法をご紹介します。

根本的な対処方法(今回これはやりません)

以下の公式のガイドにもあるように、Gmailは不正なメールを検知するためにIPアドレスの逆引きを行います。そのため自宅サーバーからメールを送る場合は、インターネット上でドメイン名を取得し、ポインタ(PTR)レコードを正確に設定して逆引きが行えるようにしておく必要があります。
https://support.google.com/mail/answer/81126?hl=ja

自分の自宅サーバーはドメインは取得していないため、根本的な対策は行いません。
今回は、PostfixからGmailにメールを転送してGmailSMTPサーバーとして利用してメール送信する方法を取ります。

前提パッケージのインストール

Postfix, mailx(mailコマンド), SMTP認証を行うためのライブラリをインストールします。

yum -y install postfix
yum -y install mailx
yum -y cyrus-sasl cyrus-sasl-plain

以下を実行して起動/自動起動を設定しておきます。

systemctl start postfix
systemctl enable postfix
systemctl start saslauthd
systemctl enable saslauthd

手順

ホストの名前解決

/etc/hostsやDNSでホスト名が名前解決できるようにしておきます。
今回自分はサーバーではドメイン名は設定していません。以下は例です。

192.168.2.5  myserver
メールの転送設定

/etc/postfix/main.cfの末尾に以下の二行を追加します。
これはgmail宛のメールだけ、GmailSMTPサーバーへ転送するための設定です。

gmail.com  smtp:[smtp.gmail.com]:587
*          :

その後、postmapコマンドを使って↑で作成したファイルの情報をPostfixのDBにします。

postmap /etc/postfix/transport

/etc/postfix/transport.dbが作成されていることを確認してください。

サーバーをIPv6で運用していない場合の設定

この設定をしないとPostfixIPv6を優先的に使おうとしてエラーになることがあります。
/etc/postfix/main.cfを以下のように書き換えます。

inet_protocols = all
↓
inet_protocols = ipv4
Postfixの色々な設定

これも/etc/postfix/main.cfを編集します。以下のパラメーター部分を編集してください。
IPアドレスの部分はご自分の環境に合わせてください。

myhostname = myserver
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8 192.168.2.0/24
home_mailbox = Maildir/
SMTP認証の設定

これも/etc/postfix/main.cfを編集します。末尾に以下を追加してください。

# smtp-auth
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/relay_password
smtp_sasl_security_options = noanonymous

# starttls
smtp_tls_security_level = may
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt

上で記載したパスワードファイルを作成していきます。
/etc/postfix/relay_passwordを作成して、以下のようにGmailアドレスとそのパスワードを入力してください。

[smtp.gmail.com]:587 mygmailaddress@gmail.com:mygmailpassword

その後以下のコマンドを実行します。

chmod 600 /etc/postfix/relay_password
postmap hash:/etc/postfix/relay_password
Postfixに設定を反映する

サービスを再起動して設定を反映しましょう。

systemctl restart postfix
Gmail側の設定

セキュリティの観点から、Gmailは信頼性の低いクライアントからメールの受信を許可していません。
今回はこの設定を許可するように変更して、自宅サーバーからのメールを受信できるようにします。
https://myaccount.google.com/lesssecureapps

テストメールを送ってみる

以下のコマンドを実行してメールを送ってください。

echo "test from myserver" | mail -s "test mail" mygmailaddress@gmail.com
プライバシーポリシー お問い合わせ