[CakePHP3] メールの送り方

CakePHP3で、メールの飛ばし方を説明する。

メールサーバーとして、さくらのメールボックス(メールサーバー)を使うことにする。

メールサーバー情報

まずは、サクラでメールボックスを借りる。

http://www.sakura.ne.jp/

年間で1000円ちょっとのメールサーバだけど、メルマガ送ったりするわけでないなら十分。

レンタルして、ドメインを決めて、xxxxx.sakura.ne.jpといった感じのドメインになる。

次に、適当にプログラム用にアカウントを作成する。(ここではsenderとする)

cakemail2

ここまでで必要な情報が揃う

  • ドメイン名:xxxxx.sakura.ne.jp
  • アカウント名:sender
  • パスワード:*********

メール情報を設定する

config/app.phpでEmailTransportという設定があるので、以下のように’sakura’の設定を追記する。

    '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,
        ],
	'sakura' => [
            'className' => 'Smtp',
            'host' => 'xxxxxx.sakura.ne.jp',
            'port' => 587,
            'timeout' => 30,
            'username' => 'sender@xxxxxx.sakura.ne.jp',
            'password' => '*********',
            'tls' => true,
        ],

要約すると、Smtpで587番ポートで、メールを送るよってこと。

メールを送る

まず、メールのテンプレートとなる物を用意する。

src/Template/Email/textに、適当なctpファイルを追加する。(ここではrecblog.ctpとする。)

内容は以下のような感じ。

オススメのブログは以下のURLから飛べます!
<?= $link ?>

そして、送信する側は以下のような感じ。

$link = 'http://gomocool.net/gomokulog/'
$emailObj = new \Cake\Network\Email\Email();
$emailObj->transport('sakura')
		->from('sender@gomocool.net')
		->template('recblog')
		->viewVars(['link'=>$link])
		->to('xxxxx@mogemoge.co.jp')
		->subject('オススメのブログ!!')
		->send();

最初に設定したsakuraの設定で、fromを適当に変えて、templateでさっきのrecblog.ctpを読み込んで、recblog.ctpで使う変数$linkを設定して、xxxxx@mogemoge.co.jp向けにタイトル’オススメのブログ!!’で送信する。

全部、アロー(->)演算子でつなげまくってるけど、別に繋げなくても一つ一つ設定しても大丈夫。

$emailObj->transport('sakura');
$emailObj->from('sender@gomocool.net');
$emailObj->template('recblog');
$emailObj->viewVars(['link'=>$link]);
$emailObj->to('xxxxx@mogemoge.co.jp');
$emailObj->subject('オススメのブログ!!');
$emailObj->send();

ちなみに new するときにネームスペースをフルで書いてるけど、ファイルの先頭でuse使えば省略できる。

注意点としては、fromに存在しないドメインを入れるとエラーになる。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>