6月 05
16.メール送信
画像1と2はちょっと後にしてここでメール送信をやります
Emailコンポーネントの使い方は本家サイトのドキュメントの通りです。
/app 直下の app_controller.php を開いて、
class AppController extends Controller {
}
となっている中に、
var $components = array('Email');
と入れます。そして、以下のようなファンクションを入れます。
function _sendEmail($template, $subject, $to, $attachments, $from, $replyto, $fromName, $sendAs, $bcc) {
if (!$from) {$from = 'your@email';}
if (!$replyto) {$replyto = 'your@email';}
if ($fromName) {$from = $fromName . " <$from>";}
$this->Email->to = $to;
$this->Email->bcc = $bcc;
$this->Email->subject = $subject;
$this->Email->replyTo = $replyto;
$this->Email->from = $from;
$this->Email->template = $template;
if ($attachments) {$this->Email->attachments = $attachments;}
$this->Email->sendAs = $sendAs;
$this->Email->send();
}
smtp で送信する場合は、$this->Email->send() の部分を以下に書き換えます。
$this->Email->smtpOptions = array(
'port'=>'587',
'timeout'=>'30',
'host' => 'your.host.name',
'username'=>'username',
'password'=>'password'
);
$this->Email->delivery = 'smtp';
$this->Email->send();
$this->set('smtp-errors', $this->Email->smtpError);
デフォルトだとUTF-8で送られます。charsetは以下で設定できます。
$this->Email->charset = "ISO-2022-JP";
管理者アドレスのような固定の設定値で、どっか別の場所に書いておきたいものは /app/config/bootstrap.php に書いておくといいかもしれません。
define('ADMIN_MAIL','kanri@email');
ま、どこに書いたか忘れちゃいそうですよね。
一つだけなんだったら、別に上記の app_controller.php に書いちゃってもいいような気はします。
Emailコンポーネントは、phpのmail関数を使っているんだそうで、なので4系とか古いバージョンで使うと fromName が文字化けしたり、メールそのものが送れなかったり、まあ謎の現象がたくさん発生します。その時はあきらめて自前でなにか作るしかないでしょう。
メール文面のテンプレートは、まずレイアウトを
- /views/layouts/email/html/default.ctp
- /views/layouts/email/text/default.ctp
に入れて、
文面を
- /elements/email/html/default.ctp
- /elements/email/text/default.ctp
に入れます。
とても覚えきれません(笑)
こっちの elements の中の方のファイル名を上記 $this->Email->template に指定します。
文面は普通に、確認画面とかの view.ctp と同じように作ればいいと思います。
以下の会員登録がありました。
-----------------------------------------------------
メールアドレス: <?php echo $member['Member']['email'] ."\n"; ?>
会員種別:<?php echo $types[$member['Member']['type_id']] ."\n"; ?>
誕生日:<?php echo $member['Member']['birthday']['year']; ?>年<?php echo $member['Member']['birthday']['month']; ?>月<?php echo $member['Member']['birthday']['day']; ?>日
好きな物:
<?php
if (!empty($member['Favorite'])) {
foreach ($member['Favorite']['Favorite'] as $favorite) {
echo "\t".$favorites[$favorite['id']]."\n";
}
}
?>
こんな感じで適当に。
で、コントローラ members_cntroller.php のアクション add のsaveしてる部分の下に
if ($this->Member->save($this->data)) {
$this->set('member', $this->data);
$attachments = array();
$this->_sendEmail('member_add_toAdmin', 'ユーザー登録のお知らせ', 'your@email', $attachments,'','','','text',array());
を入れます。
メールを受信して確認します。
