Wednesday, May 18, 2011

Mac OS X で mail コマンドでメールを送る

とりあえず、環境から。

環境

  • 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 が原因であることが分かるまで結構、時間かかっちゃったなぁ。まぁ、勉強になったからヨシとしよう!!



参考

以下のページを参考にさせて頂きました。大変、勉強になりました。ありがとうございます!!

No comments:

Post a Comment