Zend Framework [2] - Mail
2007.09.21 Author: Jas
正式版がリリースされたばかりの「Zend Framework」、今回はメール機能の紹介です。
Zend_Mailはテキストメール、HTMLメール、添付ファイル付メールに対応しており、複数の宛先へのメール送信も簡単に行うことができます。また、送信・受信共に複数のプロトコルに対応しており、SMTP認証やTLS/SSLによるメール送信も可能です。
ただし、Zend_Mailで日本語のメールを取り扱う場合には、少し注意が必要です。
そこで、今回はZend_Mailを使った日本語のメールの送信方法を紹介します。
開発環境: Zend Framework 1.0.1 / PHP 5.1.6 (スクリプトの文字コード: UTF-8)
とは言っても、難しい設定は必要ありません。
日本語のメールを送信する前に、文字コードをISO-2022-JPに変換するだけです。
// ライブラリの読み込み
require_once('Zend/Mail.php');// 文字コードをISO-2022-JPに変換
$body = "Zend_Mailで日本語を送信<br>日本語使用時は文字コードに注意";
$subject = '日本語送信テスト';
$body = mb_convert_encoding($body, 'ISO-2022-JP', 'UTF-8');
$subject = mb_convert_encoding($subject, 'ISO-2022-JP', 'UTF-8');// 文字コードを'ISO-2022-JP'でインスタンス生成
$mail = new Zend_Mail('ISO-2022-JP');// パラメータの設定
$mail->setBodyText($body);
$mail->setFrom('送信元メールアドレス', '送信者名');
$mail->addTo('送信先メールアドレス', '受信者名');
$mail->setSubject($subject);
このように、Zend_Mailのインスタンスを生成する際に文字コードをISO-2022-JPに指定しておき、ボディとヘッダーに文字コードをISO-2022-JPに変換した文字列を設定するだけです。
もし、添付ファイルも送信したい場合は次のようにします。
// 添付ファイル()
$attach = 'バイナリ変換した添付ファイル';
$mail->createAttachment($attach, 'text/plain',
Zend_Mime::DISPOSITION_INLINE, Zend_Mime::ENCODING_8BIT);// Boundaryの設定(独自のものを使いたい場合)
$mail->setMimeBoundary('=_' . md5(microtime(1)));
createAttachment()の第一引数にバイナリ変換した添付ファイル、第二引数で"'text/plain"や"image/gif"のようにファイルタイプを指定します。
マルチパートのBoundaryは自動で設定されますが、独自のものを使いたい場合にはsetMimeBoundary()で指定することができます。
// 送信 try { $mail->send(); echo 'メールの送信に成功しました'; } catch (Zend_Exception $exception) { echo 'メールの送信に失敗しました'; echo $exception; }送信にはsend()を使います。 エラーが起こったときのためにもtry-catchでメールの送信を行いましょう。
これで日本語メールの送信ができるはずです。
Zend_Mailはデフォルトではsendmailを用いてメールの送信を行いますが、SMTPでのメール送信も可能です。