« Windows版PostgreSQL8.0をインストールしてみる | トップページ | IE5.0の一部の文字化け(UTF-8で)の原因と対策 »

2005/02/28

PHP+PearでSMTP認証・送信

WAKWAK: メール587サービス開始へ」の記事で書いたように、プロバイダのWAKWAKが3月1日、つまり今から数時間後には「Outbound Port25 Blocking」を開始します。その対応策として、まずメール587サービスに応募して手続きは完了していました。

次に、ローカルで動かしている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のローカルサーバで利用できるようになりました。ぎりぎり、間に合いました。

|

« Windows版PostgreSQL8.0をインストールしてみる | トップページ | IE5.0の一部の文字化け(UTF-8で)の原因と対策 »

コメント

ありがとうございます。
大変参考になりました。
WinXP および Fedora10 いずれも、Xampp1.7.0 の環境で
うまくいきました。
今回はじめて拝見させていただきましたが、これから、
ちょくちょく寄らせていただきたいと思いますので
よろしくお願いします。
どうもありがとうございました。

投稿: jinchan | 2009/04/01 01:07

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: PHP+PearでSMTP認証・送信:

« Windows版PostgreSQL8.0をインストールしてみる | トップページ | IE5.0の一部の文字化け(UTF-8で)の原因と対策 »