メール送信2

http://weble.org/2012/05/11/cakephp-getlastinsertid
[php]
CREATE TABLE IF NOT EXISTS `contacts` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`subject` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`from` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`body` text COLLATE utf8_unicode_ci NOT NULL,
`created` int(11) NOT NULL,
`modified` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
[/php]

/app/config/email.php.default を email.php にリネーム

ContactsController.php
[php]
App::uses(‘AppController’, ‘Controller’,’CakeEmail’, ‘Network/Email’);

public $components = array(‘ContactMail’);

public function contact() {
if ($this->request->is(‘post’)) {
$this->Contact->create();
if ($this->Contact->save($this->request->data)) {
$id = $this->Contact->getLastInsertID(); //保存後IDを取得
$contact = $this->Contact->findById($id); //保存後IDを取得

$this->ContactMail->send(
‘お問い合わせを送信しました’, //件名
‘contact’, //テンプレートファイル名
$contact, //渡すデータ
$contact[‘Contact’][‘from’], //メールアドレス
$contact[‘Contact’][‘name’] . ‘様’ //名前
);

$this->Session->setFlash(__(‘お問い合わせを送信しました’));
$this->redirect(array(‘action’ => ‘index’));

} else {
$this->Session->setFlash(__(‘送信内容にエラーがあります。エラーメッセージに従って内容を修正してください。’));
}
}
//$this->set(‘title_for_layout’, ‘お問い合わせ’);
debug();

}
[/php]

app/Controller/Component/ContactMailComponent.php を作成
[php]
<?php
App::uses(‘CakeEmail’, ‘Network/Email’);
class ContactMailComponent extends Component {

// SMTP設定
public $from_mail = ‘xxxxxxx@gmail.com’; //送信元メールアドレス
public $from_name = null; //送信者名 nullでも可
public $config = array (
‘host’ => ‘ssl://smtp.gmail.com’,
‘port’ => 465,
‘username’ => ‘xxxxxxx@gmail.com’,
‘password’ => ‘xxxxxxx’,
‘transport’ => ‘Smtp’
);

function send($subject, $template, $data, $to_mail, $to_name = null) {

// 送受信者設定
if( is_null($to_name) ) {
$to_name = $to_mail;
}
if( is_null($this->from_name) ) {
$this->from_name = $this->from_mail;
}

// 送信処理
$email = new CakeEmail($this->config);
$email
->template($template, ‘layout’)
->viewVars(array(‘data’ => $data))
->emailFormat(‘text’)
->to(array($to_mail => $to_name))
->from(array($this->from_mail => $this->from_name))
->bcc(array($this->from_mail => $this->from_name))
->subject($subject)
->send();
}
}
?>
[/php]

app/View/Layouts/Emails/text/layout.ctp を作成
[php]
<?php echo $content_for_layout;?>
/////////////////////////////////////
よろよろ
[/php]

app/View/Emails/text/contact.ctp
[php]
<?php echo $data[‘Contact’][‘name’]; ?>様

お問い合わせいただき、ありがとうございますた

/////////////////////////////////////
お問い合わせ内容
/////////////////////////////////////

――――――――――――――――――――――
件名:<?php echo $data[‘Contact’][‘subject’]; ?>

――――――――――――――――――――――
<?php echo $data[‘Contact’][‘body’]; ?>

――――――――――――――――――――――
[/php]

app/View/Contacts/contact.ctp
[php]

<?php
echo $this->Form->create(‘Contact’, array(‘action’ => ‘contact’, ‘class’ => ‘autoConfirm’));
echo $this->Form->input(‘Contact.subject’, array(‘label’ => ‘タイトル’));
echo $this->Form->input(‘Contact.name’, array(‘label’ => ‘お名前’));
echo $this->Form->input(‘Contact.from’, array(‘label’ => ‘メールアドレス’));
echo $this->Form->input(‘Contact.body’, array(‘label’ => ‘本文’));
echo $this->Form->button(‘戻る’, array(‘type’ => ‘button’, ‘class’ => ‘autoConfirmBack’));
echo $this->Form->submit(‘送信’, array(‘div’ => false));
echo $this->Form->end();
?>
[/php]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です