phpでメール送信[Pear::Mail]

PearにMailと呼ばれるパッケージがあります。

Mailクラスは、3種類の方法でメールを送信することができます。

  • phpの組み込み関数mail()を使用
  • SMTPサーバを指定
  • ローカルのsendmail

mail()を使用する場合、php.iniの設定が必要になります。

ディレクティブデフォルト変更の可否対象環境
SMTPlocalhostPHP_INI_ALLWindows環境
smtp_port25PHP_INI_ALLWindows環境
sendmail_fromNULLPHP_INI_ALL Windows環境でPHPから送信される
メールにおいて"From:"に使用する
メールアドレスを指定します。
sendmail_pathDEFAULT_SENDMAIL_PATHPHP_INI_SYSTEM 

Mailが送信できるか確認します

組み込み関数mail()を使用する場合、次のようにしてメールの送信ができるかを確認します。

<?php
mail("bnote@example.com", "My Subject", "Message\nMessage\nMessage");
?>

ここでは、TO、Subject、本文を指定しています。正しく設定されていればメールが送信されます。

ただし、このままでは日本語は送信できません。Subject等はJIS+Base64などでエンコードする必 要があります。

Pear::Mailでメール送信

Mailクラスは、factory関数でメールクラスのインスタンスを取得します。このfactoryの引数によっ て組み込み関数かSMTP、SendMailの使用を切り替えます。

factoryの第一引数にmailと指定すると組み込み関数、smtpとすると任意のSMTPサーバ、 sendmailとするとSendMailを使用します。

組み込み関数と同様このままでは日本語が通らないので注意してください。

<?php
require_once "Mail.php";

$recipients = 'bnote@example.com';

$headers['From']    = 'root@example.com';
$headers['To']      = 'bnote@example.com';
$headers['Subject'] = 'My Subject';

$body = "Message\nMessage\nMessage\n";

$objMail =& Mail::factory('mail');
$result = $objMail->send($recipients, $headers, $body);
if (PEAR::isError($result)) {
  die($result->getMessage());
}
?>