Amazon SES メールトランスポート
AsyncAws.AmazonSesApi は、Amazon SES API v2 の SendEmail オペレーションでメールを送信します。 config/email.php (レガシーレイアウトでは app/Config/email.php) で、メールプロファイルのトランスポートとして設定します。
php
class EmailConfig
{
/**
* Default email profile values.
*
* @var array
*/
public $default = [
'transport' => 'AsyncAws.AmazonSesApi',
'from' => 'example@example.com',
'charset' => 'utf-8',
'headerCharset' => 'utf-8',
];
}SES クライアントは AsyncAws 設定から作成されます。メールプロファイルの次のキーで、その設定を上書きできます。
| キー | 説明 |
|---|---|
region | SES の AWS リージョン。 |
key、secret | アクセスキー ID とシークレットアクセスキー。設定されていない場合は、AsyncAws 設定の認証情報、またはデフォルトの認証情報チェーンが使われます。 |
token | 一時的な key と secret のためのセッショントークン。 |
endpoint | SES のエンドポイント URL (ローカルのエミュレーター用など)。 |
このトランスポートは、テキストと HTML のパート、To、Cc、Bcc、Reply-To のアドレス、添付ファイルを送信します。 CakeEmail::send() は SES のメッセージ ID を id として返します。
php
App::uses('CakeEmail', 'Network/Email');
$email = new CakeEmail('default');
$result = $email->to('user@example.com')
->subject('Welcome')
->send('Hello!');
CakeLog::write(LOG_INFO, 'SES message ID: ' . $result['id']);送信元アドレス (from) は SES で検証済みである必要があります。SES がメールを拒否すると、 AsyncAws の例外が投げられます。たとえば AsyncAws\Ses\Exception\MessageRejectedException です。
メーラーの DSN
メールプロファイルの 'dsn' キーに対応した pieceofcake2/cakephp 2.12.7 以降では、 Symfony の Amazon Mailer ブリッジ の形式の DSN で、たとえば環境変数 MAILER_DSN からトランスポートを設定できます。プラグインを ブートストラップ付きで読み込むと、CakeEmail::setDsnClassMap() で ses のスキームが登録されます (async-aws/simple-s3 がインストールされていれば S3 ストリームラッパー も登録されます)。
php
// config/bootstrap.php
CakePlugin::load('AsyncAws', ['bootstrap' => true]);php
class EmailConfig
{
/**
* Default email profile values.
*
* @var array
*/
public $default = [
'transport' => 'Mail',
'from' => 'example@example.com',
'dsn' => null,
];
/**
* Reads the transport from MAILER_DSN.
*/
public function __construct()
{
$this->default['dsn'] = env('MAILER_DSN');
}
}| DSN | 設定 |
|---|---|
ses+api://ACCESS_KEY:SECRET_KEY@default?region=eu-west-1 | AsyncAws.AmazonSesApi、key、secret、region |
ses+https://ACCESS_KEY:SECRET_KEY@default、ses://... | 同じ (AsyncAws.AmazonSesApi) |
ses+api://default?region=eu-west-1 | AsyncAws 設定の認証情報か、デフォルトの認証情報チェーンを使う AsyncAws.AmazonSesApi |
ses+smtp://USERNAME:PASSWORD@default?region=eu-west-1、ses+smtps://... | SES の SMTP 認証情報で ssl://email-smtp.eu-west-1.amazonaws.com のポート 465 に接続するコアの Smtp トランスポート |
?session_token=...は、一時的な認証情報のセッショントークンtokenを設定します。default以外のホストはエンドポイントになります (ses+api://KEY:SECRET@localhost:4566はhttps://localhost:4566を使います)。ses+smtpでは SMTP のホストになります。- DSN に
regionがない場合は、プロファイルのregion、AsyncAws設定 (またはAws設定) のregion、AWS_REGION、AWS_DEFAULT_REGIONの順に使われ、どれも設定されていなければeu-west-1(Symfony のデフォルト) になります。 - AWS のシークレットキーにある
/と+はそのままでかまいません。%は%25、?は%3Fとエンコードしてください。 ses+apiとses+httpsはどちらも、このトランスポートの SES API v2 のSendEmailオペレーションを使います。 Symfony での区別 (シンプルなメッセージと raw メッセージ) はありません。ses+smtpのping_thresholdは無視されます。- DSN から読み取ったキーはプロファイルの同じキーを置き換え、ほかのキー (
from、charsetなど) はそのまま残ります。MAILER_DSNが設定されていなければ無視されます。 - DSN に対応していない pieceofcake2/cakephp のリリースでは、ブートストラップは登録を行わず、
'dsn'キーは無視されます。
