前回の記事、「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にしてください。フォルダの中身は下の画像のファイルとフォルダだけ残して、後は削除して構いません。

amazon_ses6

そして、名前を変更したconfig.inc.phpを開いて、keyとsecretの設定を行います。keyとsecretの値はAWSのSecurity Credentialsを選択すると見ることができます。

amazon_ses8

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というファイルを作ります。

amazon_ses7

この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回記事を書きましたが、メールは無事に送れるようになったでしょうか?