前回の記事、「Amazon SESでメール配信を行う」では、Amazon SESのコントロールパネル上からメールを送信する方法をご紹介しました。今回は自社のWebシステムなどの外部からAmazon SESを利用してメールを送信する方法をご紹介したいと思います。
AWS SDK for PHPをダウンロードする
SESを利用する場合、ゼロから作る必要はありません。SDK(Software Development Kit)といって、簡単にAWS(SESはAWSが提供するサービスの1つ)を使えるようにするためのツールがAmazonから提供されているので、それをダウンロードして利用します。(ダウンロードはこちらから)
少し気をつけることがあります。上記のリンクに行くと、AWS SDK for PHP2という新しいバージョンもあるのですが、2013年6月10日の時点では、最新版にはまだSESを利用するAPIが提供されていなかったので、旧版を利用してください。
ダウンロードしたSDKの準備
ダウンロードしたsdk-latest.zipを解凍すると、解凍したフォルダの中にsdk-1.6.2というフォルダがあります。このフォルダを丸ごとコピーして、フォルダの名前をAWSSDKforPHPと変更しておいてください。(名前はなんでもいいんですが、分かりやすい名前にしてください。)また、解凍したフォルダの中にあるファイルconfig-sample.inc.phpは名前を変更して、config.inc.phpにしてください。フォルダの中身は下の画像のファイルとフォルダだけ残して、後は削除して構いません。

そして、名前を変更したconfig.inc.phpを開いて、keyとsecretの設定を行います。keyとsecretの値はAWSのSecurity Credentialsを選択すると見ることができます。
Yor Security Credentialsの「Access Keys」を開くと、Access Key IDという欄があるので、それがkeyの値です。以前はsecretはクリックすれば見れたのですが、現在はCreate New Root Keyというボタンを押して新しくAccess Keyを作成した時に、CSVファイル(rootkey.csv)がダウンロードされ、その中にkeyとsecretが書いています。まだAccess Keyを作ったことがなければ、新規作成してください。
取得したkeyとsecretはconfig.inc.phpに以下のように書いてください。
CFCredentials::set(array(
// Credentials for the development environment.
'development' => array(
// Amazon Web Services Key. Found in the AWS Security Credentials. You can also pass
// this value as the first parameter to a service constructor.
'key' => 'ここにkeyを書く',
// Amazon Web Services Secret Key. Found in the AWS Security Credentials. You can also
// pass this value as the second parameter to a service constructor.
'secret' => 'ここにsecretを書く',
~~以下、省略~~
PHPでプログラムを作る
では、実際にPHPでプログラムを作ることにします。先ほどのSDKのフォルダと同じところに、今回はSendMail.phpというファイルを作ります。
このSendMail.phpの中身は以下のようになります。
<?php
/**
* =================================================================
* SendMail.php
* Amason SES メール送信スクリプト
* =================================================================
*/
// SDKインクルード
require_once('AWSSDKforPHP/sdk.class.php');
require_once('AWSSDKforPHP/services/ses.class.php');
// Amazon SESのインスタンス生成
$ses = new AmazonSES();
// 送信元メールアドレス
// ※AWSで認証済みのアドレスを設定(前回の記事参照)
$mail_from_addr = 'sender@isket.jp';
// 宛先のメールアドレス
// amazonのリファレンスによると、宛先は1つずつが送信するのが望ましいとのこと
$mail_to_addr = array('ToAddresses' => array(
'sample@isket.jp'),
);
// 件名と本文
$message = array(
'Subject' => array(
'Data' => '件名',
'Charset' => 'ISO-2022-JP',
),
'Body' => array(
'Text' => array(
'Data' => '本文',
'Charset' => 'ISO-2022-JP',
),
),
);
// エラー時の返信メール先
$opt = array(
'ReturnPath' => 'error@isket.jp'
);
// SESでメール送信
$res = $ses->send_email($mail_from_addr , $mail_to_addr , $message, $opt);
// 応答
if ($res->isOK()) {
echo 'success';
}
else {
echo 'failure';
}
PHPでメールを送信する場合も、送信元は認証済みのメールアドレスからしかメールを送信することはできません。宛先に関してはsandboxの場合は認証済みの宛先にしか送れませんが、production申請が完了していれば自由に宛先は設定することができます。
Amazon SESを利用してメールを送信するシリーズで3回記事を書きましたが、メールは無事に送れるようになったでしょうか?
- 投稿タグ
- Amazon SES, AWS, PHP, メール配信





