CakePHP3でのSMTPサーバーとしてGmailを使用する

config/app.php

config/app.php に設定する場合は

https://book.cakephp.org/3.0/ja/core-libraries/email.html#id4

// サンプル SMTP 設定
Email::configTransport('gmail', [
    'host' => 'ssl://smtp.gmail.com',
    'port' => 465,
    'username' => 'my@gmail.com',
    'password' => 'secret',
    'className' => 'Smtp'
]);

に記載がされています。

また、実際の例としては

http://qiita.com/frost_star/items/4a56cec1f5de5eccbd09#%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1%E8%A8%AD%E5%AE%9A

も参考になります。

ただ、開発段階ではこのファイルはバージョン管理されないため、docker-composeに環境変数を設定して使いまわすほうが便利です。

EMAIL_TRANSPORT_DEFAULT_URL

環境変数として設定する場合には

https://book.cakephp.org/3.0/ja/development/configuration.html#id28

にあるように、EMAIL_TRANSPORT_DEFAULT_URL を設定をします。Gmailの場合には以下のような感じで設定します。

EMAIL_TRANSPORT_DEFAULT_URL: "smtp://Gmailアカウント:パスワード@smtp.gmail.com:587?tls=true&client=null&timeout=30&transport=Smtp"

ホストとポートの組み合わせとしては以下の2つのいずれかを選択する形となります。

    'host' => 'smtp.gmail.com',
    'port' => 587,
    'tls' => true
    'host' => 'ssl://smtp.gmail.com',
    'port' => 465,
    'tls' => null

EMAIL_TRANSPORT_DEFAULT_URLの場合はホストとしてプロトコルの指定がうまくパースできないので、587ポートを使う方の設定を指定するといいようです。

そのため、僕の環境では公式ドキュメントに載っている、

Email::configTransport('default', [
    'url' => 'smtp://my@gmail.com:secret@smtp.gmail.com:465?tls=true',
]);

みたいな形でEMAIL_TRANSPORT_DEFAULT_URLを指定してもうまく行きませんでした。

また、利用する際にはGmail側の設定として、「安全性の低いアプリがアカウントにアクセスするのを許可する」を設定する必要があります。

https://support.google.com/accounts/answer/6010255