cakephp


cakephp2 でのメール送信

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('問い合わせに失敗しました。');
                }

logが
status=deferredなどstatus=sent以外は送信できてない場合がある。

ファイルを添付する

今回は、フォームからアップロードされたファイルをサーバーに保存せず、直接添付して送信する方法を紹介。

$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メールが送信できるようになる。広告主募集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值