[PHP] PEAR::Mailを使ってメールを送信する(SMTP編) | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

Mail::factory() を使ってメールインスタンスを作成し、メールを組み立てて Mail::send() で送信します。

バックエンドにSMTPを使用する場合の実装例は以下の通りです。

require_once 'Mail.php';

$param = array( host'=>'smtp.example.com', port'=>'25');
$mailobject = Mail::factory( 'smtp', $param );

$recipients = 'to@example.com';
$headers = array( 
                'From'=>'from@example.com', 
                'To'=>$recipients, 
                'Subject'=>'Test'
            );
$body = 'Test Mail';
$mailobject->send( $recipients, $headers, $body );
※SMTPを使用する場合、バックエンド固有のパラメータとして SMTPホスト名とポート番号が必要です。また、認証が必要な場合、認証用のパラメータがさらに必要です。


なお、日本語のメールを送信する場合、適切なエンコーディングを施さないと文字化けを起こすことがあります。

文字化けを回避するには、メールヘッダ(件名など)に日本語が含まれる場合は、mb_encode_mimeheader()を使用して Base64 形式で'ISO-2022-JP'にエンコードし、メール本文に日本語が含まれる場合は、mb_convert_encoding()を使用して'ISO-2022-JP'にエンコードする必要があります。

$recipients = 'to@example.com';
$headers = array(
                'From'=>'from@example.com',
                'To'=>$recipients,
                'Subject'=>mb_encode_mimeheader( 'テスト', 'ISO-2022-JP' )
            );
$body = mb_convert_encoding( 'これはテストです。', 'ISO-2022-JP', 'auto' );

$mailobject->send( $recipients, $headers, $body );

受信メーラーによっては、上記のようなエンコーディングを施さなくても文字化けを起こさないこともあります。

あとでトラブルにならないよう、テストで送信したメールは複数のメーラーで受信して確認しておいたほうがよいでしょう。