PHP+PearでSMTP認証・送信
次に、ローカルで動かしているApache+PHPの環境下でのメール送信サーバをどうするかというのが問題でした。今までどおり、「be.wakwak.com」という25番ポートのsmtpサーバを設定し続けるのも一つの手なのですが、このSMTPサーバは一日に500通までという制限があるため、できれば避けたいため、いろいろと苦慮していました。
php.iniの設定で、smtp認証を入れられたら587番ポートを使って送信すればいいため、500通までという制限は大幅に緩和されます。しかし、やり方がずっと分からず、先日、PEARを使えばいいということが分かりました。ここまでが前回までの内容です。
最初にPEARの基礎から勉強しようとたどり着いたのが、「レッツPHP!」さんの記事でした。しかし、このサンプル・プログラム(ベンチマーク)にあるような「Benchmark」というディレクトリーがそもそも見当たりません。ですから、サンプル・プログラムの「require_once」から動きません。これはパスが通っているかとか関係なく、そもそもそんなディレクトリー無いです。
私がPHPをインストールしたのはFドライブです。「F:\php」です。確かに、「F:\php\PEAR」は最初から存在していましたが、しかし、その下に「Benchmark」なるディレクトリーは存在しません。困った時のGoogleで検索開始。
ほどなく、
●[PHP-users 12908] Windows版PHP-4.3.0でのPEARインストール方法
http://ns1.php.gr.jp/pipermail/php-users/2003-January/012914.html
が見つかりました。
このPHPメーリングリストの投稿によると、やはりWindows版PHPにはPEARのパッケージが入っていないようです。何じゃ、それ!! でも、この投稿は2003年1月のもの。今は2005年。ずっとパッケージに入っていないのでしょうか? 真相はよく分かりませんが、この投稿のとおりにやってみたら、必要なパッケージがインストールされました。
MS-DOS上で、Fドライブの「F:\php」に移動後、
f:\php> f:\php\cli\php.exe -n -r "include 'http://go-pear.org';"
として、後は聞かれたとおりにenterキーなどを押しまくったらダウンロードが始まりました。
これにより、Benchmarkフォルダーこそできなかったものの、「Mail」フォルダーや「Net」フォルダーが「F:\php\PEAR」直下にできましたので、何となくよさげです。
次に、肝心のSMTP認証が可能なプログラムのサンプルを探してみましたが、マニュアルぐらいしか見つかりませんでした。とりあえず、
http://pear.php.net/manual/ja/package.mail.mail.factory.php
http://pear.php.net/manual/ja/package.mail.mail.send.php
を熟読。
マニュアルのサンプル・プログラムはsendmailのもののため、プロバイダのsmtpサーバを使った送信方法がいまいち分かりませんでしたが、試行錯誤の上、次のようなものが完成しました。実験の結果、ちゃんと送信できました。!!
<?php //なぜかPEARのパスが通らないので、フルパスで指定 include('f:/php/pear/Mail.php'); $headers['From'] = 'info@example.com'; $headers['to'] = 'test@example.com'; $to = 'test@example.com'; $subject = "テストです"; $subject_b = mb_convert_encoding($subject,"JIS","EUC-JP"); $headers['Subject'] = "=?ISO-2022-JP?B?" . base64_encode($subject_b) . "?="; $body = "Test message。\nこれはテストです。\n今日は2月28日です。"; $body = mb_convert_encoding($body,"JIS","EUC-JP"); $params['host'] = 'sf1.wakwak.com'; //メールサーバ $params["port"] ="587"; //PORTは587 $params["auth"] = true; //smtp認証を使うためtrue。デフォルトではfalse $params["username"] ="hogehohe@sf1.wakwak.com"; //ユーザー名 $params["password"] = "123456789"; //パスワード // Create the mail object using the Mail::factory method $mail_object =& Mail::factory('smtp', $params); $mail_object->send($to, $headers, $body); print "success"; ?> |
メールヘッダーにtoを設定しない場合(= $headers['to'] を設定しない場合)は、メールソフトで受信した場合に、「undisclosed recipients」と表示されます。何となくスパムメールぽいので、しっかりとメールヘッダーでもtoを設定しておきたいです。メルマガでこのタイプの表示があると、どのメールアドレスに送られたメールマガジンか一瞬ではわからず、解除に非常に難儀しまた経験って、皆さん無いでしょうか? 私の場合、メールアドレスが15個以上ありますので、そういうことが頻繁にあります。、「undisclosed recipients」や「toヘッダーに差出人のメールアドレスを設定したもの」はやめてもらいたいです。
話がそれましたが、これでWAKWAKのメール587サービスをApache+PHPのローカルサーバで利用できるようになりました。ぎりぎり、間に合いました。
| 固定リンク
この記事へのコメントは終了しました。
コメント
ありがとうございます。
大変参考になりました。
WinXP および Fedora10 いずれも、Xampp1.7.0 の環境で
うまくいきました。
今回はじめて拝見させていただきましたが、これから、
ちょくちょく寄らせていただきたいと思いますので
よろしくお願いします。
どうもありがとうございました。
投稿: jinchan | 2009/04/01 01:07