備忘録

個人的な試行錯誤のメモですので間違った情報が載っていたらごめんなさい。

CakePHP3(3.0.0-beta1)でコメントが書き込まれたらメール送信されるようにしてみる

ぼんやりしている間にCakePHP 3.0.0-beta1がリリースされていました。

ブログチュートリアルにコメント機能を追加したので、コメントが書き込まれたらメール送信されるようにしてみます。



①ArticlesControllerを下記のように変更。
・ライブラリの読み込み

use Cake\Network\Email\Email;

・comment()にメール送信処理追加

public function comment() {
    $this->loadModel('Comments');

    $comment = $this->Comments->newEntity($this->request->data);
    if ($this->request->is('post')) {
        if ($this->Comments->save($comment)) {
          $email = new Email('dev');
          $email->to('送信先のメールアドレス')
            ->subject($this->request->data['title'])
            ->send($this->request->data['body']);

            $this->Flash->success(__('Your comment has been saved.'));
            //return $this->redirect(['action' => 'index']);
        }else{
            $this->Flash->error(__('Unable to add your comment.'));
        }
    }
    return $this->redirect('/articles/view/'.$this->request->data['article_id']);
}

②config/app.phpを下記のように変更(devを追加)

'EmailTransport' => [
 'default' => [
  'className' => 'Mail',
  // The following keys are used in SMTP transports
  'host' => 'localhost',
  'port' => 25,
  'timeout' => 30,
  'username' => 'user',
  'password' => 'secret',
  'client' => null,
  'tls' => null,
 ],
 'dev' => [
  'className' => 'Smtp',
  // The following keys are used in SMTP transports
  'host' => 'localhost',
  'port' => 25,
  'timeout' => 30,
  'client' => null,
  'tls' => null,
 ],
],

'Email' => [
 'default' => [
  'transport' => 'default',
  'from' => 'you@localhost',
  //'charset' => 'utf-8',
  //'headerCharset' => 'utf-8',
 ],
 'dev' => [
  'transport' => 'dev',
  'from' => ['差出人のメールアドレス'=>'差出人名'],
  //'charset' => 'utf-8',
  //'headerCharset' => 'utf-8',
 ],
],


差出人情報は送信時に都度指定することも可能。

Email — CakePHP Cookbook 3.x documentation