【PHP】Amazon SESでEメール送信
aws-sdk-phpを利用してAmazon SESからEメールを送信する方法のまとめです。
※aws-sdk-phpのセットアップは以下リンク参照
【AWS】S3へファイルアップロード(PHP)
公式の詳細はこちら
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-using-sdk-php.html
【AWS】S3へファイルアップロード(PHP)
なお、Amazon SESに東京リージョンは存在しない。
※aws-sdk-phpのセットアップは以下リンク参照
【AWS】S3へファイルアップロード(PHP)
公式の詳細はこちら
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-using-sdk-php.html
実装
名前空間の定義
use \Aws\Credentials\CredentialProvider;
use \Aws\Ses\SesClient;
use \Aws\Exception\AwsException;
処理
/**
* Amazon SES Sendmail
* @param string $subject
* @param string $body
* @param string $to
* @param string $from_email
* @param string $from_name = null
* @return bool
* @throw Exception
*/
public static function send(
string $subject,
string $body,
string $to,
string $from_email,
string $from_name = null
) : bool {
try{
// ① 認証情報を取得
$provider = CredentialProvider::defaultProvider();
// ② SES Clientオブジェクト生成
$client = new SesClient(array(
'region' => 'us-west-2',
'version' => '2010-12-01',
'credentials' => $provider,
));
// ③ 送信情報の配列
$mail_info = array(
'Destination' => array(
'ToAddresses' => [$to],
),
'ReplyToAddresses' => [$from_email],
'Source' => self::get_source($from_email, $from_name),
'Message' => array(
'Body' => array(
'Text' => array(
'Charset' => 'UTF-8',
'Data' => $body,
),
),
'Subject' => array(
'Charset' => 'UTF-8',
'Data' => $subject,
),
),
);
// ④ Eメール送信実行
$result = $client->sendEmail($mail_info);
\Log::info("Message Id:{$result['MessageId']}")
} catch(AwsException $e){
\Log::error(__METHOD__.' ('.__LINE__.') - '.$e->getMessage());
return false;
}
return true;
}
/**
* From文字列生成
* @param string $from_email
* @param string $from_name
* @return string
*/
private static function get_source($from_email, $from_name) : string {
if (is_null($from_name)) {
return $from_email;
} else {
return sprintf('"%s" <%s>', mb_encode_mimeheader($from_name), $from_email);
}
}
① 認証情報を取得
CredentialProviderにより認証情報を取得する。詳しくは以下参照【AWS】S3へファイルアップロード(PHP)
② SES Clientオブジェクト生成
生成した認証情報で、SES Clientオブジェクトを生成する。なお、Amazon SESに東京リージョンは存在しない。
③ 送信する内容の配列生成
Destination.ToAddresses
送信先のメールアドレスを配列で指定
ReplyToAddresses
返信用のメールアドレスを配列で指定
※Amazon SESに登録されたアドレスかつ、ステータスがverifiedでないアドレスを指定した場合、エラーになる。確認方法は...
Amazonコンソールにログイン →
Simple Email Service →
右上のプルダウンで該当リージョンを選択 →
Email Address で確認できる。
Source
返信用のメールアドレスそのままでもいいが、名前がある場合は名前を設定可能
※get_source()関数を呼べばよしなに設定してくれる
Message.Body.Text.Data
メール本文を設定
Message.Subject.Data
メールタイトルを設定
④ メール送信実行
送信結果のmessageIdをログに残しておけば、CloudWatchで追跡できる。
コメント
コメントを投稿