※当ブログではアフィリエイト広告を利用しています。
Amazon Web Serviceのサービスの一つにAmazon SES(Simple Email Service)という大規模メール配信用サービスがあります。
SMTPを使ったメール送信の他に、多くのプログラミング言語用に用意されているSDKを使ってのメール送信が可能とのことなのでiOS用のSDKを使ってiPhoneからメール送信してみました。その方法をまとめます。
Amazon SESとは
Amazonが提供するメール配信用のクラウドサービスです。Eメールを1,000通当たり$0.10と転送量による課金だけで安価に大量に送信することができます。
公式サイトによる説明は以下の通りです。
Amazon Simple Email Service(Amazon SES)は、企業や開発者のための、非常に拡張性が高くコスト効率の良いトランザクションバルクメール送信サービスです。Amazon SES により、社内でEメールソリューションを構築したり、サードパーティのEメールサービスをライセンス、インストール、または操作したりする煩雑さやコストから解放されます。
AWS SDK for iOSを使ってのメール送信
通常のメール送信のようにSMTPを設定してメール送信することもできますが、多くのプログラミング言語から使うことができるAWS SDK(開発キット)を使ってのメール送信も可能です。
以下にAWS SDK for iOS(Objective-C)を使ってのメール送信方法を画像つき手順でご紹介します。
1.AWS側の設定
はじめにAmazon SESとIAM(Identity and Access Management)の設定を行います。
1-1.Amazon SESの設定
Amazon SESは初期状態ではsandboxモードとなっており、許可したメールアドレスにしかメールを送信できません。sandboxでも少量のメール送信は可能なので、今回はsandboxモードでメールアドレスを許可する手順からスタートします。
Amazon SESマネジメントコンソール左側のメニューより「Verified Senders」の「Email Addresses」を開き、「Verify a New Email Address」ボタンをクリックします。
送信元としての使用を許可するメールアドレスを入力します。サンドボックスモードではここで許可したメールアドレスにのみメールが送信できます。今回は許可するメールアドレスを一つだけ登録します(送信元・送信先アドレスが同じになります)
メールアドレスを入力して「Verify This Email Address」ボタンを押すと登録したアドレスに「Amazon SES Address Verification Request」という件名のメールが届きます。メール中のリンクをクリックすると、登録したメールアドレスでの送信と受信が可能になります。
今回は許可するメールアドレスを指定しましたが、この他にドメインに所定のTXTレコードを設定することでドメイン単位でのメール送信許可を設定することも可能なようです。
1-2.IAMでメール送信用ユーザの作成
SDKを使ってAmazon SESでメール送信するためには認証用のアクセスキーとシークレットキーが必要です。IAM(Identity and Access Management)でメール送信用のAWSユーザを作成します。
IAMマネジメントコンソールの「Users」を開き、「Create New Users」ボタンを押します。
任意のユーザ名を入力し、「Generate an access key for each user」にチェックを入れた状態で「Create」ボタンを押します。
ユーザ作成が完了するとアクセスキーとシークレットキーが生成されます。画面表示されたものをコピーするか「Download Credencials」ボタンから認証情報をダウンロードします。
※シークレットキーはここで保存しておかないと再度表示できません。紛失した場合はアクセスキーを新しく登録することとなります。
作成したユーザにSESへのアクセスを許可するポリシーを設定するため、IAMのユーザ一覧に戻ります。
作成したユーザを選択し、「Permissions」タブの「Attach User Policy」ボタンを押します。
ポリシーの一覧から「Amazon SES Full Access」の「Select」ボタンを押します。
JSON形式のポリシードキュメントが表示されるため「Apply Policy」ボタンを押します。
以上でメール送信用のSESとIAMの設定は完了です。
ちなみにSESマネジメントコンソールの「SMTP Settings」で「Create My SMTP Credentials」からユーザを作成できますが、ここから作成したユーザにはSMTPからメール送信するための権限しか与えられないためAWS SDKからのメール送信はできません。
2.iOSアプリ側(XCode)の設定とコーディング
iOSからのメール送信するためのXCodeの設定とコーディングを行います。
2-1.SDKのインポート
AWS SDK for iOSをダウンロードします。
ダウンロードしたzipアーカイブを解凍し、AWSRuntime.frameworkとAWSSES.frameworkをXCodeプロジェクトにドラッグして追加します。
2-2.SDKを使用してコーディング
AWSRuntime/AWSRuntime.hとAWSSES/AWSSES.hを#importし、コーディングを行います。
以下は任意のViewControllerで任意のボタンを押下したときメールを送信するサンプルです。
ACCESS_KEY,SECRET_KEY,FROM_ADDRESS,TO_ADDRESS は「1.AWS側の設定」で設定したものに置き換えて下さい。
#import "ViewController.h"
#import <AWSRuntime/AWSRuntime.h>
#import <AWSSES/AWSSES.h>
#define ACCESS_KEY @"YOUR_ACCESS_KEY"
#define SECRET_KEY @"YOUR_SECRET_KEY"
#define FROM_ADDRESS @"you@example.com"
#define TO_ADDRESS @"you@example.com"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (IBAction)sendEmailWithSES:(id)sender {
[self sendMailWithSES];
}
- (void)sendMailWithSES
{
AmazonSESClient *sesClient = [[AmazonSESClient alloc] initWithAccessKey:ACCESS_KEY
withSecretKey:SECRET_KEY];
//件名の情報
SESContent *subject = [[SESContent alloc] init];
subject.data = [NSString stringWithFormat: @"%@", @"件名です"];
//本文の情報
SESContent *messageBody = [[SESContent alloc] init];
messageBody.data = [NSString stringWithFormat: @"%@", @"本文です"];
SESBody *body = [[SESBody alloc] init];
body.text = messageBody;
SESMessage *message = [[SESMessage alloc] init];
message.subject = subject;
message.body = body;
//送信先の情報
SESDestination *destination = [[SESDestination alloc] init];
[destination.toAddresses addObject:TO_ADDRESS];
SESSendEmailRequest *ser = [[SESSendEmailRequest alloc] init];
ser.source = FROM_ADDRESS; //送信元アドレス
ser.destination = destination; //送信先の情報
ser.message = message; //メッセージの情報
@try {
//sendEmail でメール送信
SESSendEmailResponse *response = [sesClient sendEmail:ser];
NSLog(@"%@",[response description]);
}
@catch (AmazonServiceException *exception) {
//例外があればこちらへ
NSLog(@"%@",[exception message]);
}
}
@end
上記プログラムからメール送信したところ問題なく送信できました。ちなみにgmailではamazonses.com経由であることが表示されます。
おわりに
iOSではアプリからメールを送信する場合、標準メーラーを起動して送信する方法が一般的かと思いますが、Amazon SESとAWS SDK for iOSを使えばバックグラウンドでのメール送信も出来そうです。
SDKはiOSからも手軽に使えるため、AWSの他のサービスについてもSDKを使って利用してみたくなりました。




















