Mac OS X 10.5 にXAMPP for Mac 1.7.3をインストール。GmailのSMTPサーバからPHPのmb_send_mail関数をつかって日本語メールを送ろう、という試みについての報告。
先日、図書館からオライリーの"Head First PHP&MySQL"という本を借りた。この本は、書店でよく見るコンピュータ技術書が持っていない親近感を持っている。小難しい技術についても、おもしろおかしく紹介してくれるので、読んでいて楽しめるし飽きない。もし、この本に対しての他のユーザーの声が聞きたいならば、ぜひAmazonのレビューを見てみてほしい。
本文を読む前の支度
わたしの環境を書いておこう。
しかしここで気づく。この設定にはあれが足りないことに。なにか?それは、Gmailのサーバを使う時に必要となる、認証(ログイン)用パスワードだ。この設定ではそれが抜けていた。しかし、どこにパスワードを設定すればよいのだらうか?私はPHPなんて初めてなので、知識はまったくない。そこで、PHPがどのようにメールを送信するのかを調べた。
- Mac OS X 10.5
- XAMPP for MAC 1.7.3
- Head First PHP&MySQL
[mail function] ; For Win32 only. SMTP = smtp.gmail.com smtp_port = 587 ; For Win32 only. sendmail_from = 自分のアドレス@gmail.com ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path =
結果はこうだ
1、Webサイトの送信ボタンをクリック
↓
2、PHPスクリプトがページとメールを作る
↓
3、PHPがメール送信プログラムにメールを渡す
↓
4、メール送信プログラムがSMTPサーバに接続しメールを送信
↓
5、メール送信完了!
どうやらあの設定(php.iniの設定)は、チャートでいう3をするための設定のようだ。Gmailへのログインはメール送信プログラムが行うらしい(本ではこの部分に触れていない)。ということは、メール送信プログラムにGmailのパスワードを教えてあげれば、GmailのSMTPサーバに勝手にログインして、PHPから受け取ったメールを送信してくれることだらう!↓
2、PHPスクリプトがページとメールを作る
↓
3、PHPがメール送信プログラムにメールを渡す
↓
4、メール送信プログラムがSMTPサーバに接続しメールを送信
↓
5、メール送信完了!
善は急げ
気になったらググる。メール送信プログラムについて調べた。どうやらMTA(Mail Transfer Agent:メール転送エージェント)と呼ぶらしい。sendmailとqmailとpostfixという3つのMTAが有名とのこと。で、Mac OS Xにはpostfixがプリインストールされているらしく、PHPはこのpostfixにメールを渡しているようだった。そのpostfixはMacの中の"/etc/postfix/"という場所にいることもわかった。
今から行うミッションはこうだ。postfixというMTAにGmailのパスワードを教える。それだけで、メールが送信できるようになるはずだ!
今から行うミッションはこうだ。postfixというMTAにGmailのパスワードを教える。それだけで、メールが送信できるようになるはずだ!
・参考サイト:RIVERTURNブログのアーカイブ
* この参考サイトはとても簡潔にまとめられているので、このブログを読むのに飽きたら少しお邪魔してみるといいかもしれない。
* この参考サイトはとても簡潔にまとめられているので、このブログを読むのに飽きたら少しお邪魔してみるといいかもしれない。
ターミナル
Finderで、commandキーとshiftキーとgキーを同時に押す(もしくはメニューの"移動>フォルダへ移動"をクリック)。"/etc/postfix/"と入力しreturnキー。表示された場所こそがpostfixの中枢だ。今回はターミナルを利用して設定しようと思う。
ターミナルに次のコードを打ち込みreturnキーを押す。
そして保存。保存は先程と同じで、escキーからの:wqだ。さぁ、伝言は伝えた。postfixはgmailにログインしてくれるはずだ。設定は完了!postfixをスタートさせる。
mail queue is emptyなら送信待ちはない。正常なら特に文は出力されない。もしそれ以外の文が出力されたら、その文が意味している間違いを直す。もしくは、送信待ちのメールが悪さをしないように、次のコマンドできれいさっぱりリフレッシュしておく。
メールが届いたなら、MTAの設定は大成功!これで本に沿ってプログラミングを楽しむことが出来るようになった。
あ、せっかくだからもうひとつ。まだ設定する気力が少しでも残っているなら、次の設定をしておくことをオススメする。なぜなら次の設定をするだけで、postfixがMacの起動と同時に勝手にスタートしてくれるようになるからだ。この設定をサボると、Macの再起動後にいちいちsudo postfix startコマンドでスタートさせなくてはならなくなる。
これでpostfixは自動的に起動するようになった!
sudo vi /etc/postfix/sasl_passwd
これでGmailのパスワードを格納するファイルが作成される。画面が変わり編集できるようになる。returnキーを押し、下の方にINSERTと表示されたのを確認したら次のコードを埋め込む。
smtp.gmail.com:587 自分のアドレス@gmail.com:パスワード
自分のアドレスとGmailのパスワードをコロン(:)で区切って入力。 入力し終えたらescキーを押して次のコマンドを入力。
:wq
保存コマンドだ。これでログインに必要な情報(ファイル名:sasl_passwd)は保存された。では、次のコードを使って設定を有効可しよう。
sudo postmap /etc/postfix/sasl_passwd
次にpostfix本体に、"Gmailは認証が必要なサーバーだからさっき作ったsasl_passwdというファイル中にあるパスワードを使ってログインするように"と伝える。その伝言はmain.cfというファイルに記せば良いようだ。
sudo vi /etc/postfix/main.cf
こうしてmain.cfを編集モードにする。カーソルをファイルの一番下まで持って行き、そして改行。ファイルの1番下に次のコードを追記する。
# 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
sudo postfix start
これといって怪しげな警告やエラー文が出力されていなければ次のコードを入力。
sudo postfix reload
postfix更新完了。試しにメールを送信したいなら次のコードで送信しよう。
date | mail -s test 自分のアドレス@gmail.com
メーラを開いてメールを受信。testって件名のメールが届いていれば大成功だ!
メールが届かないときは…
もし、いくら待ってもメールが届かない時は、次のコマンドを入力してキュー(送信待ちメール)やログ(エラーや警告などの記録)を確認。メール送信を妨げている問題が表示されるかも。-mailq
もしくは
sudo postfix check
sudo postsuper -d ALL
あ、せっかくだからもうひとつ。まだ設定する気力が少しでも残っているなら、次の設定をしておくことをオススメする。なぜなら次の設定をするだけで、postfixがMacの起動と同時に勝手にスタートしてくれるようになるからだ。この設定をサボると、Macの再起動後にいちいちsudo postfix startコマンドでスタートさせなくてはならなくなる。
sudo vi /System/Library/LaunchDaemons/org.postfix.master.plist
編集モードになったら</dict>という文字列を見つける。その文字列の前に次のコードを入力する。
<key>RunAtLoad</key> <true/>
ちなみに、PHPのメール送信用関数にはmb_send_mail()関数を使っている。これは英文メールのみに対応しているmail関数の拡張版で、マルチバイト文字=日本語に対応している(その証拠にmbはマルチバイトの頭文字!)。しかし文字コードをしっかり決めておかないと(この場合UTF-8)恐ろしい文字化けが襲ってくる。私は身をもって体験してしまった。文字化けホラー好きでない限り、しっかり文字コードを決めてからメールを送ろう。決め方は本の付録iiiにしっかり載っている。
- 報告終了 -
間違いや足りない手順がある場合は連絡してもらえると助かります。
8043129023395844538
https://www.storange.jp/2012/01/php.html
https://www.storange.jp/2012/01/php.html
PHPで日本語メールを送信するまでの足跡
2012-01-20T01:00:00+09:00
https://www.storange.jp/2012/01/php.html
Hideyuki Tabata
Hideyuki Tabata
200
200
72
72