環境
- Mac OS X version 10.6.7
- Postfix 2.5.5
因みに、Postfix のバージョンを調べるには、以下のコマンドを実行すると分かります。因みに、root アカウントでなくても出来ます。私は、出来ました。
$ postconf mail_version mail_version = 2.5.5
経緯
Linux を使っていたころは、$ mail hoge@example.com Subject: test test .
とかやれば、hoge@example.com にメールを送信することが出来た。「Mac は Unix ベースだから、Linux と同様のことが出来るだろう」と思い、同じようにコマンドを入力してメールを送信しようとしたが、一向にメールが送られない。/var/log/mail.log を見ると以下のエラー。
$ less /var/log/mail.log May 17 20:00:17 MacBook postfix/smtp[5737]: connect to gmail-smtp-in.l.google.com[74.125.127.27]:25: Operation timed out
色々と調べていたら、最近のプロバイダは、迷惑メール防止のために TCP 25 番ボートをブロックしていることが分かった。
解決方法 その1
以下のページにあるように、Gmail の SMTP サーバを利用して、Gmail からメールを送信する。Mac OS X Snow LeopardでPHPのmail()関数を使うには - Awaresoft
詳細な説明をすると、上記のページをそのままコピーすることになってしまうので、出来るだけ省いて記載します。
# vi /etc/postfix/sasl_passwd smtp.gmail.com:587 ****@gmail.com:password # postmap /etc/postfix/sasl_passwd # ls /etc/postfix/sasl_passwd.db # .db ファイルが出来たことを確認 # rm /etc/postfix/sasl_passwd # パスワードが平文で書かれているので削除 # vi /etc/postfix/main.cf # Minimum Postfix-specific configurations. mydomain_fallback = localhost mail_owner = _postfix setgid_group = _postdrop relayhost=smtp.gmail.com:587 # Enable SASL authentication in the Postfix SMTP client. smtp_sasl_auth_enable=yes smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd smtp_sasl_security_options= # Enable Transport Layer Security (TLS), i.e. SSL. smtp_use_tls=yes smtp_tls_security_level=encrypt tls_random_source=dev:/dev/urandom # postfix reload
これで、mail コマンドを使ってメールを送信することが出来ます。ただ、この方法でメールを送ると From: がすべて /ect/postfix/sasl_passwd で設定した Gmail のアドレスになってしまいます。それで問題なければ、それでいいのですが、/etc/postfix/main.cf の mydomain で設定した値を使う場合は、以下の「解決方法 その2」を使います。
解決方法 その2
以下のページにあるように、自分のプロバイダの SMTP サーバを利用します。Postfix + インストール + OP25B設定 | NINXIT-BLOG
自分のプロバイダの SMTP サーバの認証方式を確認します。最後のポート番号は、25 の場合、587 の場合とあるので、自分で試してみる必要があります。
$ telnet mail.example.com 25 Trying *.*.*.* Connected to mail.example.com Escape character is '^]'. 220 Example SMTP ehlo localhost # 入力する 250-**** 250-AUTH LOGIN PLAIN 250-*********** 250-*********** 250-*********** (略) quit
確認した内容を /etc/postfix/main.cf に反映します。
# vi /etc/postfix/main.cf relayhost = [mail.example.com] smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/authinfo smtp_sasl_security_options = noanonymous smtp_sasl_mechanism_filter = PLAIN
認証ファイルを作成します。ポート番号は、telnet で接続できたポート番号を利用します。
# vi /etc/postfix/authinfo [mail.example.com]:25 hoge@example.com:password # postmap /etc/postfix/authinfo # ls /etc/postfix/authinfo.db /etc/postfix/authinfo.db # rm /etc/postfix/authinfo
Postfix のリロード。
# postfix reload
これで、mail コマンドを使ってメールを送信することが出来ます。メールヘッダの From: は、ユーザ名に /etc/postfix/main.cf で設定した mydomain がくっついた形になります。
役に立ったコマンド
- 溜まっているキューを見る。
$ postqueue -p
- queue_id のキューを削除 (root で実行)。
# postsuper -d queue_id
- キューをすべて削除 (root で実行)。
# postsuper -d ALL
- /etc/postfix/main.cf の文法チェック。
# postfix check
- すべての postfix の設定を表示。
# postconf
- デフォルトから変更した postifx の設定を表示。
# postconf -n
感想
昔は、ターミナルから mail hoge@example.com って入力すれば、hoge@example.com にメールを送信することができたんだけどなぁ・・・。まぁ、昔っていっても、2004年、2005年頃のことだから、6、7年前だけどね。ってそんなに前になるのかぁ。そりゃぁ、それなりに SPAM 対策なり、セキュリティ対策なりされるわなぁ。。。それにしても、Outbound Port 25 Blocking が原因であることが分かるまで結構、時間かかっちゃったなぁ。まぁ、勉強になったからヨシとしよう!!
0 件のコメント:
コメントを投稿