Postfix: Gmail経由でメールを送信する

投稿日:

自宅のサーバーの root 宛のメールを、Gmail のアカウントに転送していたのですが、ある時期から転送され無くなっていました。

どうやら今まで relayhost に指定していた smtp.nifty.com の仕様が変わり、@nifty.com 以外の宛先に対してのメールが送信できなくなったみたい。

smtp.nifty.com でも送信時に認証を有効にすれば送信できそうですけど、最終的な受け手が Gmail で運用している独自ドメインアドレスだったりするので、relayhost に Gmail の送信サーバーを指定して送信する方法に変更しました。

基本的にこのページに書かれている通りに設定しただけですが、備忘録的な感じで書いておきます。

ちなみに、サーバーOSは CentOS 5.8。

まず、必要なパッケージがインストールされているか確認します。

# rpm -qa |grep postfix
postfix-2.3.3-2.1.el5_2
 
# rpm -qa |grep sasl
cyrus-sasl-lib-2.1.22-5.el5
cyrus-sasl-2.1.22-5.el5
cyrus-sasl-plain-2.1.22-5.el5
 
# rpm -qa |grep openssl
openssl-perl-0.9.8e-12.el5_4.1
openssl-devel-0.9.8e-12.el5_4.1
xmlsec1-openssl-1.2.9-8.1.1
openssl-0.9.8e-12.el5_4.1
openssl097a-0.9.7a-9.el5_2.1

まぁ、postfixは入ってますよねw

足りないものをインストールしていきます。

私の場合、既に構築済みの環境で行ったので、以下のパッケージのみインストールしました。

# yum install openssl-perl openssl-devel xmlsec1-openssl openssl097a
  

という感じで、足りないものを追加します。


次に、ルート証明書を Postfix のディレクトリにコピー。

# cp /etc/pki/tls/certs/ca-bundle.crt /etc/postfix/cacert.pem

main.cf 内で
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
のように元のファイルを直接指定すればコピーしなくても良いかも。


次に、認証用のファイルを作成します。

# vi /etc/postfix/sasl_passwd
smtp.gmail.com user@domain:password

独自ドメインで運用している人は user@domain に自分のメールアドレスを指定すればOK。
Gmailの人は普通に user@gmail.com 的な感じでしょうか?

パスワードを平文で保存するので root 以外は読めないようにしておきます。

# chmod 600 /etc/postfix/sasl_passwd

で、hash 形式に変換。

# postmap /etc/postfix/sasl_passwd

次に /etc/postfix/main.cf を編集。

まず、relayhost に smtp.gmail.com のポート 587 を利用するように設定を変更。

relayhost = [smtp.gmail.com]:587

次に、認証系の設定を追加。

# SASL authentication
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = login
 
# TLS
smtp_tls_eccert_file =
smtp_tls_eckey_file =
smtp_use_tls = yes
smtp_enforce_tls = no
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_received_header = yes
tls_random_source = dev:/dev/urandom

最後に postfix を再起動して設定完了。

# service postfix restart

テストメールを送信して、正常に受信できるか確認して終了。

# echo test|mail -s "test mail" root

という感じで、Postfix から Gmail の SMTP サーバーを経由してメールを送信できるようになります。

更新日: