6月 05

16.メール送信

go @ 5:27 AM

画像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());

を入れます。
メールを受信して確認します。

>>次のページ「ログイン認証」へ

Comments are closed.

here comes