メール送信用コンポーネント。レイアウトとエレメントによるビューが使え、添付ファイルや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を有効にします。
01 | class UsersController extends AppController { |
02 | var $components = array ( 'Email' ); |
06 | $this ->Email->to = $User [ 'User' ][ 'email' ]; |
07 | $this ->Email->bcc = array ( 'secret@example.com' ); |
08 | $this ->Email->subject = 'Welcome to our site' ; |
09 | $this ->Email->replyTo = 'support@example.com' ; |
10 | $this ->Email->from = 'Admin <from@example.com>' ; |
11 | $this ->Email->template = 'welcome_message' ; |
13 | $this ->Email->sendAs = 'both' ; |
15 | $this ->set( 'User' , $User ); |
ヘッダのエンコード
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の場合の設定)
ビュー
レイアウトとエレメントを使用する事が出来ます。
レイアウト
エレメント