ここでは、ZendFramework の Zend_Mail クラスを使用して Gmail と ロリポップの SMTP サーバを使ってメールを送信するサンプルを掲載しています。
ただし、仕様などの変更も考えられるため正常に動作するかは十分な検証が必要です。
スポンサーリンク
Gmail の SMTP でメールを送信
Gmail の SMTP サーバからメールを送信するサンプルになります。添付ファイルも送信しています。詳細はサンプル内のコメントを参照ください。
// SMTP サーバおよびに認証情報を設定する
$smtp_addr = 'smtp.gmail.com';
$details = array('port' => 587,
'auth' => 'login',
'ssl' => 'tls',
'username' => 'xxxxxxxxx@gmail.com',
'password' => 'xxxxxxxxx');
// 転送する SMTP サーバを Zend_Mail に設定
$smtp = new Zend_Mail_Transport_Smtp($smtp_addr, $details);
Zend_Mail::setDefaultTransport($smtp);
// 日本語を使用するので文字コードを指定する
$mail = new Zend_Mail('ISO-2022-JP');
// 送信元アドレス
$mail->setFrom('ssssss@gmail.com', '送信元アドレス');
// 宛先アドレス
$mail->addTo('ffffff@mail.cooo.jp', '宛先アドレス'); // 1件のみ指定
/* 複数アドレス指定する場合
$mail->addTo(array('宛先1' => 'zzzzz@xxx.co.jp',
'宛先2' => 'yyyyy@gmail.com'));
*/
// CC を設定する場合(宛先と同様に複数指定可能
//$mail->addCc('ttttttt@gmail.com', 'CCアドレス');
// BCC(アドレスの配列指定で複数設定可能。ただし、名前の指定はできない)
//$mail->addBcc('eeeeeee@gmail.com');
//$mail->addBcc(array('ssssss4@gmail.com', 'ddddd@nnn.co.jp'));
// タイトル
$mail->setSubject('タイトル');
// 本文
$mail->setBodyText('本文');
// 添付ファイル1
$temp1 = file_get_contents('pato/to/aaa.gif');
$at1 = $mail->createAttachment($temp1);
$at1->filename = 'temp_aaa.gif';
// 添付ファイル2
$temp2 = file_get_contents('path/tp/bbb.png');
$at2 = $mail->createAttachment($temp2);
$at2->filename = 'temp_bbb.png';
// 送信
$mail->send();
ポイント
- Gmail の SMTP サーバは SSL 認証が必要になりますので、例えば Windows の場合では、php.ini で (extension=php_openssl.dll)OpenSsl エクステンションを有効にする必要があります
- Zend Framework-1.11.3 on PHP5.3.5 ( windows ) 上で確認したところ、特にタイトルや本文が文字化けすることはありませんでしたが、環境によっては文字コードを変更する必要がある可能性があります。 なお、受信確認したメーラーは Windows Live Mail 2011 です。
- TO, CC, および BCC に同一のアドレスを設定してもメールは1通しか送信されないようです。
ロリポップの SMTP でメールを送信
ロリポップの SMTP サーバからメールを送信するサンプルになります。認証に Crammd5 を指定することがポイントです。
// メールを送信する
$mail_from = 'from@domain'; // 送信元メールアドレス
$smtp_addr = 'smtp.lolipop.jp'; // SMTP サーバ
$details = array('port' => 587,
'username' => 'username@domain',
'password' => 'password',
'auth' => 'crammd5', // ポイント
);
$smtp = new Zend_Mail_Transport_Smtp($smtp_addr, $details);
Zend_Mail::setDefaultTransport($smtp);
// 文字コードを指定する
$zMail = new Zend_Mail('utf-8');
// 送信元アドレス
$zMail->setFrom($mail_from, '送信元');
// 宛先アドレス
$zMail->addTo('dst@exsample.com', '宛先');
// タイトル
$zMail->setSubject('タイトル');
$body = "本文\n行名";
// 本文
$zMail->setBodyText($body);
// 送信
$zMail->send();