noshi’s diary

ゲームの事、映画やドラマ、思いついた事、プログラミングの事、雑記的なことを書いています

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からの送信はできませんでした。何か設定があるのかな。