メール送信用コンポーネント。レイアウトとエレメントによるビューが使え、添付ファイルやHTMLメールを送信する事も出来ます。メールはmail関数またはソケット(smtp)で送信されます。


#ISO-2022-JPなどでの日本語のメールを送るにはちょっと難ありです。

文字コード

環境設定'App.encoding'で設定された文字コード。デフォルトは'utf-8'。charset属性で変更可能。
本文のContent-Transfer-Encodingは'7bit'で変更不可。
本文の文字コードは変換されません。
メーラーによっては'utf-8'と'7bit'の組み合わせで文字化けする事もあります。

ヘッダのエンコード

CakePHP1.3.7の実装では以下のようになっています。
件名やアドレスなどのヘッダはmb_encode_mimeheader関数でエンコードされます。
エンコードの際に渡された文字の文字コードをEmail->charset属性からEmail->charset属性へ変更します。つまりエンコードは行われるが文字コードは変換されません。例えば'ISO-2022-JP'でメールを送りたい場合は、渡す文字列の文字コードをあらかあたかじめ'ISO-2022-JP'に変換しておく必要があります。

実装

コントローラーの$components属性に'Email'を設定してEmailComponentを有効にします。

class UsersController extends AppController {
    var $components = array('Email');
    
    function welcome(){
        //$Userにユーザーの情報が入ったとする
        $this->Email->to = $User['User']['email'];
        $this->Email->bcc = array('secret@example.com');//配列で指定
        $this->Email->subject = 'Welcome to our site';
        $this->Email->replyTo = 'support@example.com';
        $this->Email->from = 'Admin <from@example.com>';
        $this->Email->template = 'welcome_message'; //「.ctp」を省いた名前
        //'html' または 'text' あるいは 'both' (デフォルトは 'text')
        $this->Email->sendAs = 'both';
        //ビューで使うためにデータをセット
        $this->set('User', $User);
        //メールを送信
        $this->Email->send();
    }
}

ヘッダのエンコード

subjectはMIMEエンコードされますが、from等のヘッダはバージョンによって異なっています。
1.3.3ではMIMEエンコードします。1.3.4から1.3.6まではエンコードしません。
1.3.7ではMIMEエンコードします。

属性

$to(送信先)
$cc(CC送信先)
$bcc(BCC送信先)
$replyTo(返信先)
$from(送信者)
$subject(件名)
$template(テンプレート/app/view/elements/email/以下に配置)
$sendAs(メール形式:texxかhtml または both)
$attachments(添付するファイル)
$delivery(送信方法、mailまたはsmtp)
$smtpOptions(smtpの場合の設定)

ビュー

レイアウトとエレメントを使用する事が出来ます。

レイアウト

  • app
    • view
      • layouts
        • email
          • html
            • default.ctp(HTMLメール用)
          • text
            • default.ctp(テキスト・メール用)

エレメント

  • app
    • view
      • elements
        • email
          • html
            • welcome.ctp
          • text
            • welcome.ctp

CakePHP Note (v1.3)

Index