pear Mailに挑戦
PHPで一斉送信メールするときには、mb_send_mailを初めとするPHPの組み込み関数を利用するのが手っ取り早いです。組み込み関数のmail関数もありますが、大量のメール送信には向かないという一部声も聞かされます。
PHPのマニュアルによれば、mail関数は
・メッセージ本文の改行コードは CRLF (\r\n) となります。 ・各行の長さは 70 文字を超えては いけません。
と書いてあります。
行長さに制限はあるのは、実用的ではなさそうです(回避する策はありそうですが)。
そこで、今回はPEAR::Mailを使って、色々テストしていこうと思います。
まずは、PEARのMAILがインストールされているかどうかを確認。
pear list
Installed packages, channel pear.php.net:
Package Version State Archive_Tar 1.3.2 stable Auth 1.6.4 stable Calendar 0.5.5 beta Console_Getargs 1.3.5 stable Console_Getopt 1.2.3 stable DB 1.7.14 stable HTML_Common 1.2.5 stable HTML_QuickForm 3.2.13 stable MDB2 2.4.1 stable MDB2_Driver_mysql 1.4.1 stable PEAR 1.7.2 stable PEAR_Info 1.9.2 stable PHPUnit 1.3.2 stable Structures_Graph 1.0.2 stable XML_RPC 1.5.1 stable XML_Util 1.2.1 stable
インストールされていないことを確認。
pear install -a Mail
install ok: channel://pear.php.net/Mail-1.2.0 install ok: channel://pear.php.net/Net_Socket-1.0.14 install ok: channel://pear.php.net/Auth_SASL-1.0.6 install ok: channel://pear.php.net/Net_SMTP-1.6.2
インストール完了。一応確認
pear list
Installed packages, channel pear.php.net:
Package Version State Archive_Tar 1.3.2 stable Auth 1.6.4 stable Auth_SASL 1.0.6 stable Calendar 0.5.5 beta Console_Getargs 1.3.5 stable Console_Getopt 1.2.3 stable DB 1.7.14 stable HTML_Common 1.2.5 stable HTML_QuickForm 3.2.13 stable MDB2 2.4.1 stable MDB2_Driver_mysql 1.4.1 stable Mail 1.2.0 stable Net_SMTP 1.6.2 stable Net_Socket 1.0.14 stable PEAR 1.7.2 stable PEAR_Info 1.9.2 stable PHPUnit 1.3.2 stable Structures_Graph 1.0.2 stable XML_RPC 1.5.1 stable XML_Util 1.2.1 stable
以下警告が出たのでチャンネルのアップデートをおこなっておく。
WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
pear channel-update pear.php.net
Updating channel "pear.php.net" Update of Channel "pear.php.net" succeeded
また、画像付きメールやHTMLメールを送信することもできるモジュールであるMail_Mimeをインストール。
pear install -a Mail_MIME downloading Mail_Mime-1.8.9.tgz ... Starting to download Mail_Mime-1.8.9.tgz (33,796 bytes) .........done: 33,796 bytes install ok: channel://pear.php.net/Mail_Mime-1.8.9
あとは、factory メソッドで Mail オブジェクトを作成して、send メソッドでメールを送信するだけです。
適当なサンプル
//PEAR::Mailのインクルード require_once("Mail.php"); require_once("Mail/mime.php");
//日本語メールを送る際に必要 mb_language("Japanese"); mb_internal_encoding("UTF-8");
$params = array( "host" => "", //SMTPサーバ名(デフォルトは「localhost」) "port" => 25, //ポート番号(デフォルトは「25」) "auth" => true, //SMTP 認証を使用するかどうか(デフォルトは「false」) "username" => "xxx",//SMTP 認証で使用するユーザ名 "password" => "xxx" //SMTP 認証で使用するパスワード );
//PEAR::のオブジェクトを作成 //バックエンドとしてSMTPを指定 $mailObject = Mail::factory("smtp", $params);
//送信先のアドレス $recipients = ""; //送信したいメアドはここ
// メールヘッダ情報を連想配列としてセット $headers = array( "To" => "", //送信先アドレス "From" => "",//差出人アドレス "Subject" => //メールの件名 );
// メール本文 $body = "①テスト、ⅱ、ⅲ";
// 日本語なのでエンコード $body = mb_convert_encoding($body, "UTF-8","auto");
// sendメソッドでメールを送信 $mailObject->send($recipients, $headers, $body);
上記のコードを適当なファイル名で保存して、サーバーにアップして直接同ファイルを叩けばメールが送られるはずです。
ひとつ不明な点がありました。
ポート番号をsmtps(ポート番号465)にしてみたところ、ssl接続がうまくいかず、465からの送信はできませんでした。何か設定があるのかな。