第31章 Zend_Mail

目次

31.1. 導入
31.1.1. まずはじめに
31.1.2. デフォルトの sendmail トランスポートの設定
31.2. SMTP 経由での送信
31.3. SMTP 接続による複数のメールの送信
31.4. 異なる転送手段の使用
31.5. HTML メール
31.6. ファイルの添付
31.7. 受信者の追加
31.8. MIME バウンダリの制御
31.9. 追加のヘッダ
31.10. 文字セット
31.11. エンコーディング
31.12. SMTP 認証
31.13. セキュアな SMTP トランスポート
31.14. メールメッセージの読み込み
31.14.1. Pop3 によるシンプルな読み込み例
31.14.2. ローカルに保存されたメールのオープン
31.14.3. リモートに保存されたメールのオープン
31.14.4. メッセージの取得およびシンプルなメソッド
31.14.5. メッセージの操作
31.14.6. フラグのチェック
31.14.7. フォルダの使用法
31.14.8. 高度な使用法
31.14.8.1. NOOP の使用
31.14.8.2. インスタンスのキャッシュ
31.14.8.3. プロトコルクラスの拡張
31.14.8.4. 容量制限の使用 (1.5 以降)

31.1. 導入

31.1.1. まずはじめに

Zend_Mail は、テキストメールや MIME マルチパートメールを作成・送信するための一般的な機能を提供します。 Zend_Mail を使用すると、デフォルトの Zend_Mail_Transport_Sendmail か、あるいは Zend_Mail_Transport_Smtp を使用してメールを送信することが可能です。

例 31.1. Zend_Mail を使用したシンプルなメール送信

受信者、表題、本文および送信者を指定しただけの単純なメールです。 このようなメールを Zend_Mail_Transport_Sendmail を用いて送信するには、次のようにします。

$mail = new Zend_Mail();
$mail->setBodyText('This is the text of the mail.');
$mail->setFrom('somebody@example.com', 'Some Sender');
$mail->addTo('somebody_else@example.com', 'Some Recipient');
$mail->setSubject('TestSubject');
$mail->send();

            

[注意] 最低限の定義

Zend_Mail でメールを送信するには、 最低 1 か所以上の受信者、送信者 (setFrom() を使用します)、 そして本文 (テキストや HTML) を指定しなければなりません。

大半の属性については、その情報を読み込むための "get" メソッドが用意されています。詳細は、API ドキュメントを参照ください。 getRecipients() だけは特別で、 これまでに追加されたすべての受信者アドレスを配列で返します。

セキュリティの観点から、Zend_Mail はすべてのヘッダフィールドの改行文字 (\n) を取り除きます。 これにより、ヘッダインジェクションを防ぎます。

Zend_Mail オブジェクトのほとんどのメソッドは、 流れるようなインターフェイス形式でコールすることもできます。 「流れるようなインターフェイス」とは、 各メソッドの返り値が呼び出し元オブジェクト自身への参照となり、 その返り値からすぐに別のメソッドをコールできる形式のことを表します。

$mail = new Zend_Mail();
$mail->setBodyText('This is the text of the mail.')
    ->setFrom('somebody@example.com', 'Some Sender')
    ->addTo('somebody_else@example.com', 'Some Recipient')
    ->setSubject('TestSubject')
    ->send();

        

31.1.2. デフォルトの sendmail トランスポートの設定

Zend_Mail がデフォルトで使用するのは Zend_Mail_Transport_Sendmail です。これは、単に PHP の mail() 関数をラップしただけのものです。 mail() 関数に追加のパラメータを渡したい場合は、 新しいインスタンスを作成する際のコンストラクタにパラメータを渡します。 新しく作成したインスタンスは、Zend_Mail のデフォルトのトランスポートとすることができます。 あるいは Zend_Mailsend() メソッドに渡すこともできます。

例 31.2. Zend_Mail_Transport_Sendmail トランスポートへの追加パラメータの渡し方

この例は、mail() 関数の Return-Path を変更する方法を示すものです。

$tr = new Zend_Mail_Transport_Sendmail('-freturn_to_me@example.com');
Zend_Mail::setDefaultTransport($tr);

$mail = new Zend_Mail();
$mail->setBodyText('This is the text of the mail.');
$mail->setFrom('somebody@example.com', 'Some Sender');
$mail->addTo('somebody_else@example.com', 'Some Recipient');
$mail->setSubject('TestSubject');
$mail->send();

            

[注意] セーフモード時の制限

PHP をセーフモードで実行している場合、オプションの追加パラメータを指定すると mail() 関数の実行に失敗する可能性があります。