cakephp1 シリーズの時は Qdmail を使っていた。
ただ、cakephp2 からは CakeEmail を使うのがデフォ。
CakeEmailって?
CakeEmailはEmailComponentに代わって作られたライブラリ。
「EmailComponentはdeprecatedだからCakeEmail使ってね」とのこと。
使い方
まずは
app/Config/email.php.default の default を外す。
public $default = array( // デフォルトの設定 ); public $gmail = array( // gmailを使うときの設定 );
gmailを使うとき
public $gmail = array( 'host' => 'ssl://smtp.gmail.com', 'port' => 465, 'username' => '自分のgmailアカウント', 'password' => 'パスワード' );
SMTPを使わない
public $contact = array( 'transport' => 'Mail', 'from' => array('info@example.com' => 'SiteName'), 'to' => array('contact@example.com' => 'SiteName'), 'subject' => 'お問い合わせがあります', 'sendAs' => 'text', 'template' => 'contact', //テンプレートファイル );
送信してみる
App::uses('CakeEmail', 'Network/Email'); class EmailsController extends AppController { public function send() { $email = new CakeEmail('gmail'); $res = $email->config(array('log' => 'emails')) ->from(array('from用のアドレス' => 'アドレスの別名')) ->to('送りたいアドレス') ->subject('タイトル') ->send('メッセージ'); } }
array('log' => 'emails') としておくことで、デバッグ情報が
app/tmp/logs/emails.log に出力される。
テンプレートの作成
ここまででとりあえずテキストだけを送信することができました。
次はテンプレートを使って送信してみます。
まずはレイアウト。
Layouts
/lib/Cake/View/Layouts/Emails
app/View/Layouts/Emails/text/text_layout.ctp へコピー
<?php echo $content_for_layout; ?> まとめーたー http://www.matomater.com
View
/lib/Caka/View/Emails
app/View/Emails/text/text_mail.ctp へコピー
<?php echo $name; ?> 様 <?php echo $message; ?>
では送信。
// テンプレートに送る変数 $body = array ( 'name' => 'たろさん', 'message' => 'おいしいケーキあげりゅ', ); // 設定読み込み $email = new CakeEmail('gmail'); // 送信 $email = $email->config(array('log' => 'emails')) ->template('text_mail', 'text_layout') ->viewVars($body) ->from(array('*******@*******.com' => '*******@*******.com')) ->to('*******@*******.com') // ->bcc($this->request->data['Contact']['email']) // ->cc('*******@*******.com') ->subject('タイトル') ->send(); debug($email);
送信成功か失敗かを if 文分岐
// 送信したメールのヘッダーとメッセージを配列で返します if ($email->send()) { $this->Session->setFlash('問い合わせ完了'); } else { $this->Session->setFlash('問い合わせに失敗しました。'); }
ファイルを添付する
今回は、フォームからアップロードされたファイルをサーバーに保存せず、直接添付して送信する方法を紹介。
$email = new CakeEmail('default'); //アップロードファイルをそのまま送信 $send = $email->config(array('log' => 'emails')) ->from(u('email')) ->to(EMAIL) ->subject('年齢認証があります') ->attachments(array($this->request->data['User']['file']['name'] => array('file' => $this->request->data['User']['file']['tmp_name']))) ->send('メッセージ');
htmlメールで送信
sendAs で設定しやぁという情報がネットに流れているがそれだとできない。
emailFormat で指定して html メールを送信しよう。
$email = new CakeEmail('magaSmtp'); $body = array ( 'name' => 'たろさん', 'message' => 'おいしいケーキあげりゅ', ); $send = $email->config(array('log' => 'emails')) ->emailFormat('html') ->template('default')//element / layout ->viewVars($body) ->from(from@hoge.com) ->to('hoge@okws.jp') ->subject('タイトル') ->send();
これでHTMLメールが送信できるようになる。広告主募集