

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SES での E メール送信のセットアップ
<a name="send-email"></a>

Amazon Simple Email Service (Amazon SES) では、Amazon SES コンソール、Amazon SES Simple Mail Transfer Protocol (SMTP) インターフェイス、または Amazon SES API を使用して E メールを送信することができます。通常、テスト E メールを送信して送信アクティビティを管理する場合は、コンソールを使用します。一括 E メールを送信する場合には、SMTP インターフェイスまたは API を使用します。Amazon SES の料金に関する情報については、「[Amazon SES の料金](https://aws.amazon.com/ses/pricing)」を参照してください。
+ SMTP 対応のソフトウェアパッケージ、アプリケーション、またはプログラミング言語を使用し、Amazon SES を介して E メールを送信する場合や、Amazon SES を既存のメールサーバーに統合する場合には、Amazon SES SMTP インターフェイスを使用します。詳細については、「[プログラミングで Amazon SES の SMTP インターフェイスを介して E メールを送信する](send-using-smtp-programmatically.md)」を参照してください。
+ 未処理の HTTP リクエストを使用して、Amazon SES を呼び出す場合には、Amazon SES API を使用します。詳細については、「[Amazon SES API を使用して E メールを送信する](send-email-api.md)」を参照してください。

**重要**  
複数の受取人（受取人は「To」、「CC」、「BCC」のアドレス）にメールを送信する場合、Amazon SES の呼び出しに失敗すると、E メール全体が拒否されて、どの受信者も目的のメールを受信できません。そのため、1 回につき 1 人の受信者に E メールを送信することをお勧めします。

# Amazon SES SMTP インターフェイスを使用して E メールを送信
<a name="send-email-smtp"></a>

Amazon SES を介して本稼働 E メールを送信する場合には、Simple Mail Transfer Protocol（SMTP）インターフェイスまたは Amazon SES API を使用できます。Amazon SES API の詳細については、「[Amazon SES API を使用して E メールを送信する](send-email-api.md)」を参照してください。このセクションでは、SMTP インターフェイスについて説明します。

Amazon SES は、インターネットで最も一般的な E メールプロトコルである SMTP を使用してメールを送信します。SMTP 対応の各種プログラミング言語やソフトウェアを使用して Amazon SES SMTP インターフェイスに接続することで、Amazon SES を介して E メールを送信できます。このセクションでは、Amazon SES を介して E メールを送信するために、Amazon SES の SMTP 認証情報を取得する方法、SMTP インターフェイスを使用して E メールを送信する方法、および、各種のソフトウェアおよびメールサーバーの設定方法を説明します。

SMTP インターフェイスを介した Amazon SES の使用に伴う一般的な問題の解決策については、「[Amazon SES SMTP の問題](troubleshoot-smtp.md)」を参照してください。

## SMTP 経由で E メールを送信するための要件
<a name="send-email-smtp-requirements"></a>

Amazon SES SMTP インターフェイスを使用して E メールを送信するには、次の参照が必要です。
+ SMTP エンドポイントアドレス。Amazon SES　SMTP エンドポイントのリストについては、[Amazon SES SMTP エンドポイントへの接続](smtp-connect.md)を参照してください。
+ SMTP インターフェイスのポート番号。ポート番号は接続方法によって変わります。詳細については、「[Amazon SES SMTP エンドポイントへの接続](smtp-connect.md)」を参照してください。
+ SMTP ユーザー名とパスワード。SMTP 認証情報は、各 AWS 地域に固有です。複数の AWS リージョンで SMTP インターフェイスを使用してメールを送信する予定がある場合は、リージョンごとに SMTP 認証情報が必要です。
**重要**  
SMTP 認証情報は、Amazon SES コンソールへのサインインに使用する AWS アクセスキーまたは認証情報と同じではありません。SMTP 認証情報を生成する方法については、「[Amazon SES SMTP 認証情報を取得](smtp-credentials.md)」を参照してください。
+ Transport Layer Security (TLS) を使用して通信できるクライアントソフトウェア。詳細については、[Amazon SES SMTP エンドポイントへの接続](smtp-connect.md)を参照ください。
+ Amazon SES で検証済みの E メールアドレス。詳細については、[Amazon SES の検証済みID](verify-addresses-and-domains.md)を参照ください。
+ 大量の E メールを送信する場合は、送信クォータの引き上げが必要です。詳細については、「[Amazon SES 送信制限の管理](manage-sending-quotas.md)」を参照ください。

## SMTP 経由で E メールを送信する方法
<a name="send-email-methods"></a>

SMTP 経由で E メールを送信するには、次のいずれかの方法を使用できます。
+ SMTP 対応ソフトウェアを、Amazon SES SMTP インターフェイスを介して E メールを送信するように設定するには、「[ソフトウェアパッケージを使用し、Amazon SES を介して E メールを送信します](send-email-smtp-software-package.md)」を参照ください。
+ Amazon SES を介して E メールを送信するようにアプリケーションをプログラムするには、「[プログラミングで Amazon SES の SMTP インターフェイスを介して E メールを送信する](send-using-smtp-programmatically.md)」を参照ください。
+ Amazon SES を介してすべての送信 E メールを送信するために、既存の E メールサーバーを設定する方法については、「[Amazon SES を既存の E メールサーバーと統合します](send-email-smtp-existing-server.md)」を参照してください。
+ テストを行うときに有効なコマンドラインを使用して、Amazon SES SMTP インターフェイスを操作するためには、「[コマンドラインを使用して、Amazon SES SMTP インターフェイスへの接続をテストする](send-email-smtp-client-command-line.md)」を参照ください。

SMTP 応答コードのリストについては、「[Amazon SES から返される SMTP 応答コード](troubleshoot-smtp.md#troubleshoot-smtp-response-codes)」を参照ください。

## 提供する E メール情報
<a name="smtp-parameters"></a>

SMTP インターフェイスで Amazon SES にアクセスする場合、SMTP クライアントアプリケーションでメッセージがアセンブルされるため、提供する必要のある情報は使用するアプリケーションによって異なります。少なくとも、クライアントとサーバー間の SMTP 交換には、次が必要になります。
+ 送信元アドレス
+ 送信先アドレス
+ メッセージデータ

SMTP インターフェイスを使用していて、フィードバック転送が有効になっている場合、バウンス、苦情、配信通知は "MAIL FROM" アドレスに送信されます。指定した、いずれの "Reply-To" アドレスは使用されません。



# Amazon SES SMTP 認証情報を取得
<a name="smtp-credentials"></a>

SES SMTP インターフェイスにアクセスするには、Amazon SES SMTP 認証情報が必要です。

SES SMTP インターフェイスを介して E メールを送信するために使用する認証情報は、各 AWS リージョンに固有です。SES SMTP インターフェイスを使用して複数のリージョンでメールを送信する場合は、使用しようとしている各リージョンで SMTP 認証情報のセットを生成する必要があります。

SMTP パスワードはシー AWS クレットアクセスキーとは異なります。認証情報の詳細については、[Amazon SES 認証情報の種類](send-email-concepts-credentials.md)を参照ください。

**注記**  
現在利用可能な SMTP エンドポイントのリストについては、「*AWS 全般のリファレンス*」の「[SMTP エンドポイント](https://docs.aws.amazon.com/general/latest/gr/ses.html#ses_smtp_endpoints)」を参照してください。

## SES コンソールを使用して SES SMTP 認証情報を取得する
<a name="smtp-credentials-console"></a>

**要件**  
IAM ユーザーは SES SMTP 認証情報を作成できますが、SES SMTP 認証情報の作成には IAM が使用されるため、ユーザーのポリシーによって IAM 自体を使用するアクセス許可がユーザーに付与される必要があります。IAM ポリシーで許可する必要がある IAM アクションは、`iam:ListUsers`、`iam:CreateUser`、`iam:CreateAccessKey`、および`iam:PutUserPolicy`です。コンソールを使用して SES SMTP 認証情報を作成する場合、これらのアクセス許可が IAM ユーザーにないと、アカウントに「*iam:ListUsers を実行する権限がない*」いうエラーが表示されます。

**重要**  
上記の IAM アクションには、サービスでリソースのアクセス許可を付与または変更するアクセス許可を付与するため、最も高い IAM レベルである「[アクセス許可の管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_understand-policy-summary-access-level-summaries.html#access_policies_access-level)」アクセスレベルが与えられています。したがって、 AWS アカウントのセキュリティを向上させるために、アクセス許可管理アクセスレベル分類を含むこれらのポリシーを制限または定期的に監視することを強くお勧めします。

**SMTP 認証情報を作成するには**

1.  AWS マネジメントコンソール にサインインし、Amazon SES コンソール ([https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)) を開きます。

1. 左のナビゲーションペインで **[SMTP settings]** (SMTP 設定) を選択します。**[Simple Mail Transfer Protocol (SMTP) settings]** (Simple Mail Transfer Protocol (SMTP) の設定) ページが開きます。

1. 右上の **[Create SMTP Credentials]** (SMTP 認証情報の作成) を選択します。IAM コンソールが開きます。

1. (オプション) 既に作成した SMTP ユーザーを表示、編集、または削除する必要がある場合は、右下の **[Manage my existing SMTP credentials]** (既存の SMTP 認証情報の管理) を選択します。IAM コンソールが開きます。SMTP 認証情報の管理の詳細は、次の手順に従って表示されます。

1. **[SMTP のユーザーを作成]** で、**[ユーザー名]** フィールドに SMTP ユーザーの名前を入力します。または、このフィールドに提供されているデフォルト値を使用できます。完了したら、右下隅の **[ユーザーを作成]** を選択します。

1. *[SMTP パスワード]* で **[表示]** を選択します。SMTP 認証情報が画面に表示されます。

1. **[.csv ファイルをダウンロード]** を選択してこれらの認証情報をダウンロードし、安全な場所に保管します。このダイアログボックスを閉じると、認証情報の表示や保存はできなくなります。

1. **[SES コンソールに戻る]** を選択します。

この手順で作成した SMTP 認証情報を一覧表示するには、IAM コンソールの **[Access management]** (アクセス管理) で **[Users]** (ユーザー) を選択し、検索バーを使用して SMTP 認証情報を割り当てたすべてのユーザーを見つけます。

IAM コンソールを使用して、既存の SMTP ユーザーを削除することもできます。ユーザーの削除の詳細については、*IAM 入門ガイド*の「[IAM ユーザーの管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html)」を参照してください。

SMTP パスワードを変更する場合は、IAM コンソールで既存の SMTP ユーザーを削除します。次に、前の手順を完了して、新しい SMTP 認証情報のセットを作成します。

## 既存の認証情報を変換して SES SMTP AWS 認証情報を取得する
<a name="smtp-credentials-convert"></a>

IAM インターフェイスを使用して設定したユーザーがいる場合は、ユーザーの SES SMTP 認証情報を AWS 認証情報から取得できます。

**重要**  
一時的な AWS 認証情報を使用して SMTP 認証情報を取得しないでください。SES SMTP インターフェイスは、一時的なセキュリティ認証情報から生成された SMTP 認証情報をサポートしていません。

**IAM ユーザーが SES SMTP インターフェイスを使用してメールを送信できるようにするには**

1. 以下の手順に従って、このセクションで提供されるアルゴリズムを使用して、ユーザーの SMTP AWS 認証情報を認証情報から取得します。

    AWS 認証情報から開始するため、SMTP ユーザー名は AWS アクセスキー ID と同じであるため、SMTP パスワードを生成するだけで済みます。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. **[アクセス管理]** で、**[ポリシー]**、**[ポリシーの作成]** の順に選択します。

1. **[ポリシーエディター]** で、**[JSON]** を選択して、エディタ内のコード例をすべて削除します。

1. 以下の許可ポリシーをエディタに貼り付けます。

------
#### [ JSON ]

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
   "Effect": "Allow",
               "Action": "ses:SendRawEmail",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. **[次へ]** をクリックし、**[ポリシー名]** フィールドに `AmazonSesSendingAccess` と入力して、**[ポリシーの作成]** をクリックします。

1. **[アクセス管理]** で、**[ユーザーグループ]**、**[グループの作成]** の順に選択します。

1. **[ユーザーグループ名]** フィールドに、`AWSSESSendingGroupDoNotRename` と入力します。

1. **[ユーザーをグループに追加]** テーブルから SMTP ユーザーを選択して、グループに追加します。

1. 以前に作成した `AmazonSesSendingAccess` ポリシーを **[許可ポリシーをアタッチ]** テーブルから選択してアタッチし、**[ユーザーグループを作成]** をクリックします。

IAM での SES の使用の詳細については、「[Amazon SESでの Identity and Access Management](control-user-access.md)」を参照してください。

**注記**  
SES SMTP 認証情報はどの IAM ユーザーに対しても生成できますが、SMTP 認証情報を生成するときには、個別の IAM ユーザーを作成することをお勧めします。目的別にユーザーを作成することが推奨される理由については、「[IAM のベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPractices.html)」を参照ください。

次の擬似コードは、 AWS シークレットアクセスキーを SES SMTP パスワードに変換するアルゴリズムを示しています。

```
 1. // Modify this variable to include your AWS secret access key
 2. key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY";
 3.             
 4. // Modify this variable to refer to the AWS Region that you want to use to send email.
 5. region = "us-west-2";
 6.             
 7. // The values of the following variables should always stay the same.
 8. date = "11111111";
 9. service = "ses";
10. terminal = "aws4_request";
11. message = "SendRawEmail";
12. version = 0x04;
13. 
14. kDate = HmacSha256(date, "AWS4" + key);
15. kRegion = HmacSha256(region, kDate);
16. kService = HmacSha256(service, kRegion);
17. kTerminal = HmacSha256(terminal, kService);
18. kMessage = HmacSha256(message, kTerminal);
19. signatureAndVersion = Concatenate(version, kMessage);
20. smtpPassword = Base64(signatureAndVersion);
```

一部のプログラミング言語に含まれているライブラリを使用して、IAM シークレットアクセスキーを SMTP パスワードに変換できます。このセクションでは、Python を使用して AWS シークレットアクセスキーを SES SMTP パスワードに変換するために使用できるコード例を示します。

**注記**  
次の例では、Python 3.6 で導入された**f 文字列**を使用しています。 古いバージョンでは使用できません。
次の例の SMTP\$1REGIONS のリストは例にすぎません。 AWS リージョンごとに SMTP 認証情報が必要になるため、E メールを送信する予定のリージョンによって、実際のリージョンのリストはこれより短くなったり長くなったりする可能性があります。

------
#### [ Python ]

```
#!/usr/bin/env python3

import hmac
import hashlib
import base64
import argparse

SMTP_REGIONS = [
    "us-east-2",  # US East (Ohio)
    "us-east-1",  # US East (N. Virginia)
    "us-west-2",  # US West (Oregon)
    "ap-south-1",  # Asia Pacific (Mumbai)
    "ap-northeast-2",  # Asia Pacific (Seoul)
    "ap-southeast-1",  # Asia Pacific (Singapore)
    "ap-southeast-2",  # Asia Pacific (Sydney)
    "ap-northeast-1",  # Asia Pacific (Tokyo)
    "ca-central-1",  # Canada (Central)
    "eu-central-1",  # Europe (Frankfurt)
    "eu-west-1",  # Europe (Ireland)
    "eu-west-2",  # Europe (London)
    "eu-south-1",  # Europe (Milan)
    "eu-north-1",  # Europe (Stockholm)
    "sa-east-1",  # South America (Sao Paulo)
    "us-gov-west-1",  # AWS GovCloud (US)
    "us-gov-east-1",  # AWS GovCloud (US)
]

# These values are required to calculate the signature. Do not change them.
DATE = "11111111"
SERVICE = "ses"
MESSAGE = "SendRawEmail"
TERMINAL = "aws4_request"
VERSION = 0x04


def sign(key, msg):
    return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()


def calculate_key(secret_access_key, region):
    if region not in SMTP_REGIONS:
        raise ValueError(f"The {region} Region doesn't have an SMTP endpoint.")

    signature = sign(("AWS4" + secret_access_key).encode("utf-8"), DATE)
    signature = sign(signature, region)
    signature = sign(signature, SERVICE)
    signature = sign(signature, TERMINAL)
    signature = sign(signature, MESSAGE)
    signature_and_version = bytes([VERSION]) + signature
    smtp_password = base64.b64encode(signature_and_version)
    return smtp_password.decode("utf-8")


def main():
    parser = argparse.ArgumentParser(
        description="Convert a Secret Access Key to an SMTP password."
    )
    parser.add_argument("secret", help="The Secret Access Key to convert.")
    parser.add_argument(
        "region",
        help="The AWS Region where the SMTP password will be used.",
        choices=SMTP_REGIONS,
    )
    args = parser.parse_args()
    print(calculate_key(args.secret, args.region))


if __name__ == "__main__":
    main()
```

このスクリプトを使用して SMTP パスワードを取得するには、上記のコードを`smtp_credentials_generate.py`として保存します。コマンドラインから、以下のコマンドを実行します。

```
python path/to/smtp_credentials_generate.py wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY us-east-1
```

上記のコマンドで、次の操作を行います。
+ *path/to/*を保存した場所へのパスに置き換えます`smtp_credentials_generate.py`。
+ *wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY* を、SMTP パスワードに変換するシークレットアクセスキーに置き換えます。
+ *us-east-1* を SMTP 認証情報を使用する AWS リージョンに置き換えます。

このスクリプトが正常に実行されると、SMTP パスワードだけが出力されます。

------

## SMTP ユーザーの既存のインラインポリシーからグループポリシーへの移行 (セキュリティに関する推奨事項)
<a name="migrate-inline-policy-to-group"></a>

**重要**  
2024 年 9 月 6 日より前に SES SMTP 認証情報を作成した場合、インラインポリシーとタグが SMTP ユーザーにアタッチされています。SES ではインラインポリシーの使用を排除する方向であり、セキュリティに関する推奨事項と同じ方法を採用することをお勧めします。

既存のインラインポリシーからグループポリシーに SMTP ユーザーを移行する前に、まず SES アクセス許可ポリシーを使用して IAM ユーザーグループを作成し、インラインポリシーの代わりにする必要があります。この IAM ユーザーグループを既に作成している場合、または 2024 年 9 月 6 日以降に作成した SMTP 認証情報用にユーザーグループ自動的に作成されている場合は、以下の手順の*ステップ 10* に直ちにスキップできます。

**既存のインラインポリシーからマネージドグループに移行するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. **[アクセス管理]** で、**[ポリシー]**、**[ポリシーの作成]** の順に選択します。

1. **[ポリシーエディター]** で、**[JSON]** を選択して、エディタ内のコード例をすべて削除します。

1. 以下の許可ポリシーをエディタに貼り付けます。

------
#### [ JSON ]

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
   "Effect": "Allow",
               "Action": "ses:SendRawEmail",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. **[次へ]** をクリックし、**[ポリシー名]** フィールドに `AmazonSesSendingAccess` と入力して、**[ポリシーの作成]** をクリックします。

1. **[アクセス管理]** で、**[ユーザーグループ]**、**[グループの作成]** の順に選択します。

1. **[ユーザーグループ名]** フィールドに、`AWSSESSendingGroupDoNotRename` と入力します。

1. **[ユーザーをグループに追加]** テーブルから SMTP ユーザーを選択して、グループに追加します。

1. 以前に作成した `AmazonSesSendingAccess` ポリシーを **[許可ポリシーをアタッチ]** テーブルから選択してアタッチし、**[ユーザーグループを作成]** をクリックします。

   SES アクセス許可ポリシーを使用して IAM ユーザーグループを作成したら、残りのステップで説明されるとおり、SMTP ユーザーを現在のインラインポリシーからこのグループポリシーに移行できます。

1. **[アクセス管理]** で、**[ユーザー]** をクリックして、移行する SMTP ユーザーを選択します。

1. **[グループ]** タブをクリックして、**[ユーザーをグループに追加]** を選択します。

1. `AWSSESSendingGroupDoNotRename` グループを選択してから、**[ユーザーをグループに追加]** をクリックします。

1. **[許可]** タブを選択して、**[ポリシー名]** 列に `AmazonSesSendingAccess` が 2 行表示されており、1 つは*インライン*で、もう 1 つには **[次を経由してアタッチ]** 列に *`AWSSESSendingGroupDoNotRename` グループ*が表示されていることを確認します。

1. **[ポリシー名]** 列に `AmazonSesSendingAccess` が含まれ、**[次を経由してアタッチ]** 列に*インライン*が含まれている行のみを選択して、**[削除]** をクリックし、**[ポリシーを削除]** をクリックして確定します。

   **[次を経由してアタッチ]** 列に *`AWSSESSendingGroupDoNotRename` グループ*が含まれる行が残っているかを検証します。

1. **[タグ]** タブをクリックして、**[タグを管理]** をクリックします。

1. **[キー]** 列に「*InvokedBy*」が含まれ、**[値]** 列に「*SESConsole*」が含まれる行の横にある **[削除]** をクリックしてから、**[変更を保存]** をクリックします。

**重要**  
送信に影響が及ばないように、`AmazonSesSendingAccess` ポリシー (インラインポリシーまたはグループポリシー、またはその両方) は、SMTP ユーザーにアタッチされたままにしておく必要があります。インラインポリシーは、グループポリシーがユーザーにアタッチされた後にのみ削除します。

# Amazon SES SMTP エンドポイントへの接続
<a name="smtp-connect"></a>

Amazon SES SMTP インターフェイスを使用して E メールを送信するには、SMTP エンドポイントに接続します。Amazon SES SMTP エンドポイントの完全なリストについては、「*AWS 全般のリファレンス*」の「[Amazon Simple Email サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/ses.html)」を参照してください。

Amazon SES SMTP エンドポイントでは、すべての接続が Transport Layer Security（TLS）を使用して暗号化されている必要があります。(TLS は、以前のプロトコルの名前である「SSL」と呼ばれることが多いことに注意してください。) Amazon SES は、TLS で暗号化された接続を確立するために、STARTTLS および TLS ラッパーという 2 つのメカニズムをサポートしています。ソフトウェアが STARTTLS および TLS ラッパーをサポートしているかどうかは、ソフトウェアのドキュメントを参照してください。

Amazon Elastic Compute Cloud (Amazon EC2) では、デフォルトでポート 25 経由での E メールトラフィックを調整しています。EC2 から SMTP エンドポイントを介して E メールを送信する際のタイムアウトを回避するには、スロットルを削除するため、[E メール送信制限の削除要求](https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request)を送信します。または、別のポートを使用して E メールを送信するか、[Amazon VPC エンドポイント](send-email-set-up-vpc-endpoints.md)を使用することもできます。

SMTP 接続の問題については、「[SMTP に関する問題](troubleshoot-smtp.md)」を参照してください。

## STARTTLS
<a name="smtp-connect-starttls"></a>

STARTTLS とは、暗号化されていない接続を暗号化された接続にアップグレードする方法です。STARTTLS には、様々なプロトコルに対応したバージョンがあります。SMTP バージョンは、[RFC 3207](https://www.ietf.org/rfc/rfc3207.txt)で定義されています。

STARTTLS 接続を設定する場合、SMTP クライアントは、ポート 25、587、または 2587 で Amazon SES SMTP エンドポイントに接続し、EHLO コマンドを発行します。次に、サーバーから STARTTLS SMTP 拡張機能をサポートしているという通知が来るのを待ちます。通知を受けたクライアントは、STARTTLS コマンドを発行し、TLS ネゴシエーションを開始します。ネゴシエーションが完了すると、クライアントが暗号化された新しい接続で EHLO コマンドを発行し、SMTP セッションが正常に進行します。

## TLS ラッパー
<a name="smtp-connect-tlswrapper"></a>

TLS ラッパー（SMTPS またはハンドシェイクプロトコルとも呼ばれる）は、最初に暗号化されていない接続を確立するのではなく、最初から暗号化された接続を開始する方法です。TLS ラッパーを使用する場合、Amazon SES SMTP エンドポイントは TLS ネゴシエーションを実行しません。TLS を使用してエンドポイントに接続し、通信全体で TLS の使用を継続するのはクライアントの役割です。TLS ラッパーは古いプロトコルですが、数多くのクライアントが今もサポートしています。

TLS ラッパー接続を設定する場合、SMTP クライアントは、Amazon SES SMTP エンドポイントにポート 465 または 2465 で接続します。サーバーが自身の証明書を提示すると、クライアントが EHLO コマンドを発行し、SMTP セッションが正常に進行します。

# ソフトウェアパッケージを使用し、Amazon SES を介して E メールを送信します
<a name="send-email-smtp-software-package"></a>

SMTP を介した E メール送信に対応している市販とオープンソースのソフトウェアパッケージは多数あります。次に例を示します。
+ ブログプラットフォーム
+ RSS アグリゲータ
+ リスト管理ソフトウェア
+ ワークフローシステム

上記の SMTP 対応ソフトウェアは、Amazon SES SMTP インターフェイスを介して E メールを送信するように設定できます。個々のソフトウェアパッケージの SMTP 設定手順については、そのソフトウェアのドキュメントを参照ください。

次の手順は、一般的な問題追跡ソリューションである JIRA で Amazon SES 送信を設定する方法を示しています。この設定により、ソフトウェアの問題のステータスが変化したときに JIRA からユーザーに E メールで通知できるようになります。

**Amazon SES を介して E メールを送信するために、JIRA を設定するには**

1. ウェブブラウザーを使用し、管理者認証情報で JIRA にログインします。

1. ブラウザのウィンドウで、[**Administration**] を選択します。

1. **システム**メニューで、**メール**を選択します。

1. **Mail administration** ページで、**Mail Servers**を選択します。

1. **Configure new SMTP mail server** を選択します。

1. **Add SMTP Mail Server** フォームで、次のフィールドに入力します。

   1. **名前** - このサーバーの記述名。

   1. **From address** – E メールの送信元アドレス。それから送信する前に、Amazon SES でこの E メールアドレスを検証する必要があります。検証の詳細については、[Amazon SES の検証済みID](verify-addresses-and-domains.md)を参照ください。

   1. **Email prefix** – 送信前に、件名行に JIRA が付加する文字列。

   1. **Protocol** - **SMTP** を選択します。
**注記**  
この設定を使用して Amazon SES に接続できない場合は、**SECURE\$1SMTP** を試してください。

   1. **ホスト名** - Amazon SES SMTP エンドポイントのリストについては、[Amazon SES SMTP エンドポイントへの接続](smtp-connect.md)を参照ください。たとえば、米国西部 (オレゴン) 地域で Amazon SES エンドポイントを使用する場合、ホスト名は*email-smtp.us-west-2.amazonaws.com* です。

   1. **SMTP Port** - 25、587、2587 のいずれか (STARTTLS を使用して接続する場合)、または 465、2465 のいずれか (TLS ラッパーを使用して接続する場合)。

   1. **TLS** – このチェックボックスを選択します。

   1. **User Name** - SMTP の ユーザー名。

   1. **Password** - SMTP パスワード。

   以下の画像に TLS ラッパーの設定が表示できます。  
![\[JIRA の SMTP E メール設定\]](http://docs.aws.amazon.com/ja_jp/ses/latest/dg/images/SMTP_jira.png)

1. **接続のテスト**を選択します。Amazon SES を介して JIRA が送信したテスト E メールが正しく到着すれば、設定は完了です。

# プログラミングで Amazon SES の SMTP インターフェイスを介して E メールを送信する
<a name="send-using-smtp-programmatically"></a>

Amazon SES の SMTP インターフェイスで E メールを送信するには、SMTP 対応のプログラミング言語、E メールサーバー、またはアプリケーションを使用できます。開始する前に、[Amazon Simple Email Service を設定する](setting-up.md)のタスクを完了します。また、以下の詳細を取得する必要があります。
+ Amazon SES SMTP エンドポイントに接続するための Amazon SES SMTP 認証情報。Amazon SES SMTP 認証情報を取得するには、「[Amazon SES SMTP 認証情報を取得](smtp-credentials.md)」を参照してください。
**重要**  
SMTP 認証情報は AWS 、認証情報とは異なります。認証情報の詳細については、[Amazon SES 認証情報の種類](send-email-concepts-credentials.md)を参照ください。
+ SMTP エンドポイントアドレス。Amazon SES における SMTP エンドポイントのリストについては、[Amazon SES SMTP エンドポイントへの接続](smtp-connect.md) を参照ください。
+ Amazon SES SMTP インターフェイ接続端子番号。これは接続方法によって異なります。詳細については、[Amazon SES SMTP エンドポイントへの接続](smtp-connect.md)を参照ください。

## コードの例
<a name="send-email-smtp-code-examples"></a>

SMTP 対応のプログラミング言語を使用して、Amazon SES の SMTP インターフェイスにアクセスできます。SMTP 認証情報と Amazon SES SMTP ホスト名およびポート番号を使用して、プログラミング言語の 一般的な SMTP 機能によって E メールを送信します。

Amazon Elastic Compute Cloud (Amazon EC2) では、デフォルトでポート 25 経由での E メールトラフィックを制限しています。Amazon EC2 から SMTP エンドポイントを介して E メールを送信する際のタイムアウトを回避するには、これらの制限を解除するようリクエストすることができます。詳細については、[Amazon EC2インスタンスまたは AWS Lambda 関数からポート 25 の制限を削除するにはどうすればよいですか？」を参照してください。](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/) AWS ナレッジセンターの 。

Java および PHP のこのセクションのコード例で、この問題を回避するためにポート 587 を使用します。

**注記**  
このチュートリアルでは、受信を確認できるように自分宛に E メールを送信します。さらに詳しい実験や負荷テストには、Amazon SES メールボックスシミュレーターを使用してください。メールボックスシミュレーターに送信される E メールは、送信クォータに加算されず、バウンス率や苦情率の計算にも含まれません。詳細については、[手動でメールボックスシミュレーターを使用する](send-an-email-from-console.md#send-email-simulator)を参照ください。

**プログラミング言語を選択して、その言語の例を表示します。**

**警告**  
Amazon SES では、静的認証情報の使用はお勧めしません。ソースコードからハードコードされた認証情報を削除してセキュリティ体制を改善する方法については、「[AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)」を参照してください。このチュートリアルは、本番環境以外の環境で Amazon SES SMTP インターフェイスをテストする目的でのみ提供されています。

------
#### [ Java ]

この例では、[Eclipse IDE](http://www.eclipse.org/)と[JavaMail API](https://github.com/javaee/javamail/releases)を使用して、SMTP インターフェイスで Amazon SES から E メールを送信します。

以下の手順を実行する前に、[Amazon Simple Email Service を設定する](setting-up.md)に記載されている作業を完了します。

**Java で Amazon SES SMTP インターフェイスを使用して E メールを送信するには**

1. ウェブブラウザで、[JavaMail GitHub ページ](https://github.com/javaee/javamail/releases)に移動します。**[Assets]** の下で、**[javax.mail.jar]** を選択して、JavaMail の最新バージョンをダウンロードします。
**重要**  
このチュートリアルには、JavaMail バージョン 1.5 以降が必要です。これらの手順は、JavaMail バージョン 1.6.1 を使用してテスト済みです。

1. ウェブブラウザで [Jakarta Activation GitHub ページ](https://github.com/eclipse-ee4j/jaf/releases)に移動して、[[JavaBeans Activation Framework 1.2.1 Final Release]](https://github.com/eclipse-ee4j/jaf/releases/tag/1.2.1) の下で、**jakarta.activation.jar** をダウンロードします。

1. 次のステップを実行し、Eclipse でプロジェクトを作成します。

   1. Eclipse を起動します。

   1. Eclipse で、**ファイル**を選択し、**新規**、**Java Project** の順に選択します。

   1. **Create a Java Project** ダイアログボックスで、プロジェクト名を入力し、**次へ**を選択します。

   1. **Java Settings** ダイアログボックスの**ライブラリ**タブを選択します。

   1. **[Classpath]** を選択し、**[外部 JAR の追加]** ボタンを使用して、**javax.mail.jar** と **jakarta.activation.jar** の 2 つの外部 jar ファイルを追加します。

   1. **Add External JARs** を選択します。

   1. JavaMail をダウンロードした先のフォルダを参照します。`javax.mail.jar` ファイルを選択し、**開く**を選択します。

   1. **Java Settings** ダイアログボックスの**終了**を選択します。

1. Eclipse で、**Package Explorer**ウィンドウのプロジェクトを展開します。

1. プロジェクトの下の **src** ディレクトリを右クリックし、**新規**、**クラス**の順に選択します。

1. **New Java Class** ダイアログボックスの**名前**フィールドに `AmazonSESSample` と入力し、**終了**を選択します。

1. **AmazonSESSample.java** のコンテンツ全体を以下のコードに置き換えます。

   ```
     1. import java.util.Properties;
     2. 
     3. import javax.mail.Message;
     4. import javax.mail.Session;
     5. import javax.mail.Transport;
     6. import javax.mail.internet.InternetAddress;
     7. import javax.mail.internet.MimeMessage;
     8. 
     9. public class AmazonSESSample {
    10. 
    11.     // Replace sender@example.com with your "From" address.
    12.     // This address must be verified.
    13.     static final String FROM = "sender@example.com";
    14.     static final String FROMNAME = "Sender Name";
    15.     
    16.     // Replace recipient@example.com with a "To" address. If your account 
    17.     // is still in the sandbox, this address must be verified.
    18.     static final String TO = "recipient@example.com";
    19.     
    20.     // Replace smtp_username with your Amazon SES SMTP user name.
    21.     static final String SMTP_USERNAME = "smtp_username";
    22.       
    23.     // The name of the Configuration Set to use for this message.
    24.     // If you comment out or remove this variable, you will also need to
    25.     // comment out or remove the header below.
    26.     static final String CONFIGSET = "ConfigSet";
    27.     
    28.     // Amazon SES SMTP host name. This example uses the US West (Oregon) region.
    29.     // See https://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html#region-endpoints
    30.     // for more information.
    31.     static final String HOST = "email-smtp.us-west-2.amazonaws.com";
    32.     
    33.     // The port you will connect to on the Amazon SES SMTP endpoint. 
    34.     static final int PORT = 587;
    35.     
    36.     static final String SUBJECT = "Amazon SES test (SMTP interface accessed using Java)";
    37.     
    38.     static final String BODY = String.join(
    39.             System.getProperty("line.separator"),
    40.             "<h1>Amazon SES SMTP Email Test</h1>",
    41.             "<p>This email was sent with Amazon SES using the ", 
    42.             "<a href='https://github.com/javaee/javamail'>Javamail Package</a>",
    43.             " for <a href='https://www.java.com'>Java</a>."
    44.         );
    45. 
    46.     public static void main(String[] args) throws Exception {
    47. 
    48.         // Create a Properties object to contain connection configuration information.
    49.         Properties props = System.getProperties();
    50.         props.put("mail.transport.protocol", "smtp");
    51.         props.put("mail.smtp.port", PORT); 
    52.         props.put("mail.smtp.starttls.enable", "true");
    53.         props.put("mail.smtp.auth", "true");
    54. 
    55.         // Create a Session object to represent a mail session with the specified properties. 
    56.         Session session = Session.getDefaultInstance(props);
    57. 
    58.         // Create a message with the specified information. 
    59.         MimeMessage msg = new MimeMessage(session);
    60.         msg.setFrom(new InternetAddress(FROM,FROMNAME));
    61.         msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));
    62.         msg.setSubject(SUBJECT);
    63.         msg.setContent(BODY,"text/html");
    64.         
    65.         // Add a configuration set header. Comment or delete the 
    66.         // next line if you are not using a configuration set
    67.         msg.setHeader("X-SES-CONFIGURATION-SET", CONFIGSET);
    68.             
    69.         // Create a transport.
    70.         Transport transport = session.getTransport();
    71. 
    72.         // Get the password 
    73.         String SMTP_PASSWORD = fetchSMTPPasswordFromSecureStorage();
    74.                     
    75.         // Send the message.
    76.         try
    77.         {
    78.             System.out.println("Sending...");
    79.             
    80.             // Connect to Amazon SES using the SMTP username and password you specified above.
    81.             transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);
    82.             
    83.             // Send the email.
    84.             transport.sendMessage(msg, msg.getAllRecipients());
    85.             System.out.println("Email sent!");
    86.         }
    87.         catch (Exception ex) {
    88.             System.out.println("The email was not sent.");
    89.             System.out.println("Error message: " + ex.getMessage());
    90.         }
    91.         finally
    92.         {
    93.             // Close and terminate the connection.
    94.             transport.close();
    95.         }
    96.     }
    97. 
    98.     static String fetchSMTPPasswordFromSecureStorage() {
    99.         /* IMPLEMENT THIS METHOD */
   100.         // For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
   101.     }
   102. }
   ```

1. **AmazonSESSample.java** で、以下のメールアドレスを実際の値に置き換えます。
**重要**  
E メールアドレスでは、大文字と小文字は区別されます。検証したアドレスと完全に一致することを確認してください。
   + *sender@example.com* – 「送信元」メールアドレスに置き換えます。このアドレスを確認してから、プログラムを実行してください。詳細については、「[Amazon SES の検証済みID](verify-addresses-and-domains.md)」を参照してください。
   + *recipient@example.com* – 「送信先」メールアドレスに置き換えます。アカウントがサンドボックスにまだある場合は、このアドレスを使用前に確認する必要があります。詳細については、「[本稼働アクセスのリクエスト (Amazon SES サンドボックスからの移行)](request-production-access.md)」を参照してください。

1. **AmazonSESSample.java** で、以下を実際の値に置き換えます。
   + *smtp\$1username* – SMTP ユーザー名の認証情報に置き換えます。SMTP ユーザー名の認証情報は 20 文字の文字と数字の並びであり、意味のある名前ではありません。
   + *smtp\$1password* – パスワードを取得するために ``fetchSMTPPasswordFromSecureStorage`` を実装します。

1. (オプション) *email-smtp.us-west-2.amazonaws.com* 以外の AWS リージョン Amazon SES SMTP エンドポイントを使用する場合は、`HOST` 変数の値を実際に使用するエンドポイントに変更します。Amazon SES を使用できるリージョンのリストについては、「*AWS 全般のリファレンス*」の「[Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)」を参照してください。

1. (オプション) この E メール送信時に設定セットを使用する場合は、*ConfigSet* 変数の値をその設定セット名に変更します。設定セットの詳細については、[Amazon SES の設定セットの使用](using-configuration-sets.md)を参照ください。

1. **AmazonSESSample.java** を保存します。

1. プロジェクトを構築するため、**プロジェクト**、**プロジェクトの構築**の順に選択します。(このオプションが無効の場合、自動構築が有効になっている可能性があります。)

1. プログラムを開始して E メールを送信するため、**実行**を選択した後、もう一度**実行**を選択します。

1. 出力の確認 E メールの送信が正常に完了すると、コンソールに「*確認の E メールが送信されました*」と表示されます。送信が失敗した場合は、エラーメッセージが表示されます。

1. 受信者のアドレスの E メールクライアントにサインインします。送信した E メールメッセージを確認します。

------
#### [ PHP  ]

この例では PHPMailer クラスを使用し、SMTP インターフェイスで Amazon SES を介して E メールを送信します。

以下の手順を実行する前に、[Amazon Simple Email Service を設定する](setting-up.md)のタスクを完了する必要があります。Amazon SES のセットアップに加えて、PHP で E メールを送信するには、次の前提条件を満たしている必要があります。

**前提条件:**
+ **PHP のインストール** – PHP は、[http://php.net/downloads.php](https://php.net/downloads.php) で入手できます。PHP をインストールした後、コマンドプロンプトから PHP を実行できるように環境変数に PHP のパスを追加します。
+ **Composer 依存関係管理システムのインストール** – Composer 依存関係管理システムのインストール後、PHPMailer クラスと依存関係をダウンロードしてインストールできます。Composer をインストールするには、[https://getcomposer.org/download](https://getcomposer.org/download) のインストール手順を参照してください。
+ **PHPMailer クラスのインストール** – Composer のインストール後、以下のコマンドを実行して PHPMailer をインストールします。

  ```
  path/to/composer require phpmailer/phpmailer
  ```

  前のコマンドで、*path/to/*を、Composer をインストールしたパスに置き換えます。

**PHP で Amazon SES の SMTP インターフェイスを使用して E メールを送信するには**

1. **amazon-ses-smtp-sample.php** という名前のファイルを作成します。テキストエディタでファイルを開き、次のコードを貼り付けます。

   ```
    1. <?php
    2. 
    3. // Import PHPMailer classes into the global namespace
    4. // These must be at the top of your script, not inside a function
    5. use PHPMailer\PHPMailer\PHPMailer;
    6. use PHPMailer\PHPMailer\Exception;
    7. 
    8. // If necessary, modify the path in the require statement below to refer to the
    9. // location of your Composer autoload.php file.
   10. require 'vendor/autoload.php';
   11. 
   12. // Replace sender@example.com with your "From" address.
   13. // This address must be verified with Amazon SES.
   14. $sender = 'sender@example.com';
   15. $senderName = 'Sender Name';
   16. 
   17. // Replace recipient@example.com with a "To" address. If your account
   18. // is still in the sandbox, this address must be verified.
   19. $recipient = 'recipient@example.com';
   20. 
   21. // Replace smtp_username with your Amazon SES SMTP user name.
   22. $usernameSmtp = 'smtp_username';
   23. 
   24. // Specify a configuration set. If you do not want to use a configuration
   25. // set, comment or remove the next line.
   26. $configurationSet = 'ConfigSet';
   27. 
   28. // If you're using Amazon SES in a region other than US West (Oregon),
   29. // replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP
   30. // endpoint in the appropriate region.
   31. $host = 'email-smtp.us-west-2.amazonaws.com';
   32. $port = 587;
   33. 
   34. // The subject line of the email
   35. $subject = 'Amazon SES test (SMTP interface accessed using PHP)';
   36. 
   37. // The plain-text body of the email
   38. $bodyText =  "Email Test\r\nThis email was sent through the
   39.     Amazon SES SMTP interface using the PHPMailer class.";
   40. 
   41. // The HTML-formatted body of the email
   42. $bodyHtml = '<h1>Email Test</h1>
   43.     <p>This email was sent through the
   44.     <a href="https://aws.amazon.com/ses">Amazon SES</a> SMTP
   45.     interface using the <a href="https://github.com/PHPMailer/PHPMailer">
   46.     PHPMailer</a> class.</p>';
   47. 
   48. $mail = new PHPMailer(true);
   49. 
   50. try {
   51.     // Specify the SMTP settings.
   52.     $mail->isSMTP();
   53.     $mail->setFrom($sender, $senderName);
   54.     $mail->Username   = $usernameSmtp;
   55.     $mail->Password   = fetchSMTPPasswordFromSecureStorage();
   56.     $mail->Host       = $host;
   57.     $mail->Port       = $port;
   58.     $mail->SMTPAuth   = true;
   59.     $mail->SMTPSecure = 'tls';
   60.     $mail->addCustomHeader('X-SES-CONFIGURATION-SET', $configurationSet);
   61. 
   62.     // Specify the message recipients.
   63.     $mail->addAddress($recipient);
   64.     // You can also add CC, BCC, and additional To recipients here.
   65. 
   66.     // Specify the content of the message.
   67.     $mail->isHTML(true);
   68.     $mail->Subject    = $subject;
   69.     $mail->Body       = $bodyHtml;
   70.     $mail->AltBody    = $bodyText;
   71.     $mail->Send();
   72.     echo "Email sent!" , PHP_EOL;
   73. } catch (phpmailerException $e) {
   74.     echo "An error occurred. {$e->errorMessage()}", PHP_EOL; //Catch errors from PHPMailer.
   75. } catch (Exception $e) {
   76.     echo "Email not sent. {$mail->ErrorInfo}", PHP_EOL; //Catch errors from Amazon SES.
   77. }
   78. function fetchSMTPPasswordFromSecureStorage() {
   79. /* IMPLEMENT THIS METHOD */
   80. // For example, you might fetch it from a secure location or AWS Secrets Manager: https://aws.amazon.com/secrets-manager/
   81. }
   82. 
   83. ?>
   ```

1. **amazon-ses-smtp-sample.php** で、以下を実際の値に置き換えます。
   + *sender@example.com* – Amazon SES で検証した E メールアドレスに置き換えます。詳細については、「[検証済みID](verify-addresses-and-domains.md)」を参照してください。Amazon SES では、E メールアドレスの大文字と小文字が区別されます。検証したアドレスと完全に一致するアドレスを入力してください。
   + *recipient@example.com* – 送信先アドレスに置き換えます。アカウントがサンドボックスにまだある場合は、このアドレスを使用前に確認する必要があります。詳細については、「[本稼働アクセスのリクエスト (Amazon SES サンドボックスからの移行)](request-production-access.md)」を参照してください。検証したアドレスと完全に一致するアドレスを入力してください。
   + *smtp\$1username* – SMTP ユーザー名の認証情報に置き換えます。これは、Amazon SES コンソールの [[SMTP 設定]](https://console.aws.amazon.com/ses/home?#smtp-settings:) ページで取得したものです。これは AWS アクセスキー ID とは**異なり**ます。SMTP ユーザー名の認証情報は 20 文字の文字と数字の並びであり、意味のある名前ではありません。
   + *smtp\$1password* – パスワードを取得するために ``fetchSMTPPasswordFromSecureStorage`` を実装します。
   + (オプション) *ConfigSet* – この E メール送信時に設定セットを使用する場合は、この値を設定セット名に置き換えます。設定セットの詳細については、[Amazon SES の設定セットの使用](using-configuration-sets.md)を参照ください。
   + (オプション) *email-smtp.us-west-2.amazonaws.com* – 米国西部 (オレゴン) 以外のリージョンの Amazon SES SMTP エンドポイントを使用する場合は、この値を使用するリージョンの Amazon SES SMTP エンドポイントに置き換えます。 AWS リージョン Amazon SES が利用可能な の SMTP エンドポイント URLs[「Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)」を参照してください*AWS 全般のリファレンス*。

1. **amazon-ses-smtp-sample.php** を保存します。

1. このプログラムを実行するには、**amazon-ses-smtp-sample.php** と同じディレクトリでコマンドプロンプトを開いて、**php amazon-ses-smtp-sample.php** と入力します。

1. 出力の確認 E メールの送信が正常に完了すると、コンソールに「*確認の E メールが送信されました*」と表示されます。送信が失敗した場合は、エラーメッセージが表示されます。

1. 受信者のアドレスの E メールクライアントにサインインします。送信したメッセージを確認します。

------

# Amazon SES を既存の E メールサーバーと統合します
<a name="send-email-smtp-existing-server"></a>

現在、E メールサーバーをお客様が管理している場合には、Amazon SES SMTP エンドポイントを使用して、外部へのメールをすべて Amazon SES に送信できます。既存の E メールクライアントや E メールアプリケーションに変更を加える必要はありません。Amazon SES への変更は、これらに対して透過的です。

メール転送エージェント（MTA）の中には、SMTP リレーを介した E メールの送信をサポートしているものもあります。このセクションでは、一般的ないくつかの MTA について、Amazon SES SMTP インターフェイスを使用して E メールを送信するための設定方法について、一般的なガイダンスを提供します。

Amazon SES SMTP エンドポイントでは、すべての接続が Transport Layer Security（TLS）を使用して暗号化されている必要があります。

**Topics**
+ [Amazon SES と Postfix の統合](postfix.md)
+ [Amazon SES と Sendmail の統合](send-email-sendmail.md)
+ [Amazon SES を Microsoft Windows Server IIS SMTP に統合する](send-email-windows-server.md)

# Amazon SES と Postfix の統合
<a name="postfix"></a>

Postfix は、広く使用されている Sendmail Message Transfer Agent (MTA) に代わる手段です。Postfix の詳細については、[http://www.postfix.org](http://www.postfix.org) を参照ください。このトピックの手順では、Linux、macOS、または Unix で動作します。

**注記**  
Postfix はサードパーティー製アプリケーションであり、Amazon Web Services によって開発またはサポートされていません。このセクションの手順は情報提供のみを目的としており、予告なく変更される場合があります。

## 前提条件
<a name="send-email-postfix-prereqs"></a>

このセクションの手順を完了する前に、以下のタスクを実行する必要があります。
+ システムに Sendmail アプリケーションがインストール済みである場合、これをアンインストールします。このステップを完了する手順は使用するオペレーティングシステムによって異なります。
**重要**  
*sendmail* への参照の後で Postfix コマンド `sendmail` を参照し、Sendmail アプリケーションと混同しないようにします。
+ Postfix をインストールします。このステップを完了する手順は使用するオペレーティングシステムによって異なります。
+ SASL 認証パッケージをインストールします。このステップを完了する手順は使用するオペレーティングシステムによって異なります。たとえば、RedHat ベースのシステムを使用している場合は、`cyrus-sasl-plain` パッケージをインストールする必要があります。Debian または Ubuntu ベースのシステムを使用している場合は、`libsasl2-modules` パッケージをインストールする必要があります。
+ E メールの送信に使用する E メールアドレスまたはドメインを確認します。詳細については、[Eメールアドレス ID の作成](creating-identities.md#verify-email-addresses-procedure)を参照ください。
+ アカウントがまだサンドボックスにある場合、検証済み E メールアドレスにのみ E メールを送信できます。詳細については、[本稼働アクセスのリクエスト (Amazon SES サンドボックスからの移行)](request-production-access.md)を参照ください。

## Postfix の設定
<a name="send-email-postfix"></a>

Postfix を使用して Amazon SES 経由で E メールを送信するようにメールサーバーを設定するには、次の手順を完了します。

**Postfix を設定するには**

1. コマンドラインから、以下のコマンドを入力します。

   ```
   sudo postconf -e "relayhost = [email-smtp.us-west-2.amazonaws.com]:587" \
   "smtp_sasl_auth_enable = yes" \
   "smtp_sasl_security_options = noanonymous" \
   "smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd" \
   "smtp_use_tls = yes" \
   "smtp_tls_security_level = secure" \
   "smtp_tls_note_starttls_offer = yes"
   ```
**注記**  
米国西部 (オレゴン) 以外の AWS リージョンで Amazon SES を使用する場合は、前述のコマンドの *email-smtp.us-west-2.amazonaws.com* を適切なリージョンの SMTP エンドポイントに置き換えます。詳細については、「[地域と Amazon SES](regions.md)」を参照してください。

1. テキストエディタで、`/etc/postfix/master.cf` ファイルを開きます。次のエントリを検索します。

   ```
   -o smtp_fallback_relay=
   ```

   このエントリが見つかった場合は、行の先頭に `#` (ハッシュ) 文字を配置してコメントアウトします。保存してファイルを閉じます。

   それ以外で、このエントリが存在しない場合、次の手順に進みます。

1. テキストエディタで、`/etc/postfix/sasl_passwd` ファイルを開きます。このファイルが存在していない場合は、作成します。

1. `/etc/postfix/sasl_passwd` に次の行を追加します。

   ```
   [email-smtp.us-west-2.amazonaws.com]:587 SMTPUSERNAME:SMTPPASSWORD
   ```
**注記**  
*SMTPUSERNAME* と *SMTPPASSWORD* を SMTP サインイン認証情報に置き換えてください。SMTP サインイン認証情報は、 AWS アクセスキー ID やシークレットアクセスキーと同じではありません。認証情報の詳細については、[Amazon SES SMTP 認証情報を取得](smtp-credentials.md)を参照ください。  
米国西部 (オレゴン) 以外の AWS リージョンで Amazon SES を使用する場合は、前述の例の *email-smtp.us-west-2.amazonaws.com* を適切なリージョンの SMTP エンドポイントに置き換えます。詳細については、「[地域と Amazon SES](regions.md)」を参照してください。

   `sasl_passwd` を保存して閉じます。

1. コマンドプロンプトで次のコマンドを入力し、SMTP 認証情報を含む hashmap データベースファイルを作成します。

   ```
   sudo postmap hash:/etc/postfix/sasl_passwd
   ```

1. (オプション) 前の手順で作成した`/etc/postfix/sasl_passwd` および `/etc/postfix/sasl_passwd.db` ファイルは暗号化されていません。これらのファイルには SMTP 認証情報が含まれているため、ファイルへのアクセスを制限するために、ファイルの所有権とアクセス許可を変更することをお勧めします。これらのファイルへのアクセスを制限するには。

   1. コマンドプロンプトで次のコマンドを入力して、ファイルの所有権を変更します。

      ```
      sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
      ```

   1. コマンドプロンプトで次のコマンドを入力してファイルのアクセス許可を変更して、ルートユーザーのみがこれらのファイルで読み込みや書き込みを実行できるようにします。

      ```
      sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
      ```

1. Postfix が CA 証明書の場所を認識できるようにします（Amazon SES サーバー証明書を検証するために必要です）。このステップで使用するコマンドは、オペレーティングシステムによって異なります。
   + Amazon Linux、Red Hat Enterprise Linux、あるいは関連するディストリビューションを使用している場合には、次のコマンドを入力します。

     ```
     sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
     ```
   + Ubuntu あるいは関連するディストリビューションを使用している場合には、次のコマンドを入力します。

     ```
     sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
     ```
   + macOS を使用する場合、システムのキーチェーンで証明書を生成できます。証明書を生成するには、コマンドラインで次のコマンドを入力します。

     ```
     sudo security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain | sudo tee /etc/ssl/certs/ca-bundle.crt > /dev/null
     ```

     証明書を生成したら、次のコマンドを入力します。

     ```
     sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
     ```

1. 次のコマンドを入力して Postfix サーバーを起動します (サーバーがすでに起動している場合は、設定を再ロードしてください)。

   ```
   sudo postfix start; sudo postfix reload
   ```

1. コマンドラインで以下のように入力し、各行の最後で Enter キーを押して、テスト E メールを送信します。*sender@example.com* を送信元 E メールアドレスに置き換えます。送信元アドレスの Amazon SES での使用を確認する必要があります。*recipient@example.com* を送信先アドレスに置き換えます。アカウントがサンドボックスにまだある場合は、受信者アドレスも確認する必要があります。最後に、メッセージの最後の行には 1 つのピリオドが (.) 含まれていることが必要です (他に何も含まない)。

   ```
   sendmail -f sender@example.com recipient@example.com
   From: Sender Name <sender@example.com>
   Subject: Amazon SES Test                
   This message was sent using Amazon SES.                
   .
   ```

1. 受信者のアドレスに関連付けられているメールボックスを確認します。E メールが届かない場合は、迷惑メールフォルダを確認します。それでも E メールが見つからない場合には、E メールを送信するために使用したシステムのメールログで詳細を確認します (通常は、`/var/log/maillog` にあります)。

## 高度な使用例
<a name="send-email-postfix-advanced"></a>

この例は、[設定セット](using-configuration-sets.md)を使用する E メール、および MIME マルチパートエンコードを使用してプレーンテキストと HTML バージョンのメッセージの両方を添付ファイルと共に送る E メールを送信する方法を示します。また、それにはクリックイベントの分類に利用できる[リンクタグ](faqs-metrics.md#sending-metric-faqs-clicks-q5)が含まれています。E メールのコンテンツは外部ファイルで指定されるため、Postfix セッションでは手動でコマンドを入力する必要はありません。

**Postfix を使用してマルチパートの MIME E メールを送信するには**

1. テキストエディタで、`mime-email.txt` という名前の新規ファイルを作成します。

1. テキストファイルで次のコンテンツを貼り付け、赤の値を自分のアカウントの適切な値に置き換えます。

   ```
   X-SES-CONFIGURATION-SET: ConfigSet
   From:Sender Name <sender@example.com>
   Subject:Amazon SES Test
   MIME-Version: 1.0
   Content-Type: multipart/mixed; boundary="YWVhZDFlY2QzMGQ2N2U0YTZmODU"
   
   --YWVhZDFlY2QzMGQ2N2U0YTZmODU
   Content-Type: multipart/alternative; boundary="3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ"
   
   --3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ
   Content-Type: text/plain; charset=UTF-8
   Content-Transfer-Encoding: quoted-printable
   
   Amazon SES Test
   
   This message was sent from Amazon SES using the SMTP interface.
   
   For more information, see:
   http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-smtp.html
   
   --3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ
   Content-Type: text/html; charset=UTF-8
   Content-Transfer-Encoding: quoted-printable
   
   <html>
     <head>
   </head>
     <body>
       <h1>Amazon SES Test</h1>
         <p>This message was sent from Amazon SES using the SMTP interface.</p>
         <p>For more information, see
         <a ses:tags="samplekey0:samplevalue0;samplekey1:samplevalue1;" 
         href="http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-smtp.html">
         Using the Amazon SES SMTP Interface to Send Email</a> in the <em>Amazon SES
         Developer Guide</em>.</p>
     </body>
   </html>
   --3NjM0N2QwMTE4MWQ0ZTg2NTYxZQ--
   --YWVhZDFlY2QzMGQ2N2U0YTZmODU
   Content-Type: application/octet-stream
   MIME-Version: 1.0
   Content-Transfer-Encoding: base64
   Content-Disposition: attachment; filename="customers.txt"
   
   SUQsRmlyc3ROYW1lLExhc3ROYW1lLENvdW50cnkKMzQ4LEpvaG4sU3RpbGVzLENh
   bmFkYQo5MjM4OSxKaWUsTGl1LENoaW5hCjczNCxTaGlybGV5LFJvZHJpZ3VleixV
   bml0ZWQgU3RhdGVzCjI4OTMsQW5heWEsSXllbmdhcixJbmRpYQ==
   --YWVhZDFlY2QzMGQ2N2U0YTZmODU--
   ```

   保存してファイルを閉じます。

1. コマンドラインから、以下のコマンドを入力します。*sender@example.com* をユーザーの E メールアドレスに、*recipient@example.com* を受信者の E メールアドレスに置き換えます。

   ```
   sendmail -f sender@example.com recipient@example.com < mime-email.txt
   ```

   コマンドが正常に実行された場合、何の出力もなく終了します。

1. E メールの受信箱を確認します。メッセージが配信されなかった場合は、システムのメールログを確認します。

# Amazon SES と Sendmail の統合
<a name="send-email-sendmail"></a>

Sendmail は 1980 年代の初めにリリースされ、それ以降、継続的に改善されてきました。これは、大規模なユーザーコミュニティを持つ柔軟で設定可能な Message Transfer Agent (MTA) です。Sendmail は 2013 年に Proofpoint により買収されましたが、Proofpoint は Sendmail のオープンソースバージョンの提供を続けています。[Sendmail の open source バージョン](https://www.proofpoint.com/us/open-source-email-solution)は、Proofpoint のウェブサイトからダウンロードするか、ほとんどの Linux ディストリビューションのパッケージマネージャを経由してダウンロードできます。

このセクションの手順は、Amazon SES を介して E メールを送信するよう Sendmail を設定する方法を示しています。この手順は Ubuntu 18.04.2 LTS を実行しているサーバーでテストされています。

**注記**  
Sendmail はサードパーティーのアプリケーションであり、Amazon Web Services によって開発またはサポートされていません。このセクションの手順は情報提供のみを目的としており、予告なく変更される場合があります。

## 前提条件
<a name="send-email-sendmail-prerequisites"></a>

このセクションの手順を完了する前に、以下の手順を完了する必要があります。
+ Sendmail パッケージをサーバーにインストールします。
**注記**  
使用しているオペレーティングシステムのディストリビューションに応じて、`sendmail-cf`、`m4`、および `cyrus-sasl-plain` のパッケージのインストールが必要になる場合があります。
+ 差出人アドレスとして使用する ID を確認します。詳細については、「[Eメールアドレス ID の作成](creating-identities.md#verify-email-addresses-procedure)」を参照してください。

  アカウントが Amazon SES サンドボックスにある場合は、E メールの送信先のアドレスも検証する必要があります。詳細については、「[本稼働アクセスのリクエスト (Amazon SES サンドボックスからの移行)](request-production-access.md)」を参照してください。

Amazon SES を使用して Amazon EC2 インスタンスから E メールを送信する場合は、次の手順も実行する必要があります。
+ 受信する E メールプロバイダーが E メールを受信するように、Elastic IP アドレスを Amazon EC2 インスタンスに割り当てる必要があります。詳細については、「*Amazon EC2 ユーザーガイド*」の「[Amazon EC2 Elastic IP アドレス](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)」を参照してください。
+ Amazon Elastic Compute Cloud (Amazon EC2) では、デフォルトでポート 25 経由での E メールトラフィックを制限しています。Amazon EC2 から SMTP エンドポイントを介して E メールを送信する際のタイムアウトを回避するには、これらの制限を解除するようリクエストすることができます。詳細については、[Amazon EC2 インスタンスまたは AWS Lambda 関数からポート 25 の制限を削除するにはどうすればよいですか？」を参照してください。](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/) AWS ナレッジセンターの 。

  または、このセクションの手順を変更して、ポート 25 ではなく、ポート 587 を使用することもできます。

## Sendmail を設定する
<a name="send-email-sendmail-procedure"></a>

このセクションの手順に従って、Amazon SES を使用して E メールを送信するように Sendmail を設定します。

**重要**  
このセクションの手順では、米国西部 (オレゴン) で Amazon SES を使用することを前提としています AWS リージョン。別の地域を使用する場合は、この手順の *email-smtp.us-west-2.amazonaws.com* のすべてのインスタンスをご希望地域の SMTP エンドポイントに置き換えてください。Amazon SES が使用可能な AWS リージョン の SMTP エンドポイント URL のリストについては、「*AWS 全般のリファレンス*」の「[Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)」を参照してください。

**Sendmail を設定するには**

1. ファイルエディタで、ファイル `/etc/mail/authinfo` を開きます。このファイルが存在しない場合は、作成します。

   次の行を */etc/mail/authinfo* に追加します。

   ```
   AuthInfo:email-smtp.us-west-2.amazonaws.com "U:root" "I:smtpUsername" "P:smtpPassword" "M:PLAIN"
   ```

   上の例に、以下の変更を加えます。
   + *email-smtp.us-west-2.amazonaws.com*を、使用する Amazon SES SMTP エンドポイントに置き換えます。
   + *smtpUsername* を Amazon SES SMTP ユーザー名に置き換えます。
   + *smtpPassword*を Amazon SES SMTP パスワードに置き換えます。
**注記**  
SMTP サインイン認証情報は、 AWS アクセスキー ID およびシークレットアクセスキーとは異なります。SMTP サインイン認証情報を取得する方法の詳細については、「[Amazon SES SMTP 認証情報を取得](smtp-credentials.md)」を参照してください。

   終了したら、`authinfo`を保存します。

1. コマンドラインで、以下のコマンドを入力して`/etc/mail/authinfo.db` ファイルを生成します。

   ```
   sudo sh -c 'makemap hash /etc/mail/authinfo.db < /etc/mail/authinfo'
   ```

1. コマンドラインで、以下のコマンドを入力して Amazon SES SMTP エンドポイントに中継するためのサポートを追加します。

   ```
   sudo sh -c 'echo "Connect:email-smtp.us-west-2.amazonaws.com RELAY" >> /etc/mail/access'
   ```

   上のコマンドで、*email-smtp.us-west-2.amazonaws.com* を、使用する Amazon SES SMTP エンドポイントのアドレスに置き換えます。

1. コマンドラインで、次のコマンドを入力して */etc/mail/access.db* を再生成します。

   ```
   sudo sh -c 'makemap hash /etc/mail/access.db < /etc/mail/access'
   ```

1. コマンドラインで、次のコマンドを入力して `sendmail.cf` ファイルと `sendmail.mc` ファイルのバックアップを作成します。

   ```
   sudo sh -c 'cp /etc/mail/sendmail.cf /etc/mail/sendmail_cf.backup && cp /etc/mail/sendmail.mc /etc/mail/sendmail_mc.backup'
   ```

1. 以下の行を、*/etc/mail/sendmail.mc* ファイルのすべての `MAILER()` 定義の前に追加します。

   ```
   define(`SMART_HOST', `email-smtp.us-west-2.amazonaws.com')dnl
   define(`RELAY_MAILER_ARGS', `TCP $h 25')dnl
   define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl
   FEATURE(`authinfo', `hash -o /etc/mail/authinfo.db')dnl
   MASQUERADE_AS(`example.com')dnl
   FEATURE(masquerade_envelope)dnl
   FEATURE(masquerade_entire_domain)dnl
   ```

   上のテキストで、次の操作を行います。
   + *email-smtp.us-west-2.amazonaws.com*を、使用する Amazon SES SMTP エンドポイントに置き換えます。
   + *example.com* を、E メールの送信に使用するドメインに置き換えます。

   終了したら、ファイルを保存します。
**注記**  
Amazon EC2 は、デフォルトでポート 25 経由の通信を制限します。Amazon EC2 インスタンスの Sendmail を使用する場合は、[E メール送信制限解除申請](https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request)に入力する必要があります。

1. コマンドラインで、以下のコマンドを入力して*sendmail.cf*を書き込み可能にします。

   ```
   sudo chmod 666 /etc/mail/sendmail.cf
   ```

1. コマンドラインで、以下のコマンドを入力して*sendmail.cf*を再生成します。

   ```
   sudo sh -c 'm4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf'
   ```
**注記**  
「コマンドが見つかりません」や「そのようなファイルまたはディレクトリはありません」などといったエラーが発生した場合は、`m4`パッケージと`sendmail-cf`パッケージがシステムにインストールされていることを確認します。

1. コマンドラインで、以下のコマンドを入力して*sendmail.cf*の権限を読み取り専用にリセットします。

   ```
   sudo chmod 644 /etc/mail/sendmail.cf
   ```

1. コマンドラインで、以下のコマンドを入力して Sendmail を再起動します。

   ```
   sudo /etc/init.d/sendmail restart
   ```

   *Linux または Sendmail のバージョンによって、上記がうまくいかない場合は、以下を試してください。*

   ```
   sudo su service sendmail restart
   ```

1. 以下の手順を実行して、テスト E メールを送信します。

   1. コマンドラインで、以下のコマンドを入力します。

      ```
      /usr/sbin/sendmail -vf sender@example.com recipient@example.com
      ```

      *sender@example.com*を送信元 E メールアドレスに置き換えてください。*recipient@example.com* を送信先アドレスに置き換えます。終了したら、Enter キーを押します。

   1. 以下のメッセージの内容を入力します。各行の終わりで Enter キーを押します。

      ```
      From: sender@example.com
      To: recipient@example.com
      Subject: Amazon SES test email
      
      This is a test message sent from Amazon SES using Sendmail.
      ```

      E メールの内容を入力し終わったら、Ctrl\$1D キーを押して送信します。

1. 受取人の E メールクライアントで E メールをチェックします。E メールが見つからない場合は、迷惑メールフォルダを確認します。それでも E メールが見つからない場合は、メールサーバー上の Sendmail ログを確認します。通常、ログは */var/log/mail.log* または */var/log/maillog* にあります。

# Amazon SES を Microsoft Windows Server IIS SMTP に統合する
<a name="send-email-windows-server"></a>

Amazon SES を介して E メールを送信するように Microsoft Windows Server の IIS SMTP サーバーを設定します。以下の手順は、Amazon EC2 インスタンスで、Microsoft Windows Server 2022 を使用している場合のものです。Windows Server 2016 でも同じ設定を使用できます。

**注記**  
Windows Server はサードパーティーのアプリケーションであり、Amazon Web Services によって開発またはサポートされていません。このセクションの手順は情報提供のみを目的としており、予告なく変更される場合があります。

**Amazon SES と Microsoft Windows Server IIS SMTP を統合するには**

1. まず、次の手順を使用して Microsoft Windows Server 2022 をセットアップします。

   1. [Amazon EC2 マネジメントコンソール](https://console.aws.amazon.com/ec2/home)から、新しい Microsoft Windows Server 2022 Base Amazon EC2 インスタンスを起動します。

   1. 「[Amazon EC2 Windows インスタンスの使用開始](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2Win_GetStarted.html)」の手順に従って、リモート Desktop によりそのインスタンスに接続してアクセスします。

   1. Server Manager のダッシュボードを起動します。

   1. [**Web Server**] ロールをインストールします。**IIS 10 管理互換性ツール** (**ウェブサーバー**チェックボックスのオプション) を必ず含めてください。

   1. [**SMTP Server**] 機能をインストールします。

1. 次に、以下の手順を使用して IIS SMTP サービスを設定します。

   1. Server Manager のダッシュボードに戻ります。

   1. **Tools** メニューから、**Internet Information Services (IIS) 10.0 Manager** を選択します。

   1. **SMTP Virtual Server \$11** を右クリックし、**プロパティ**を選択します。

   1. **アクセス**タブの **Relay Restrictions** で、**Relay** を選択します。

   1. **Relay Restrictions** ダイアログボックスで、**追加**を選択します。

   1. **Single Computer** で、IP アドレスとして **127.0.0.1** と入力します。これで、IIS SMTP サービスを介して E メールを Amazon SES に中継する権限がこのサーバーに割り当てられました。

      この手順では、E メールがこのサーバーで生成されることを前提としています。E メールを生成するアプリケーションが別のサーバーで実行されている場合は、IIS SMTP でそのサーバーの中継アクセスを許可する必要があります。
**注記**  
SMTP リレーをプライベートサブネットに拡張するには、[**Relay Restriction**] で [**Single Computer**] 127.0.0.1 と [**Group of Computers**] 172.1.1.0 ～ 255.255.255.0 (ネットマスクセクション) を使用します。[**Connection**] で、[**Single Computer**] 127.0.0.1 と [**Group of Computers**] 172.1.1.0 ～ 255.255.255.0 (ネットマスクセクション) を使用します。

1. 最後に、以下の手順を使用して、Amazon SES を介して E メールを送信するようにサーバーを設定します。

   1. **SMTP Virtual Server \$11 Properties**ダイアログボックスに戻り、**Delivery** タブを選択します。

   1. [**Delivery**] タブで、[**Outbound Security**] を選択します。

   1. **[Basic Authentication]** (基本認証) を選択し、Amazon SES SMTP 認証情報を入力します。これらの認証情報は、「[Amazon SES SMTP 認証情報を取得](smtp-credentials.md)」の手順に従って Amazon SES コンソールから取得できます。
**重要**  
SMTP 認証情報は、 AWS アクセスキー ID およびシークレットアクセスキーとは異なります。 AWS 認証情報を使用して SMTP エンドポイントに対して自分自身を認証しようとしないでください。認証情報の詳細については、「[Amazon SES 認証情報の種類](send-email-concepts-credentials.md)」を参照してください。

   1. [**TLS encryption**] が選択されていることを確認します。

   1. [**Delivery**] タブに戻ります。

   1. [**Outbound Connections**] を選択します。

   1. [**Outbound Connections**] ダイアログボックスで、ポートが 25 または 587 であることを確認します。

   1. [**Advanced**] を選択します。

   1. **スマートホスト**名で、使用する Amazon SES エンドポイントを入力します (たとえば、*email-smtp.us-west-2.amazonaws.com*)。Amazon SES AWS リージョン が利用可能な のエンドポイント URLs[「Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)」を参照してください*AWS 全般のリファレンス*。

   1. Server Manager のダッシュボードに戻ります。

   1. Server Manager のダッシュボードで、[**SMTP Virtual Server \$11**] を右クリックし、新しい設定が選択されるようにサービスを再起動します。

   1. このサーバーを介して E メールを送信します。メッセージヘッダーを調べると、そのメッセージが Amazon SES を介して配信されたことを確認できます。

# コマンドラインを使用して、Amazon SES SMTP インターフェイスへの接続をテストする
<a name="send-email-smtp-client-command-line"></a>

コマンドラインからこのセクションで説明されている方法を使用して、Amazon SES SMTP エンドポイントへの接続をテストし、SMTP 認証情報を検証し、接続の問題をトラブルシューティングできます。以下の手順では、代表的なオペレーティングシステムに搭載されているツールやライブラリを使用します。

SMTP 接続問題のトラブルシューティングの詳細については、「[Amazon SES SMTP の問題](troubleshoot-smtp.md)」を参照してください。

## 前提条件
<a name="send-email-smtp-client-command-line-prereqs"></a>

Amazon SES SMTP インターフェイスに接続するときは、SMTP 認証情報のセットを指定する必要があります。これらの SMTP 認証情報は、標準の AWS 認証情報とは異なります。2 つのタイプの認証情報は、一方をもう一方の代わりに使用することはできません。SMTP 認証情報を取得する方法の詳細については、「[Amazon SES SMTP 認証情報を取得](smtp-credentials.md)」を参照してください。

## Amazon SES SMTP インターフェイスへの接続のテスト
<a name="send-email-smtp-client-command-line-testing"></a>

コマンドラインを使用すると、認証情報の入力やメッセージの送信を行うことなく、Amazon SES SMTP インターフェイスへの接続をテストできます。この手順は、基本的な接続問題のトラブルシューティングに役立ちます。テスト接続に失敗した場合は、「[SMTP に関する問題](troubleshoot-smtp.md)」を参照してください。

このセクションでは、OpenSSL (ほとんどの Linux、macOS、Unix ディストリビューションに搭載され、Windows でも使用可能) と PowerShell の`Test-NetConnection`コマンドレット (ほとんどの最新バージョンの Windows に搭載) の両方を使用して接続をテストする手順を示します。

------
#### [ Linux, macOS, or Unix ]

OpenSSL を使用して Amazon SES SMTP インターフェイスに接続するには、ポート 587 経由で明示的な SSL を使用する方法と、ポート 465 経由で暗黙的な SSL を使用する方法の 2 つがあります。

**明示的な SSL を使用して SMTP インターフェイスに接続するには**
+ コマンドラインで、次のコマンドを入力して Amazon SES SMTP サーバーに接続します。

  ```
  openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.us-west-2.amazonaws.com:587
  ```

  前述のコマンドで、*email-smtp.us-west-2.amazonaws.com* を AWS リージョンの Amazon SES SMTP エンドポイントの URL に置き換えます。詳細については、「[地域と Amazon SES](regions.md)」を参照してください。

  正常に接続されると次のような出力が表示されます。

  ```
  depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
  verify return:1
  depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
  verify return:1
  depth=0 CN = email-smtp.us-west-2.amazonaws.com
  verify return:1
  250 Ok
  ```

  約 10 秒間何もしないと、接続は自動的に終了します。

または、暗黙的な SSL を使用して、ポート 465 経由で SMTP インターフェイスに接続することもできます。

**暗黙的な SSL を使用して SMTP インターフェイスに接続するには**
+ コマンドラインで、次のコマンドを入力して Amazon SES SMTP サーバーに接続します。

  ```
  openssl s_client -crlf -quiet -connect email-smtp.us-west-2.amazonaws.com:465
  ```

  前述のコマンドで、*email-smtp.us-west-2.amazonaws.com* を AWS リージョンの Amazon SES SMTP エンドポイントの URL に置き換えます。詳細については、「[地域と Amazon SES](regions.md)」を参照してください。

  正常に接続されると次のような出力が表示されます。

  ```
  depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
  verify return:1
  depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
  verify return:1
  depth=0 CN = email-smtp.us-west-2.amazonaws.com
  verify return:1
  220 email-smtp.amazonaws.com ESMTP SimpleEmailService-d-VCSHDP1YZ A1b2C3d4E5f6G7h8I9j0
  ```

  約 10 秒間何もしないと、接続は自動的に終了します。

------
#### [ PowerShell ]

PowerShell の [Test-NetConnection](https://docs.microsoft.com/en-us/powershell/module/nettcpip/test-netconnection) コマンドレットを使用して Amazon SES SMTP サーバーに接続します。

**注記**  
`Test-NetConnection` コマンドレットでは、コンピュータが Amazon SES SMTP エンドポイントに接続できるかどうかを判断できます。ただし、コンピュータが SMTP エンドポイントに暗黙的な SSL 接続や明示的な SSL 接続を確立できるかどうかはテストしません。SSL 接続をテストするには、OpenSSL for Windows をインストールするか、テスト E メールを送信できます。

**`Test-NetConnection` コマンドレットを使用して SMTP インターフェイスに接続するには**
+ Amazon SES で、次のコマンドを入力して Amazon SES SMTP サーバーに接続します。

  ```
  Test-NetConnection -Port 587 -ComputerName email-smtp.us-west-2.amazonaws.com
  ```

  前述のコマンドで、*email-smtp.us-west-2.amazonaws.com* を AWS リージョンの Amazon SES SMTP エンドポイントの URL に置き換え、*587* をポート番号に置き換えます。Amazon SES の地域のエンドポイントの詳細については、の「[地域と Amazon SES](regions.md)」を参照してください。

  接続に成功すると、次の例のような出力が表示されます。

  ```
  ComputerName     : email-smtp.us-west-2.amazonaws.com
  RemoteAddress    : 198.51.100.126
  RemotePort       : 587
  InterfaceAlias   : Ethernet
  SourceAddress    : 203.0.113.46
  TcpTestSucceeded : True
  ```

------

## コマンドラインを使用し、Amazon SES SMTP インターフェイスを介して E メールを送信する
<a name="send-email-using-openssl"></a>

コマンドラインを使用して、Amazon SES SMTP インターフェイスを介してメッセージを送信することもできます。この手順は、SMTP 認証情報をテストする場合や、Amazon SES を使用して送信するメッセージを特定の受信者が受信できるかどうかをテストする場合に役立ちます。

------
#### [ Linux, macOS, or Unix ]

E メール送信者が SMTP サーバーに接続すると、クライアントはスタンダードなリクエストのセットを発行し、サーバーは各リクエストにスタンダードのレスポンスで応答します｡ この一連のリクエストとレスポンスは *SMTP 対話*と呼ばれます。OpenSSL を使用して Amazon SES SMTP サーバーに接続すると、サーバーは SMTP 対話が発生することを予想します｡

OpenSSL を使用して SMTP インターフェイスに接続する場合は、base64 エンコードを使用して SMTP 認証情報をエンコードする必要があります。このセクションでは、base64 を使用して認証情報をエンコードする手順を示します。

**SMTP インターフェイスを使用してコマンドラインから E メールを送信するには**

1. コマンドラインで以下を入力します。*email-smtp.us-west-2.amazonaws.com* は、使用する AWS リージョンの Amazon SES SMTP エンドポイントの URL に置き換えます。詳細については、「」を参照してください[地域と Amazon SES](regions.md)。

   ```
    1. #!/bin/bash
    2. 
    3. # Prompt user to provide following information
    4. read -p "Configuration set: " CONFIGSET
    5. read -p "Enter SMTP username: " SMTPUsername
    6. read -p "Enter SMTP password: " SMTPPassword
    7. read -p "Sender email address: " MAILFROM
    8. read -p "Receiver email address: " RCPT
    9. read -p "Email subject: " SUBJECT
   10. read -p "Message to send: " DATA
   11. 
   12. echo
   13. 
   14. # Encode SMTP username and password using base64
   15. EncodedSMTPUsername=$(echo -n "$SMTPUsername" | openssl enc -base64)
   16. EncodedSMTPPassword=$(echo -n "$SMTPPassword" | openssl enc -base64)
   17. 
   18. # Construct the email
   19. Email="EHLO example.com
   20. AUTH LOGIN
   21. $EncodedSMTPUsername
   22. $EncodedSMTPPassword
   23. MAIL FROM: $MAILFROM
   24. RCPT TO: $RCPT
   25. DATA
   26. X-SES-CONFIGURATION-SET: $CONFIGSET
   27. From: $MAILFROM
   28. To: $RCPT
   29. Subject: $SUBJECT
   30. 
   31. $DATA
   32. .
   33. QUIT"
   34. 
   35. echo "$Email" | openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.us-west-2.amazonaws.com:587
   ```

1. 各変数のプロンプトで、値を入力します。

1. 
   + ポート 465 経由で暗黙的な SSL を使用して送信するには、以下を使用します。

     ```
     openssl s_client -crlf -quiet -connect email-smtp.us-west-2.amazonaws.com:465
     ```

   メッセージが Amazon SES によって受け入れられた場合は、次の例のような出力が表示されます。

   ```
   250 Ok 01010160d7de98d8-21e57d9a-JZho-416c-bbe1-8ebaAexample-000000
   ```

   `250 Ok` に続く数字の文字列とテキストは、E メールのメッセージ ID です。
**注記**  
約 10 秒間何もしないと、接続は自動的に終了します。

------
#### [ PowerShell ]

[Net.Mail.SmtpClient](https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient?view=netframework-4.8) クラスを使用すると、明示的な SSL を通じてポート 587 経由で E メールを送信できます。

**注記**  
`Net.Mail.SmtpClient`クラスは正式に廃止されており、Microsoft はサードパーティー製のライブラリを使用することを推奨しています。このコードはテスト専用であり、本番環境用のワークロードには使用しないでください。

**明示的な SSL を使用して PowerShell 経由で E メールを送信するには**

1. テキストエディタで新規ファイルを作成します。ファイルに次のコードを貼り付けます。

   ```
   function SendEmail($Server, $Port, $Sender, $Recipient, $Subject, $Body) {
       $Credentials = [Net.NetworkCredential](Get-Credential)
   
       $SMTPClient = New-Object Net.Mail.SmtpClient($Server, $Port)
       $SMTPClient.EnableSsl = $true
       $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Credentials.Username, $Credentials.Password);
   
       try {
           Write-Output "Sending message..."
           $SMTPClient.Send($Sender, $Recipient, $Subject, $Body)
           Write-Output "Message successfully sent to $($Recipient)"
       } catch [System.Exception] {
           Write-Output "An error occurred:"
           Write-Error $_
       }
   }
   
   function SendTestEmail(){
       $Server = "email-smtp.us-west-2.amazonaws.com"
       $Port = 587
   
       $Subject = "Test email sent from Amazon SES"
       $Body = "This message was sent from Amazon SES using PowerShell (explicit SSL, port 587)."
   
       $Sender = "sender@example.com"
       $Recipient = "recipient@example.com"
   
       SendEmail $Server $Port $Sender $Recipient $Subject $Body
   }
   
   SendTestEmail
   ```

   終了したら、`SendEmail.ps1`としてファイルを保存します。

1. 前のステップで作成したファイルを次のように変更します。
   + *sender@example.com* を、メッセージの送信元の E メールアドレスに置き換えます。
   + *recipient@example.com*をメッセージの送信先アドレスに置き換えます。
   + *email-smtp.us-west-2.amazonaws.com*を AWS 地域の Amazon SES SMTP エンドポイントの URL に置き換えます。詳細については、「[地域と Amazon SES](regions.md)」を参照してください。

1. PowerShell を使用して、次のコマンドを入力します。

   ```
   .\path\to\SendEmail.ps1
   ```

   上のコマンドで、*path\$1to\$1SendEmail.ps1* をステップ 1 で作成したファイルへのパスに置き換えます。

1. プロンプトが表示されたら、SMTP ユーザー名とパスワードを入力します。

または、[System.Web.Mail.SmtpMail](https://docs.microsoft.com/en-us/dotnet/api/system.web.mail.smtpmail?view=netframework-4.8) クラスを使用して、ポート 465 経由で暗黙的な SSL を通じて E メールを送信することもできます。

**注記**  
`System.Web.Mail.SmtpMail` クラスは正式に廃止されており、Microsoft はサードパーティー製のライブラリを使用することを推奨しています。このコードはテスト専用であり、本番環境用のワークロードには使用しないでください。

**暗黙的な SSL を使用して PowerShell 経由で E メールを送信するには**

1. テキストエディタで新規ファイルを作成します。ファイルに次のコードを貼り付けます。

   ```
   [System.Reflection.Assembly]::LoadWithPartialName("System.Web") > $null
   
   function SendEmail($Server, $Port, $Sender, $Recipient, $Subject, $Body) {
       $Credentials = [Net.NetworkCredential](Get-Credential)
   
       $mail = New-Object System.Web.Mail.MailMessage
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", $Server)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", $Port)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", $true)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", $Credentials.UserName)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", $Credentials.Password)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout", $timeout / 1000)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", 2)
       $mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1)
   
       $mail.From = $Sender
       $mail.To = $Recipient
       $mail.Subject = $Subject
       $mail.Body = $Body
   
       try {
           Write-Output "Sending message..."
           [System.Web.Mail.SmtpMail]::Send($mail)
           Write-Output "Message successfully sent to $($Recipient)"
       } catch [System.Exception] {
           Write-Output "An error occurred:"
           Write-Error $_
       }
   }
   
   function SendTestEmail(){
       $Server = "email-smtp.us-west-2.amazonaws.com"
       $Port = 465
       
       $Subject = "Test email sent from Amazon SES"
       $Body = "This message was sent from Amazon SES using PowerShell (implicit SSL, port 465)."
   
       $Sender = "sender@example.com"
       $Recipient = "recipient@example.com"
   
       SendEmail $Server $Port $Sender $Recipient $Subject $Body
   }
   
   SendTestEmail
   ```

   終了したら、`SendEmail.ps1`としてファイルを保存します。

1. 前のステップで作成したファイルを次のように変更します。
   + *sender@example.com* を、メッセージの送信元の E メールアドレスに置き換えます。
   + *recipient@example.com*をメッセージの送信先アドレスに置き換えます。
   + *email-smtp.us-west-2.amazonaws.com*を AWS 地域の Amazon SES SMTP エンドポイントの URL に置き換えます。詳細については、「[地域と Amazon SES](regions.md)」を参照してください。

1. PowerShell を使用して、次のコマンドを入力します。

   ```
   .\path\to\SendEmail.ps1
   ```

   上のコマンドで、*path\$1to\$1SendEmail.ps1* をステップ 1 で作成したファイルへのパスに置き換えます。

1. プロンプトが表示されたら、SMTP ユーザー名とパスワードを入力します。

------

# Amazon SES API を使用して E メールを送信する
<a name="send-email-api"></a>

Amazon SES を介して本稼働 E メールを送信する場合には、Simple Mail Transfer Protocol（SMTP）インターフェイスまたは Amazon SES API を使用できます。 SMTP インターフェイスの詳細については、「[Amazon SES SMTP インターフェイスを使用して E メールを送信](send-email-smtp.md)」を参照してください。このセクションでは、API を使用して E メールを送信する方法について説明します。

Amazon SES の API を使用して E メールを送信する場合は、メッセージの内容を指定し、Amazon SES は MIME E メールを組み立てます。また、メッセージの内容を完全に制御できるように、E メールを自分で構成することもできます。API の詳細については、[Amazon Simple Email Service API リファレンス](https://docs.aws.amazon.com/ses/latest/APIReference/)を参照してください。Amazon SES AWS リージョン が利用可能な のエンドポイント URLs[「Amazon Simple Email Service エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/ses.html)」を参照してください*AWS 全般のリファレンス*。

以下の方法で API を呼び出すことができます。
+ **直接 HTTPS リクエストを作成する** - これは、リクエストの認証と署名を手動で処理し、リクエストを手動で作成する必要があるため、最も高度な方法です。Amazon SES API の詳細については、*API v2 リファレンス*ページの[Welcome](https://docs.aws.amazon.com/ses/latest/APIReference-V2/Welcome.html)を参照してください。
+ ** AWS SDK を使用する —**AWS SDKsを使用すると、Amazon SES を含む複数の AWS サービスの APIs に簡単にアクセスできます。 Amazon SES SDK を使用すると、認証、リクエスト署名、再試行ロジック、エラー処理などの低レベルの機能が自動的に実行されるため、充実したアプリケーションの構築に専念できます。
+ **command line インターフェイスの使用** – [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) は、Amazon SES 用のコマンドラインツールです。さらに、PowerShell 環境でスクリプトを作成できるように、[AWS Tools for PowerShell](https://aws.amazon.com/powershell/) も提供しています。

Amazon SES API に直接アクセスするか、 SDK、、 AWS Command Line Interface または AWS Tools for PowerShell を介して AWS 間接的にアクセスするかにかかわらず、Amazon SES API は、E メールメッセージの構成に対する制御の程度に応じて、2 つの異なる方法で E メールを送信できます。
+ **フォーマット済み -** Amazon SES は、正しくフォーマットされた E メールメッセージを構成して送信します。ユーザーは、送信元と宛先のアドレス、件名、メッセージ本文を入力するだけです。Amazon SES は残りのすべてを処理します。詳細については、「[Amazon SES API を使用してフォーマット済み E メールを送信する](send-email-formatted.md)」を参照してください。
+ **Raw - **E メールメッセージを手動で構成して送信します。自分で E メールヘッダーおよび MIME の種類を指定します。E メールのフォーマット作業を自分で行った経験があれば、未処理のインターフェイスにより、メッセージの構成をより詳細に制御できます。詳細については、「[Amazon SES API v2 を使用した raw E メールの送信](send-email-raw.md)」を参照してください。

**Topics**
+ [Amazon SES API を使用してフォーマット済み E メールを送信する](send-email-formatted.md)
+ [Amazon SES API v2 を使用した raw E メールの送信](send-email-raw.md)
+ [テンプレートを使用して、Amazon SES API でパーソナライズされた E メールを送信する](send-personalized-email-api.md)
+ [AWS SDK を使用して Amazon SES 経由で E メールを送信する](send-an-email-using-sdk-programmatically.md)
+ [Amazon SES でサポートされているコンテンツのエンコーディング](content-encodings.md)

# Amazon SES API を使用してフォーマット済み E メールを送信する
<a name="send-email-formatted"></a>

フォーマットされた E メールを送信するには、 を使用する AWS マネジメントコンソール か、アプリケーションを通じて Amazon SES API を直接呼び出すか、 AWS SDK、、 AWS Command Line Interfaceまたは を通じて間接的に呼び出します AWS Tools for Windows PowerShell。

Amazon SES API は、 `SendEmail`アクションを提供し、フォーマット済み E メールを構成して送信できるようにします。 `SendEmail`には、送信元アドレス、宛先アドレス、メッセージの件名、およびメッセージの本文 (テキスト、 HTML、またはその両方) が必要です。詳細については、[SendEmail](https://docs.aws.amazon.com/ses/latest/APIReference/API_SendEmail.html)(API リファレンス) または[SendEmail](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html)（API v2 リファレンス）を参照してください。

**注記**  
E メールアドレスは、7 ビット ASCII 文字列になっている必要があります。送信先または送信元の E メールアドレス内で、ドメインの部分に Unicode 文字が含まれる場合は、Punycode を使用してドメインをエンコードする必要があります。詳細については、[RFC 3492](https://tools.ietf.org/html/rfc3492) を参照してください。

さまざまなプログラミング言語を使用してフォーマット済みメッセージを構成する方法の例は、[コードの例](send-an-email-using-sdk-programmatically.md#send-an-email-using-sdk-programmatically-examples)を参照してください。

`SendEmail`に複数の呼び出しを作成する場合の E メール送信速度向上方法については、「[Amazon SES のスループットを上げる](troubleshoot-throughput-problems.md)」を参照してください。

# Amazon SES API v2 を使用した raw E メールの送信
<a name="send-email-raw"></a>

コンテンツタイプを `raw` として指定して Amazon SES API v2 `SendEmail` オペレーションを使用すると、raw E メール形式でカスタマイズしたメッセージを受信者に送信できます。

## E メールヘッダーフィールドについて
<a name="send-email-raw-headers"></a>

Simple Mail Transfer Protocol (SMTP) は、E メールエンベロープとそのパラメータのいくつかを定義することにより、E メールメッセージの送信方法を定義しますが、メッセージの内容については何も定義しません。一方、Internet Message Format（[RFC 5322](https://www.ietf.org/rfc/rfc5322.txt)）は、メッセージの構成方法を定義します。

Internet Message Format の仕様に従って、すべてのメッセージ E メールはヘッダーと本文から構成されます。ヘッダーはメッセージのメタデータで構成され、本文にメッセージそのものが含まれます。E メールヘッダーと本文の詳細については、「[Amazon SESのE メール形式](send-email-concepts-email-format.md)」を参照してください。

## Raw E メール MIME メッセージ構造の使用
<a name="send-email-raw-mime"></a>

SMTP プロトコルはもともと 7 ビット ASCII 文字のみを含む E メールメッセージを送信するように設計されていました。この仕様により、ASCII 以外のテキストエンコード (Unicode など)、バイナリコンテンツ、または添付ファイルでは SMTP が不十分になります。多目的インターネットメール拡張‎ (MIME) 標準は、SMTP を使用して、他の多くの種類のコンテンツを送信できるようにするために開発されたものです。

MIME 標準には、メッセージ本文を複数のパートに分割し、パートごとに、どのような操作を行うかを指定する機能があります。たとえば、E メールメッセージ本文の、あるパートはプレーンテキスト、別のパートは HTML という場合があります。さらに、MIME では、E メールメッセージに 1 つ以上の添付ファイルを含めることができます。メッセージの受取人は、E メールクライアント内から添付ファイルを見たり、保存したりできます。

メッセージヘッダーとコンテンツとは空白行で分離されます。E メールの各パートは、boundary で分離されます。boundary は、各パートの開始と終了を示す文字列です。

次の例のマルチパートメッセージには、テキストと HTML パート、および添付ファイルが含まれています。添付ファイルは[添付ファイルヘッダー](#send-email-mime-encoding-files)のすぐ下に配置する必要があります。ほとんどの場合、この例のように `base64` でエンコードされます。

```
 1. From: "Sender Name" <sender@example.com>
 2. To: recipient@example.com
 3. Subject: Customer service contact info
 4. Content-Type: multipart/mixed;
 5.     boundary="a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a"
 6. 
 7. --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
 8. Content-Type: multipart/alternative;
 9.     boundary="sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a"
10. 
11. --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
12. Content-Type: text/plain; charset=iso-8859-1
13. Content-Transfer-Encoding: quoted-printable
14. 
15. Please see the attached file for a list of customers to contact.
16. 
17. --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
18. Content-Type: text/html; charset=iso-8859-1
19. Content-Transfer-Encoding: quoted-printable
20. 
21. <html>
22. <head></head>
23. <body>
24. <h1>Hello!</h1>
25. <p>Please see the attached file for a list of customers to contact.</p>
26. </body>
27. </html>
28. 
29. --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--
30. 
31. --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
32. Content-Type: text/plain; name="customers.txt"
33. Content-Description: customers.txt
34. Content-Disposition: attachment;filename="customers.txt";
35.     creation-date="Sat, 05 Aug 2017 19:35:36 GMT";
36. Content-Transfer-Encoding: base64
37. 
38. SUQsRmlyc3ROYW1lLExhc3ROYW1lLENvdW50cnkKMzQ4LEpvaG4sU3RpbGVzLENhbmFkYQo5MjM4
39. OSxKaWUsTGl1LENoaW5hCjczNCxTaGlybGV5LFJvZHJpZ3VleixVbml0ZWQgU3RhdGVzCjI4OTMs
40. QW5heWEsSXllbmdhcixJbmRpYQ==
41. 
42. --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--
```

メッセージのコンテンツタイプが `multipart/mixed` であることから、メッセージに多数のパートがあり (この例では、本文および添付ファイル)、受信するクライアントは各パートを別々に扱う必要があることがわかります。

本文セクション内に入れ子になっているのは、`multipart/alternative` コンテンツタイプを使用する 2 番目のパートです。このコンテンツタイプは、各パートに同じコンテンツの代替バージョンが含まれる (この場合はテキストバージョンおよび HTML バージョン) ことを示します。受取人の E メールクライアントで HTML コンテンツを表示できる場合は、メッセージ本文の HTML バージョンが表示されます。受取人の E メールクライアントで HTML コンテンツを表示できない場合は、メッセージ本文のプレーンテキストバージョンが表示されます。

メッセージの両方のバージョンには添付ファイルも含まれます (この場合、一部の顧客名を含むショートテキストファイル)。

この例のように MIME パートを他のパートに入れ子にすると、入れ子になったパートは、親のパートの `boundary` パラメータとは異なる `boundary` パラメータを使用する必要があります。これらの境界は固有の文字列でなければなりません。MIME パーツ間の境界を定義するには、2 つのハイフンを (--) タイプし、その後に境界文字列が続きます。MIME パーツの最後に、境界文字列の先頭および末尾の両方に 2 つのハイフンを置きます。

**注記**  
メッセージに 500 MIME を超えるパーツを含めることはできません。

### MIME エンコード
<a name="send-email-mime-encoding"></a>

古いシステムとの互換性を維持するために、Amazon SES は [RFC 2821](https://tools.ietf.org/html/rfc2821) で定義されている SMTP の 7 ビット ASCII 制限を優先します。非 ASCII 文字を含むコンテンツを送信する場合は、これらの文字を 7 ビット ASCII 文字を使用する形式にエンコードする必要があります。

#### E メールアドレス
<a name="send-email-mime-encoding-addresses"></a>

E メールアドレスは、7 ビット ASCII 文字列になっている必要があります。送信先または送信元の E メールアドレス内で、ドメインの部分に Unicode 文字が含まれる場合は、Punycode を使用してドメインをエンコードする必要があります。Punycode は E メールアドレスのローカル部分 (@ 記号の前の部分) では許可されていません。また、「差出人」名にも許可されていません。「差出人」名に Unicode 文字を使用する場合は、このセクションに説明されているように、MIME encoded-word 構文を使用して「差出人」名をエンコードする必要があります。Punycode の詳細については、[RFC 3492](http://tools.ietf.org/html/rfc3492) を参照してください。

**注記**  
このルールは、メッセージヘッダーではなく、メッセージエンベロープで指定する E メールアドレスにのみ適用されます。Amazon SES API v2 `SendEmail` オペレーションを使用する場合、`Source` パラメータと `Destinations` パラメータで指定するアドレスが、それぞれエンベロープの送信者と受信者を定義することになります。

#### E メールヘッダー
<a name="send-email-mime-encoding-headers"></a>

メッセージヘッダーをエンコードするには、MIME encoded-word 構文を使用します。MIME encoded word 構文では、次の形式が使用されます。

```
=?charset?encoding?encoded-text?=
```

 `encoding`の値は `Q`または `B`となります。エンコードの値が `Q` の場合、値 `encoded-text` には Q エンコードを使用する必要があります。エンコードの値が `B` の場合、`encoded-text` の値には base64 エンコードを使用する必要があります。

たとえば、「Як ти поживаєш?」を使用する場合 E メールの件名に次のエンコードのいずれかを使用することができます。
+ **Q エンコード**

  ```
  =?utf-8?Q?=D0=AF=D0=BA_=D1=82=D0=B8_=D0=BF=D0=BE=D0=B6=D0=B8=D0=B2=D0=B0=D1=94=D1=88=3F?=
  ```
+ **Base64 エンコード**

  ```
  =?utf-8?B?0K/QuiDRgtC4INC/0L7QttC40LLQsNGU0Yg/?=
  ```

Q エンコードの詳細については、[RFC 2047](https://tools.ietf.org/html/rfc2047) を参照してください。base64 エンコードの詳細については、[RFC 2045](https://tools.ietf.org/html/rfc2045) を参照してください。

#### メッセージ本文
<a name="send-email-mime-encoding-body"></a>

メッセージの本文をエンコードするには、quoted-printable エンコードまたは base64 エンコードを使用できます。次に、`Content-Transfer-Encoding` ヘッダーを使用して、使用するエンコードスキームを指定します。

たとえば、メッセージの本文に次のテキストが含まれているとします。

१९७२ मे रे टॉमलिंसन ने पहला ई-मेल संदेश भेजा \$1 रे टॉमलिंसन ने ही सर्वप्रथम @ चिन्ह का चयन किया और इन्ही को ईमेल का आविष्कारक माना जाता है

base64 エンコードを使用してこのテキストをエンコードする場合、最初に以下のヘッダーを指定します。

```
Content-Transfer-Encoding: base64
```

次に、E メールの本文セクションに、base64 でエンコードされたテキストを含めます。

```
4KWn4KWv4KWt4KWoIOCkruClhyDgpLDgpYcg4KSf4KWJ4KSu4KSy4KS/4KSC4KS44KSoIOCkqOCl
hyDgpKrgpLngpLLgpL4g4KSILeCkruClh+CksiDgpLjgpILgpKbgpYfgpLYg4KSt4KWH4KSc4KS+
IHwg4KSw4KWHIOCkn+ClieCkruCksuCkv+CkguCkuOCkqCDgpKjgpYcg4KS54KWAIOCkuOCksOCl
jeCkteCkquCljeCksOCkpeCkriBAIOCkmuCkv+CkqOCljeCkuSDgpJXgpL4g4KSa4KSv4KSoIOCk
leCkv+Ckr+CkviDgpJTgpLAg4KSH4KSo4KWN4KS54KWAIOCkleCliyDgpIjgpK7gpYfgpLIg4KSV
4KS+IOCkhuCkteCkv+Ckt+CljeCkleCkvuCksOCklSDgpK7gpL7gpKjgpL4g4KSc4KS+4KSk4KS+
IOCkueCliAo=
```

**注記**  
場合によっては、Amazon SES を使用して送信するメッセージに 8 ビットの`Content-Transfer-Encoding`を使用できます。ただし、Amazon SES がメッセージを変更する必要がある場合 (たとえば、[オープンとクリックの追跡](faqs-metrics.md)を使用した場合)、8 ビットでエンコードされたコンテンツは、受取人の受信トレイに届いたときに正しく表示されないことがあります。このため、7 ビットの ASCII 以外のコンテンツは常にエンコードする必要があります。

#### 添付ファイル
<a name="send-email-mime-encoding-files"></a>

E メールにファイルをアタッチするには、base64 エンコードを使用して添付ファイルをエンコードする必要があります。添付ファイルは通常、次のヘッダーを含む専用の MIME メッセージ部分に配置されています。
+ **Content-Type** – 添付ファイルの種類。一般的な MIME Content-Type 宣言の例を以下に示します。
  + **プレーンテキストファイル** – `Content-Type: text/plain; name="sample.txt"`
  + **Microsoft Word ドキュメント** – `Content-Type: application/msword; name="document.docx"`
  + **JPG イメージ** – `Content-Type: image/jpeg; name="photo.jpeg"`
+ **Content-Disposition** – 受取人の E メールクライアントがコンテンツをどのように処理するかを指定します。添付ファイルの場合、この値は `Content-Disposition: attachment` です。
+ **Content-Transfer-Encoding** – 添付ファイルのエンコードに使用されるスキーム。添付ファイルでは、ほとんどの場合この値は `base64` です。
+ **エンコードされた添付ファイル** – [例に示すように](#send-email-raw-mime)、実際の添付ファイルをエンコードして、添付ファイルヘッダーの下の本文に含める必要があります。

Amazon SES は最も一般的なファイルタイプに対応しています。Amazon SES が対応していないファイルの種類の一覧については、「[SES でサポート対象外の添付ファイルのタイプ](attachments.md#mime-types)」を参照してください。

## Amazon SES API v2 を使用した raw E メールの送信
<a name="send-email-raw-api"></a>

Amazon SES API v2 は `SendEmail` アクションを提供します。これにより、コンテンツタイプを simple、raw、または templated のいずれかを指定し、このように指定した形式の E メールメッセージを作成して送信できるようになります。詳細については、「[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html)」を参照してください。次の例では、コンテンツ タイプを `raw` として指定して、raw E メール形式を使用してメッセージを送信します。

**注記**  
`SendEmail` に複数の呼び出しを作成する場合の E メール送信速度向上方法については、「[Amazon SES のスループットを上げる](troubleshoot-throughput-problems.md)」を参照してください。

メッセージ本文には、正しくフォーマットされ、適切なヘッダーフィールドとメッセージ本文がエンコードされた raw E メールメッセージを含める必要があります。アプリケーション内で raw メッセージを手動で構成することはできますが、既存のメールライブラリを使用して構成するほうが、はるかに簡単です。

------
#### [ Java ]

次のコード例は、[JavaMail](https://javaee.github.io/javamail/)ライブラリと[AWS SDK for Java](https://aws.amazon.com/sdk-for-java)を使用して raw E メールを作成および送信する方法を示しています。

```
  1. package com.amazonaws.samples;
  2. 
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.IOException;
  5. import java.io.PrintStream;
  6. import java.nio.ByteBuffer;
  7. import java.util.Properties;
  8. 
  9. // JavaMail libraries. Download the JavaMail API 
 10. // from https://javaee.github.io/javamail/
 11. import javax.activation.DataHandler;
 12. import javax.activation.DataSource;
 13. import javax.activation.FileDataSource;
 14. import javax.mail.Message;
 15. import javax.mail.MessagingException;
 16. import javax.mail.Session;
 17. import javax.mail.internet.AddressException;
 18. import javax.mail.internet.InternetAddress;
 19. import javax.mail.internet.MimeBodyPart;
 20. import javax.mail.internet.MimeMessage;
 21. import javax.mail.internet.MimeMultipart;
 22. 
 23. // AWS SDK libraries. Download the AWS SDK for Java // from https://aws.amazon.com/sdk-for-java
 24. import com.amazonaws.regions.Regions;
 25. import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
 26. import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
 27. import com.amazonaws.services.simpleemail.model.RawMessage;
 28. import com.amazonaws.services.simpleemail.model.SendRawEmailRequest;
 29. 
 30. public class AmazonSESSample {
 31. 
 32. 	// Replace sender@example.com with your "From" address.
 33. 	// This address must be verified with Amazon SES.
 34. 	private static String SENDER = "Sender Name <sender@example.com>";
 35. 
 36. 	// Replace recipient@example.com with a "To" address. If your account 
 37. 	// is still in the sandbox, this address must be verified.
 38. 	private static String RECIPIENT = "recipient@example.com";
 39. 
 40. 	// Specify a configuration set. If you do not want to use a configuration
 41. 	// set, comment the following variable, and the 
 42. 	// ConfigurationSetName=CONFIGURATION_SET argument below.
 43. 	private static String CONFIGURATION_SET = "ConfigSet";
 44. 
 45. 	// The subject line for the email.
 46. 	private static String SUBJECT = "Customer service contact info";
 47. 
 48. 	// The full path to the file that will be attached to the email.
 49. 	// If you're using Windows, escape backslashes as shown in this variable.
 50. 	private static String ATTACHMENT = "C:\\Users\\sender\\customers-to-contact.xlsx";
 51. 
 52. 	// The email body for recipients with non-HTML email clients.
 53. 	private static String BODY_TEXT = "Hello,\r\n"
 54.                                         + "Please see the attached file for a list "
 55.                                         + "of customers to contact.";
 56. 
 57. 	// The HTML body of the email.
 58. 	private static String BODY_HTML = "<html>"
 59.                                         + "<head></head>"
 60.                                         + "<body>"
 61.                                         + "<h1>Hello!</h1>"
 62.                                         + "<p>Please see the attached file for a "
 63.                                         + "list of customers to contact.</p>"
 64.                                         + "</body>"
 65.                                         + "</html>";
 66. 
 67.     public static void main(String[] args) throws AddressException, MessagingException, IOException {
 68.             	
 69.     	Session session = Session.getDefaultInstance(new Properties());
 70.         
 71.         // Create a new MimeMessage object.
 72.         MimeMessage message = new MimeMessage(session);
 73.         
 74.         // Add subject, from and to lines.
 75.         message.setSubject(SUBJECT, "UTF-8");
 76.         message.setFrom(new InternetAddress(SENDER));
 77.         message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(RECIPIENT));
 78. 
 79.         // Create a multipart/alternative child container.
 80.         MimeMultipart msg_body = new MimeMultipart("alternative");
 81.         
 82.         // Create a wrapper for the HTML and text parts.        
 83.         MimeBodyPart wrap = new MimeBodyPart();
 84.         
 85.         // Define the text part.
 86.         MimeBodyPart textPart = new MimeBodyPart();
 87.         textPart.setContent(BODY_TEXT, "text/plain; charset=UTF-8");
 88.                 
 89.         // Define the HTML part.
 90.         MimeBodyPart htmlPart = new MimeBodyPart();
 91.         htmlPart.setContent(BODY_HTML,"text/html; charset=UTF-8");
 92.                 
 93.         // Add the text and HTML parts to the child container.
 94.         msg_body.addBodyPart(textPart);
 95.         msg_body.addBodyPart(htmlPart);
 96.         
 97.         // Add the child container to the wrapper object.
 98.         wrap.setContent(msg_body);
 99.         
100.         // Create a multipart/mixed parent container.
101.         MimeMultipart msg = new MimeMultipart("mixed");
102.         
103.         // Add the parent container to the message.
104.         message.setContent(msg);
105.         
106.         // Add the multipart/alternative part to the message.
107.         msg.addBodyPart(wrap);
108.         
109.         // Define the attachment
110.         MimeBodyPart att = new MimeBodyPart();
111.         DataSource fds = new FileDataSource(ATTACHMENT);
112.         att.setDataHandler(new DataHandler(fds));
113.         att.setFileName(fds.getName());
114.         
115.         // Add the attachment to the message.
116.         msg.addBodyPart(att);
117. 
118.         // Try to send the email.
119.         try {
120.             System.out.println("Attempting to send an email through Amazon SES "
121.                               +"using the AWS SDK for Java...");
122. 
123.             // Instantiate an Amazon SES client, which will make the service 
124.             // call with the supplied AWS credentials.
125.             AmazonSimpleEmailService client = 
126.                     AmazonSimpleEmailServiceClientBuilder.standard()
127.                     // Replace US_WEST_2 with the AWS Region you're using for
128.                     // Amazon SES.
129.                     .withRegion(Regions.US_WEST_2).build();
130.             
131.             // Print the raw email content on the console
132.             PrintStream out = System.out;
133.             message.writeTo(out);
134. 
135.             // Send the email.
136.             ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
137.             message.writeTo(outputStream);
138.             RawMessage rawMessage = 
139.             		new RawMessage(ByteBuffer.wrap(outputStream.toByteArray()));
140. 
141.             SendRawEmailRequest rawEmailRequest = 
142.             		new SendRawEmailRequest(rawMessage)
143.             		    .withConfigurationSetName(CONFIGURATION_SET);
144.             
145.             client.sendRawEmail(rawEmailRequest);
146.             System.out.println("Email sent!");
147.         // Display an error if something goes wrong.
148.         } catch (Exception ex) {
149.           System.out.println("Email Failed");
150.             System.err.println("Error message: " + ex.getMessage());
151.             ex.printStackTrace();
152.         }
153.     }
154. }
```

------
#### [ Python ]

次のコード例は、[Python email.mime](https://docs.python.org/3.8/library/email.mime.html) パッケージと [AWS SDK for Python (Boto)](https://aws.amazon.com/sdk-for-python) を使用して raw E メールを作成および送信する方法を示しています。

```
 1. import json
 2. import boto3
 3. from botocore.exceptions import ClientError
 4. from email.mime.multipart import MIMEMultipart
 5. from email.mime.text import MIMEText
 6. from email.mime.application import MIMEApplication
 7. import os
 8. 
 9. def boto3_rawemailv2():
10.     SENDER = "Sender <sender@example.com>"
11.     RECIPIENT = "recipient@example.com"
12.     CONFIGURATION_SET = "ConfigSet"
13.     AWS_REGION = "us-east-1"
14.     SUBJECT = "Customer service contact info"
15.     ATTACHMENT = "path/to/customers-to-contact.xlsx"
16.     BODY_TEXT = "Hello,\r\nPlease see the attached file for a list of customers to contact."
17. 
18.     # The HTML body of the email.
19.     BODY_HTML = """\
20.     <html>
21.     <head/>
22.     <body>
23.     <h1>Hello!</h1>
24.     <p>Please see the attached file for a list of customers to contact.</p>
25.     </body>
26.     </html>
27.     """
28. 
29.     # The character encoding for the email.
30.     CHARSET = "utf-8"
31.     msg = MIMEMultipart('mixed')
32.     # Add subject, from and to lines.
33.     msg['Subject'] = SUBJECT 
34.     msg['From'] = SENDER 
35.     msg['To'] = RECIPIENT
36.     
37.     # Create a multipart/alternative child container.
38.     msg_body = MIMEMultipart('alternative')
39.     
40.     # Encode the text and HTML content and set the character encoding. This step is
41.     # necessary if you're sending a message with characters outside the ASCII range.
42.     textpart = MIMEText(BODY_TEXT.encode(CHARSET), 'plain', CHARSET)
43.     htmlpart = MIMEText(BODY_HTML.encode(CHARSET), 'html', CHARSET)
44.     
45.     # Add the text and HTML parts to the child container.
46.     msg_body.attach(textpart)
47.     msg_body.attach(htmlpart)
48.     
49.     # Define the attachment part and encode it using MIMEApplication.
50.     att = MIMEApplication(open(ATTACHMENT, 'rb').read())
51.     
52.     # Add a header to tell the email client to treat this part as an attachment,
53.     # and to give the attachment a name.
54.     att.add_header('Content-Disposition','attachment',filename=os.path.basename(ATTACHMENT))
55.     
56.     # Attach the multipart/alternative child container to the multipart/mixed
57.     # parent container.
58.     msg.attach(msg_body)
59.     msg.attach(att)
60. 
61.     #changes start from here
62.     strmsg = str(msg)
63.     body = bytes (strmsg, 'utf-8')
64. 
65. 
66. 
67.     
68.     client = boto3.client('sesv2')
69.     response = client.send_email(
70.     FromEmailAddress=SENDER,
71.     Destination={
72.         'ToAddresses': [RECIPIENT]
73.     },
74.     Content={
75.         'Raw': {
76.             'Data': body
77.         }
78.     }
79.     )
80.     print(response)
81. boto3_rawemailv2 ()
```

------

# テンプレートを使用して、Amazon SES API でパーソナライズされた E メールを送信する
<a name="send-personalized-email-api"></a>

Amazon SES では、*保存済みテンプレート*を使用するか、*インラインテンプレート*を使用して、テンプレートに基づく E メールを送信できます。
+ **保存済みテンプレート** – Amazon SES v2 API の `CreateEmailTemplate` オペレーションを使用して SES で作成および保存される [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html) リソースを指します。このテンプレートには、書き込まれたコンテンツとインラインで変数 (プレースホルダー) を含む E メールの件名と本文が含まれています。保存済みテンプレートの名前とテンプレート内のプレースホルダー変数への動的データは、`SendEmail` または v2 API `SendBulkEmail` オペレーションを呼び出すときに提供されます。

  *保存済みテンプレート*は簡単に再利用でき、似たような種類の E メールを送信する際の時間と労力を減らすことができます。各 E メールをゼロから作成する代わりに、基本構造と設計を一度作成すれば、後はテンプレート内の動的コンテンツを更新するだけで済みます。
+ **インラインテンプレート** – `Template` リソースは使用されません。代わりに、作成されたコンテンツとインラインで変数 (プレースホルダー) を含む E メールの件名と本文が、これらのプレースホルダー変数の値とともに、`SendEmail` または v2 API `SendBulkEmail` オペレーションを呼び出すときに提供されます。

  *インラインテンプレート*は、アプリケーションロジック内にテンプレートコンテンツを直接含められるようにすることで、SES アカウントのテンプレートリソースを管理する必要をなくし、統合プロセスを簡素にします。これにより、一括 E メールを送信するプロセスを効率化します。あたりの 20,000 テンプレートの制限にはカウントされません AWS リージョン。

*保存済みテンプレート*を使用する場合、次の制限が適用されます。
+ それぞれに最大 20,000 個の E メールテンプレートを作成できます AWS リージョン。
+ 各テンプレートは、テキストと HTML パートの両方を含めて、最大 500 KB のサイズまで可能です。

*インラインテンプレート*を使用する場合、次の制限が適用されます。
+ 各入力 JSON ファイルは、テキスト部分と HTML 部分の両方を含めて、最大 1 MB のサイズにすることができます。

以下は、*保存済みテンプレート*と*インラインテンプレート*の両方に適用されます。
+ 使用できる置換変数の数に制限はありません。
+ `SendBulkEmail` オペレーションの呼び出しごとに、最大 50 個の送信先オブジェクトに E メールを送信できます。[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html) オブジェクトには、**ToAddresses**、**CcAddresses**、および **BccAddresses** で定義された複数の受信者を含めることができます。1 回の v2 API の呼び出しで連絡できる送信先の数が、アカウントの最大送信レートによって制限される場合があります。詳細については、「[Amazon SES 送信制限の管理](manage-sending-quotas.md)」を参照してください。

この章には、*保存済みテンプレート*と*インラインテンプレート*の両方を使用する例を含む手順が含まれています。

**注記**  
これらの手順では、 AWS CLIがすでにインストールされ、設定されていることを前提としています。のインストールと設定の詳細については AWS CLI、 [AWS Command Line Interface ユーザーガイド](https://docs.aws.amazon.com/cli/latest/userguide/)を参照してください。

## (オプション) パート 1: レンダリング失敗イベント通知を設定する
<a name="send-personalized-email-set-up-notifications"></a>

 無効なパーソナライズコンテンツを含む E メールを送信する場合、Amazon SES はメッセージを受け入れることもありますが、配信することはできません。このため、パーソナライズされた E メールを送信する場合、Amazon SNS を通じてレンダリング失敗イベント通知を送信するように SES を設定する必要があります。レンダリング失敗イベント通知を受信した場合、無効なコンテンツが含まれていたメッセージを確認し、問題を修正して、もう一度メッセージを送信できます。

このセクションの手順はオプションですが、強くお勧めします。

**レンダリング失敗イベント通知を設定するには**

1. Amazon SNS トピックを作成する。手続きについては、Amazon Simple Notification Service デベロッパーガイドの*トピックの作成*を参照してください。

1. Amazon SNS トピックを購読します。たとえば、E メールでレンダリング失敗通知を受信する場合は、そのトピックを E メールエンドポイント (E メールアドレス) で購読する必要があります。

   手順については、[Amazon Simple Notification Service デベロッパーガイド](https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html)の*トピックを購読する*を参照してください。

1. 「[イベント発行の Amazon SNS イベント送信先のセットアップ](event-publishing-add-event-destination-sns.md)」の手順を完了して、設定セットをセットアップし、レンダリング失敗イベントを Amazon SNS トピックに発行します。

## (オプション) パート 2: E メールのテンプレートを作成する
<a name="send-personalized-email-create-template"></a>

*保存済みテンプレート*を使用する場合、このセクションでは、SES [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html) v2 API オペレーションを使用してテンプレートを作成する方法を示します。*インラインテンプレート*を使用する場合は、このステップをスキップできます。

この手順は、 AWS CLIがすでにインストールされ、設定されていることを前提としています。のインストールと設定の詳細については AWS CLI、 [AWS Command Line Interface ユーザーガイド](https://docs.aws.amazon.com/cli/latest/userguide/)を参照してください。

**テンプレートを作成するには**

1. テキストエディタで、新しいファイルを作成し、必要に応じてこのファイルをカスタマイズする次のコードを貼り付けます。

   ```
   {
       "TemplateName": "MyTemplate",
       "TemplateContent": {
           "Subject": "Greetings, {{name}}!",
           "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
           "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
       }
   }
   ```

   このコードには次のプロパティが含まれています。
   + **TemplateName** – `Template` リソースの名前。E メールを送信する場合に、この名前を参照します。
   + **TemplateContent** – 次の属性のコンテナ。
     + [**Subject**] – E メールの件名です。このプロパティには、置換タグが含まれる場合があります。これらのタグは以下のフォーマットを使用します: `{{tagname}}`。E メールを送信するとき、各宛先の `tagname` に対する値を指定できます。
     + **Html** – E メールの HTML 本文。このプロパティには、置換タグが含まれる場合があります。前述の例には、`{{name}}` および `{{favoriteanimal}}` の 2 つのタグが含まれます。
     + **Text** – E メールのテキスト本文。E メールクライアントに HTML コンテンツが表示されない受信者には、このバージョンの E メールが表示されます。また、このプロパティには置換タグが含まれる場合があります。

1. 前の例をニーズに合わせてカスタマイズし、*mytemplate.json* ファイルとして保存します。

1. コマンドラインで次のコマンドを入力し、[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html) v2 API オペレーションを使用して新しいテンプレートを作成します。

   ```
   aws sesv2 create-email-template --cli-input-json file://mytemplate.json
   ```

## パート 3: パーソナライズされた E メールを送信する
<a name="send-personalized-email-api-operations"></a>

次の 2 つの SES v2 API オペレーションを使用して、*保存済みテンプレート*または*インラインテンプレート*で E メールを送信できます。
+ [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) オペレーションは、カスタマイズされた E メールを 1 つの送信先オブジェクトに送信するために役立ちます。v2 API [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html) オブジェクトには、*ToAddresses*、*CcAddresses*、および *BccAddresses* の各プロパティを含めることができます。これらは任意の組み合わせで使用でき、同じ E メールを受信する 1 つ以上の E メールアドレスを含めることができます。
+ [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html) オペレーションは、v2 API への単一の呼び出しで複数の送信先オブジェクトそれぞれに独自の E メールを送信するために役立ちます。

このセクションでは、 を使用して、これらの AWS CLI 送信オペレーションの両方を使用してテンプレート化された E メールを送信する方法の例を示します。

### 単一の送信先オブジェクトにテンプレートに基づく E メールを送信する
<a name="send-templated-email-single-destination"></a>

[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) オペレーションを使用して、1 つの送信先オブジェクトで定義された 1 人以上の受信者に E メールを送信できます。[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html) オブジェクトにあるすべての受信者に、同じ E メールが届きます。

**単一の送信先オブジェクトにテンプレートに基づく E メールを送信するには**

1. *保存済みテンプレート*を使用するか*インラインテンプレート*を使用するかに応じて、テキストエディタに貼り付けるそれぞれのコード例を選択し、必要に応じてカスタマイズします。

------
#### [ Stored template code example ]

   前のステップで作成したテンプレート *MyTemplate* が `TemplateName` パラメータの値として参照されていることに注意してください。

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "Destination": {
           "ToAddresses": [
               "alejandro.rosalez@example.com", "jimmy.jet@example.com"
           ]
       },
       "Content": {
           "Template": {
               "TemplateName": "MyTemplate",
               "TemplateData": "{ \"name\":\"Alejandro\", \"favoriteanimal\": \"alligator\" }"
           }
       },
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   このコードには次のプロパティが含まれています。
   + **FromEmailAddress** – 送信者の E メールアドレス。
   + **送信先** – *ToAddresses*、*CcAddresses*、および *BccAddresses* の各プロパティで定義された E メール受信者を含むオブジェクト。これらは任意の組み合わせで使用でき、同じ E メールを受信する 1 つ以上の E メールアドレスを含めることができます。
   + **TemplateName** – E メールに対して適用する `Template` リソースの名前。
   + **TemplateData** – キーと値のペアを含むエスケープされた JSON 文字列。キーは保存済みテンプレートの `TemplateContent` プロパティに定義された変数 (`{{name}}` など) に対応します。値は変数を置き換える内容を表します。
   + **ConfigurationSetName** – E メールを送信するときに使用する設定セットの名前。
**注記**  
レンダリング失敗イベントを Amazon SNS に発行するように設定された設定セットを使用することをお勧めします。詳細については、「[(オプション) パート 1: レンダリング失敗イベント通知を設定する](#send-personalized-email-set-up-notifications)」を参照してください。

------
#### [ Inline template code example ]

   `TemplateContent` プロパティ (通常は*保存済みテンプレート*で定義) は、これを*インライン*テンプレートにする `TemplateData` プロパティとともに*インライン*で定義されていることに注意してください。

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "Destination": {
           "ToAddresses": [
               "alejandro.rosalez@example.com", "jimmy.jet@example.com"
           ]
       },
       "Content": {
           "Template": {
               "TemplateContent": {
                   "Subject": "Greetings, {{name}}!",
                   "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
                   "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
               },
               "TemplateData": "{ \"name\":\"Alejandro\", \"favoriteanimal\": \"alligator\" }"
           }
       },
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   このコードには次のプロパティが含まれています。
   + **FromEmailAddress** – 送信者の E メールアドレス。
   + **送信先** – *ToAddresses*、*CcAddresses*、および *BccAddresses* の各プロパティで定義された E メール受信者を含むオブジェクト。これらは任意の組み合わせで使用でき、同じ E メールを受信する 1 つ以上の E メールアドレスを含めることができます。
   + **TemplateContent** – 次の属性のコンテナ。
     + [**Subject**] – E メールの件名です。このプロパティには、置換タグが含まれる場合があります。これらのタグは以下のフォーマットを使用します: `{{tagname}}`。E メールを送信するとき、各宛先の `tagname` に対する値を指定できます。
     + **Html** – E メールの HTML 本文。このプロパティには、置換タグが含まれる場合があります。前述の例には、`{{name}}` および `{{favoriteanimal}}` の 2 つのタグが含まれます。
     + **Text** – E メールのテキスト本文。E メールクライアントに HTML コンテンツが表示されない受信者には、このバージョンの E メールが表示されます。また、このプロパティには置換タグが含まれる場合があります。
   + **TemplateData** – キーと値のペアを含むエスケープされた JSON 文字列。キーは、`{{name}}` など、このファイルの `TemplateContent` プロパティで定義された変数に対応します。値は変数を置き換える内容を表します。
   + **ConfigurationSetName** – E メールを送信するときに使用する設定セットの名前。
**注記**  
レンダリング失敗イベントを Amazon SNS に発行するように設定された設定セットを使用することをお勧めします。詳細については、「[(オプション) パート 1: レンダリング失敗イベント通知を設定する](#send-personalized-email-set-up-notifications)」を参照してください。

------

1. 前の例をニーズに合わせてカスタマイズし、*myemail.json* ファイルとして保存します。

1. コマンドラインで、次の v2 API コマンドを入力して E メールを送信します。

   ```
   aws sesv2 send-email --cli-input-json file://myemail.json
   ```

### 複数の送信先オブジェクトにテンプレートに基づく E メールを送信する
<a name="send-templated-email-multiple-destinations"></a>

[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html) オペレーションを使用して、SES v2 API への単一の呼び出しで、複数の送信先オブジェクトにメールを送信できます。SES は、各 [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html) オブジェクトで、1 名または複数の受信者それぞれに独自の E メールを送信します。

**複数の送信先オブジェクトにテンプレートに基づく E メールを送信するには**

1. *保存済みテンプレート*を使用するか*インラインテンプレート*を使用するかに応じて、テキストエディタに貼り付けるそれぞれのコード例を選択し、必要に応じてカスタマイズします。

------
#### [ Stored template code example ]

   前のステップで作成したテンプレート *MyTemplate* が `TemplateName` パラメータの値として参照されていることに注意してください。

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "DefaultContent": {
           "Template": {
               "TemplateName": "MyTemplate",
               "TemplateData": "{ \"name\":\"friend\", \"favoriteanimal\":\"unknown\" }"
           }
       },
       "BulkEmailEntries": [
           {
               "Destination": {
                   "ToAddresses": [
                       "anaya.iyengar@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Anaya\", \"favoriteanimal\":\"angelfish\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "liu.jie@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Liu\", \"favoriteanimal\":\"lion\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "shirley.rodriguez@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Shirley\", \"favoriteanimal\":\"shark\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "richard.roe@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{}"
                   }
               }
           }
       ],
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   このコードには次のプロパティが含まれています。
   + **FromEmailAddress** – 送信者の E メールアドレス。
   + **DefaultContent** – `TemplateName` および `TemplateData` オブジェクトを含む JSON オブジェクト。
   + **TemplateName** – E メールに対して適用する `Template` リソースの名前。
   + **TemplateData** – `ReplacementEmailContent` オブジェクトで空の JSON オブジェクト `{}` が `ReplacementTemplateData` プロパティに含まれている場合に使用されるキーと値のペアが含まれます。
   + **BulkEmailEntries** – 1 つ以上の `Destination` オブジェクトを含む配列。
   + **送信先** – *ToAddresses*、*CcAddresses*、および *BccAddresses* の各プロパティで定義された E メール受信者を含むオブジェクト。これらは任意の組み合わせで使用でき、同じ E メールを受信する 1 つ以上の E メールアドレスを含めることができます。
   + **ReplacementTemplateData** – キーと値のペアを含むエスケープされた JSON 文字列。キーはテンプレート内の変数 (`{{name}}` など) に対応します。値は E メール内の変数を置き換える内容を表します。(ここで JSON 文字列が空で、`{}` で示されている場合、`DefaultContent` オブジェクト内の `TemplateData` プロパティで定義されたキーと値のペアが使用されます)。
   + **ConfigurationSetName** – E メールを送信するときに使用する設定セットの名前。
**注記**  
レンダリング失敗イベントを Amazon SNS に発行するように設定された設定セットを使用することをお勧めします。詳細については、「[(オプション) パート 1: レンダリング失敗イベント通知を設定する](#send-personalized-email-set-up-notifications)」を参照してください。

------
#### [ Inline template code example ]

   `TemplateContent` プロパティ (通常は*保存済みテンプレート*で定義) は、これを*インライン*テンプレートにする `TemplateData` プロパティとともに*インライン*で定義されていることに注意してください。

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "DefaultContent": {
           "Template": {
               "TemplateContent": {
                   "Subject": "Greetings, {{name}}!",
                   "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
                   "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
               },
               "TemplateData": "{ \"name\":\"friend\", \"favoriteanimal\":\"unknown\" }"
           }
       },
       "BulkEmailEntries": [
           {
               "Destination": {
                   "ToAddresses": [
                       "anaya.iyengar@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Anaya\", \"favoriteanimal\":\"angelfish\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "liu.jie@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Liu\", \"favoriteanimal\":\"lion\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "shirley.rodriguez@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Shirley\", \"favoriteanimal\":\"shark\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "richard.roe@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{}"
                   }
               }
           }
       ],
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   このコードには次のプロパティが含まれています。
   + **FromEmailAddress** – 送信者の E メールアドレス。
   + **DefaultContent** – `TemplateContent` および `TemplateData` オブジェクトを含む JSON オブジェクト。
   + **TemplateContent** – 次の属性のコンテナ。
     + [**Subject**] – E メールの件名です。このプロパティには、置換タグが含まれる場合があります。これらのタグは以下のフォーマットを使用します: `{{tagname}}`。E メールを送信するとき、各宛先の `tagname` に対する値を指定できます。
     + **Html** – E メールの HTML 本文。このプロパティには、置換タグが含まれる場合があります。前述の例には、`{{name}}` および `{{favoriteanimal}}` の 2 つのタグが含まれます。
     + **Text** – E メールのテキスト本文。E メールクライアントに HTML コンテンツが表示されない受信者には、このバージョンの E メールが表示されます。また、このプロパティには置換タグが含まれる場合があります。
   + **TemplateData** – `ReplacementEmailContent` オブジェクトで空の JSON オブジェクト `{}` が `ReplacementTemplateData` プロパティに含まれている場合に使用されるキーと値のペアが含まれます。
   + **BulkEmailEntries** – 1 つ以上の `Destination` オブジェクトを含む配列。
   + **送信先** – *ToAddresses*、*CcAddresses*、および *BccAddresses* の各プロパティで定義された E メール受信者を含むオブジェクト。これらは任意の組み合わせで使用でき、同じ E メールを受信する 1 つ以上の E メールアドレスを含めることができます。
   + **ReplacementTemplateData** – キーと値のペアを含むエスケープされた JSON 文字列。キーは、`{{name}}` など、このファイルの `TemplateContent` プロパティで定義された変数に対応します。値は E メール内の変数を置き換える内容を表します。(ここで JSON 文字列が空で、`{}` で示されている場合、`DefaultContent` オブジェクト内の `TemplateData` プロパティで定義されたキーと値のペアが使用されます)。
   + **ConfigurationSetName** – E メールを送信するときに使用する設定セットの名前。
**注記**  
レンダリング失敗イベントを Amazon SNS に発行するように設定された設定セットを使用することをお勧めします。詳細については、「[(オプション) パート 1: レンダリング失敗イベント通知を設定する](#send-personalized-email-set-up-notifications)」を参照してください。

------

1. ニーズに合わせて上記のステップでコードの値を変更し、*mybulkemail.json* としてファイルを保存します。

1. コマンドラインで、次の v2 API コマンドを入力して一括 E メールを送信します。

   ```
   aws sesv2 send-bulk-email --cli-input-json file://mybulkemail.json
   ```

# E メールの高度なパーソナライズ
<a name="send-personalized-email-advanced"></a>

 *保存済みテンプレート*を使用している場合、つまり SES v2 API で `CreateEmailTemplate` オペレーションを使用して Amazon SES で [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html) リソースを作成した場合、Handlebars システムを活用して、ネストされた属性、配列のイテレーション、基本的な条件ステートメント、インライン部分の作成などの高度な機能を含むテンプレートを作成できます。このセクションでは、これらの機能の例を示します。

このセクションに記載されている機能の他にも、Handlebars にはさまざまな機能を提供します。詳細については、[handlebarsjs.com](https://handlebarsjs.com/guide/builtin-helpers.html) の「[Built-In Helpers](http://handlebarsjs.com)」を参照してください。

**注記**  
SES は、メッセージの HTML テンプレートをレンダリングするときに HTML コンテンツをエスケープしません。つまり、コンタクトフォームなどのユーザー入力データを含める場合は、クライアント側でエスケープする必要があります。

**Topics**
+ [入れ子の属性の解析](#send-personalized-email-advanced-nested)
+ [リストに対する反復処理](#send-personalized-email-advanced-iterating)
+ [基本的な条件ステートメントの使用](#send-personalized-email-advanced-conditionals)
+ [インラインパーシャルの作成](#send-personalized-email-advanced-inline-partials)

## 入れ子の属性の解析
<a name="send-personalized-email-advanced-nested"></a>

Handlebars には入れ子パスのサポートが含まれています。入れ子パスを使うことで、複雑な顧客データを簡単に整理し、E メールテンプレート内でそのデータを参照できるようになります。

たとえば、受信者のデータをいくつかの一般的なカテゴリで整理し、各カテゴリに詳細な情報を含めることができます。以下のコード例は、このような構造を 1 人の受信者で実現しています。

```
{
  "meta":{
    "userId":"51806220607"
  },
  "contact":{
    "firstName":"Anaya",
    "lastName":"Iyengar",
    "city":"Bengaluru",
    "country":"India",
    "postalCode":"560052"
  },
  "subscription":[
    {
      "interest":"Sports"
    },
    {
      "interest":"Travel"
    },
    {
      "interest":"Cooking"
    }
  ]
}
```

E メールテンプレートで入れ子の属性を参照するには、親属性の名前、ピリオド (.)、値を含める属性の名前の順に指定します。たとえば前述の例で示したデータ構造を使用し、それぞれの受信者のファーストネームを E メールテンプレートに含める場合は、次のテキストを E メールテンプレートに含めます。`Hello {{contact.firstName}}!`

Handlebars は、複数の階層にわたって入れ子になったパスを解析できます。つまり、テンプレートのデータ構造を柔軟に設定することができます。

## リストに対する反復処理
<a name="send-personalized-email-advanced-iterating"></a>

`each`ヘルパー関数は、配列内の項目を反復処理します。以下のコード例の E メールテンプレートでは、`each`ヘルパー関数を使用して、それぞれの受信者の関心を項目別に記載したリストを作成しています。

```
{
  "Template": {
    "TemplateName": "Preferences",
    "SubjectPart": "Subscription Preferences for {{contact.firstName}} {{contact.lastName}}",
    "HtmlPart": "<h1>Your Preferences</h1>
                 <p>You have indicated that you are interested in receiving 
                   information about the following subjects:</p>
                 <ul>
                   {{#each subscription}}
                     <li>{{interest}}</li>
                   {{/each}}
                 </ul>
                 <p>You can change these settings at any time by visiting 
                    the <a href=https://www.example.com/prefererences/i.aspx?id={{meta.userId}}>
                    Preference Center</a>.</p>",
    "TextPart": "Your Preferences\n\nYou have indicated that you are interested in 
                 receiving information about the following subjects:\n
                 {{#each subscription}}
                   - {{interest}}\n
                 {{/each}}
                 \nYou can change these settings at any time by 
                 visiting the Preference Center at 
                 https://www.example.com/prefererences/i.aspx?id={{meta.userId}}"
  }
}
```

**重要**  
上記のコード例の `HtmlPart`および`TextPart`属性には、読みやすくするための改行が含まれています。テンプレートの JSON ファイルでは、これらの値に改行を含めることはできません。この例を独自の JSON ファイルにコピーして貼り付ける場合は、`HtmlPart` および`TextPart`セクションの改行と不要なスペースを削除してから次に進んでください。

テンプレートを作成したら、`SendEmail`または`SendBulkEmail`オペレーションを使用し、このテンプレートを使って受信者に E メールを送信します。`Interests`オブジェクトに値が少なくとも 1 つあれば、それぞれの受信者は、項目別の関心リストを含む E メールを受信します。以下の例は、上記のテンプレートを使用した複数の受信者への E メール送信に使用できる JSON ファイルを示しています。

```
{
  "Source":"Sender Name <sender@example.com>",
  "Template":"Preferences",
  "Destinations":[
    {
      "Destination":{
        "ToAddresses":[
          "anaya.iyengar@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"51806220607\"},\"contact\":{\"firstName\":\"Anaya\",\"lastName\":\"Iyengar\"},\"subscription\":[{\"interest\":\"Sports\"},{\"interest\":\"Travel\"},{\"interest\":\"Cooking\"}]}"
      },
    {
      "Destination":{ 
        "ToAddresses":[
          "shirley.rodriguez@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"1981624758263\"},\"contact\":{\"firstName\":\"Shirley\",\"lastName\":\"Rodriguez\"},\"subscription\":[{\"interest\":\"Technology\"},{\"interest\":\"Politics\"}]}"
    }
  ],
  "DefaultTemplateData":"{\"meta\":{\"userId\":\"\"},\"contact\":{\"firstName\":\"Friend\",\"lastName\":\"\"},\"subscription\":[]}"
}
```

上記の例でリストされた受信者に`SendBulkEmail` オペレーションを使用して E メールを送信すると、受信者には以下の画像のようなメッセージが届きます。

![\[Preferences notification listing Sports, Travel, and Cooking as selected interests.\]](http://docs.aws.amazon.com/ja_jp/ses/latest/dg/images/send-personalized-email-advanced-condition-interest.png)


## 基本的な条件ステートメントの使用
<a name="send-personalized-email-advanced-conditionals"></a>

このセクションの内容は、前のセクションで説明した例に基づいています。前のセクションの例では、`each`ヘルパーを使用して関心のリストを反復処理しています。ただし、関心が指定されていない受信者には、空白のリストが記載された E メールが届くことになります。`{{if}}`ヘルパーを使用すると、テンプレート内のデータに特定の属性が存在する場合に、E メールに異なるフォーマットを適用することができます。以下のコードでは、`{{if}}` ヘルパーを使用して、`Subscription` 配列に何らかの値が含まれている場合に、前のセクションの箇条書きリストを表示しています。配列が空の場合、別のテキストブロックが表示されます。

```
{
  "Template": {
    "TemplateName": "Preferences2",
    "SubjectPart": "Subscription Preferences for {{contact.firstName}} {{contact.lastName}}",
    "HtmlPart": "<h1>Your Preferences</h1>
                 <p>Dear {{contact.firstName}},</p>
                 {{#if subscription}}
                   <p>You have indicated that you are interested in receiving 
                     information about the following subjects:</p>
                     <ul>
                     {{#each subscription}}
                       <li>{{interest}}</li>
                     {{/each}}
                     </ul>
                     <p>You can change these settings at any time by visiting 
                       the <a href=https://www.example.com/prefererences/i.aspx?id={{meta.userId}}>
                       Preference Center</a>.</p>
                 {{else}}
                   <p>Please update your subscription preferences by visiting 
                     the <a href=https://www.example.com/prefererences/i.aspx?id={{meta.userId}}>
                     Preference Center</a>.
                 {{/if}}",
    "TextPart": "Your Preferences\n\nDear {{contact.firstName}},\n\n
                 {{#if subscription}}
                   You have indicated that you are interested in receiving 
                   information about the following subjects:\n
                   {{#each subscription}}
                     - {{interest}}\n
                   {{/each}}
                   \nYou can change these settings at any time by visiting the 
                   Preference Center at https://www.example.com/prefererences/i.aspx?id={{meta.userId}}.
                 {{else}}
                   Please update your subscription preferences by visiting the 
                   Preference Center at https://www.example.com/prefererences/i.aspx?id={{meta.userId}}.
                 {{/if}}"
  }
}
```

**重要**  
上記のコード例の`HtmlPart`および`TextPart`属性には、読みやすくするための改行が含まれています。テンプレートの JSON ファイルでは、これらの値に改行を含めることはできません。この例を独自の JSON ファイルにコピーして貼り付ける場合は、`HtmlPart`および`TextPart`セクションの改行と不要なスペースを削除してから次に進んでください。

以下の例は、上記のテンプレートを使用した複数の受信者への E メール送信に使用できる JSON ファイルを示しています。

```
{
  "Source":"Sender Name <sender@example.com>",
  "Template":"Preferences2",
  "Destinations":[
    {
      "Destination":{
        "ToAddresses":[
          "anaya.iyengar@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"51806220607\"},\"contact\":{\"firstName\":\"Anaya\",\"lastName\":\"Iyengar\"},\"subscription\":[{\"interest\":\"Sports\"},{\"interest\":\"Cooking\"}]}"
      },
    {
      "Destination":{ 
        "ToAddresses":[
          "shirley.rodriguez@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"1981624758263\"},\"contact\":{\"firstName\":\"Shirley\",\"lastName\":\"Rodriguez\"}}"
    }
  ],
  "DefaultTemplateData":"{\"meta\":{\"userId\":\"\"},\"contact\":{\"firstName\":\"Friend\",\"lastName\":\"\"},\"subscription\":[]}"
}
```

この例の場合、テンプレートのデータに関心リストが含まれている受信者は、前のセクションで示した例と同じ E メールを受け取ります。一方、テンプレートデータに関心が含まれていない受信者には、以下の画像のような E メールが届きます。

![\[Email message with header "Your Preferences" and text about updating subscription preferences.\]](http://docs.aws.amazon.com/ja_jp/ses/latest/dg/images/send-personalized-email-advanced-condition-nointerest.png)


## インラインパーシャルの作成
<a name="send-personalized-email-advanced-inline-partials"></a>

インラインパーシャルを使用して、文字列の繰り返しを含むテンプレートを簡素化することができます。たとえば、テンプレートの先頭に以下のコードを追加することで、受信者のファーストネームと (存在する場合は) ラストネームを含むインラインパーシャルを作成できます。

```
{{#* inline \"fullName\"}}{{firstName}}{{#if lastName}} {{lastName}}{{/if}}{{/inline}}\n
```

**注記**  
テンプレートの内容と`\n` ブロックを分離するためには、改行文字 (`{{inline}}`) が必要です。最終的な出力には改行は表示されません。

`fullName`パーシャルを作成したら、以下の例のように、大なり記号 (>)、スペース、パーシャルの名前を指定することで (`{{> fullName}}`)、このパーシャルをテンプレートの任意の場所に含めることができます。インラインパーシャルは、メールの特定部分をまたがって適用されません。たとえば E メールの HTML バージョンとテキストバージョンに同じインラインパーシャルを使用する場合、`HtmlPart`および`TextPart`セクションの両方に、このインラインパーシャルを定義する必要があります。

インラインパーシャルを、配列を反復処理する際に使用することもできます。以下のコードを使用して、`fullName`インラインパーシャルを使用するテンプレートを作成できます。この例では、受信者の名前とその他の名前の配列の両方に、インラインパーシャルが適用されています。

```
{
  "Template": {
    "TemplateName": "Preferences3",
    "SubjectPart": "{{firstName}}'s Subscription Preferences",
    "HtmlPart": "{{#* inline \"fullName\"}}
                   {{firstName}}{{#if lastName}} {{lastName}}{{/if}}
                 {{/inline~}}\n
                 <h1>Hello {{> fullName}}!</h1>
                 <p>You have listed the following people as your friends:</p>
                 <ul>
                 {{#each friends}}
                   <li>{{> fullName}}</li>
                 {{/each}}</ul>",
    "TextPart": "{{#* inline \"fullName\"}}
                   {{firstName}}{{#if lastName}} {{lastName}}{{/if}}
                 {{/inline~}}\n
                 Hello {{> fullName}}! You have listed the following people 
                 as your friends:\n
                 {{#each friends}}
                   - {{> fullName}}\n
                 {{/each}}"
  }
}
```

**重要**  
上記のコード例の`HtmlPart`および`TextPart`属性には、読みやすくするための改行が含まれています。テンプレートの JSON ファイルでは、これらの値に改行を含めることはできません。この例を独自の JSON ファイルにコピーして貼り付ける場合は、これらのセクションの改行と不要なスペースを削除してください。

# E メールテンプレートの管理
<a name="send-personalized-email-manage-templates"></a>

[E メールテンプレート](send-personalized-email-api.md)の作成に加えて、Amazon SES v2 API を使用して、既存のテンプレートを更新または削除したり、既存のすべてのテンプレートを一覧表示したり、テンプレートの内容を表示したりできます。

このセクションでは、 AWS CLI を使用して SES テンプレートに関連するタスクを実行する手順について説明します。

**注記**  
これらの手順では、 AWS CLIがすでにインストールされ、設定されていることを前提としています。のインストールと設定の詳細については AWS CLI、 [AWS Command Line Interface ユーザーガイド](https://docs.aws.amazon.com/cli/latest/userguide/)を参照してください。

## E メールテンプレートの一覧表示
<a name="send-personalized-email-manage-templates-list"></a>

SES v2 API オペレーション [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_ListEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_ListEmailTemplate.html) を使用して、既存の E メールテンプレートのリストを表示します。

**E メールテンプレートの一覧を表示するには**
+ コマンドラインで以下のコマンドを入力します。

  ```
  aws sesv2 list-email-templates
  ```

  現在のリージョンの SES アカウントに既存の E メールテンプレートがある場合、このコマンドは次の例のようなレスポンスを返します。

  ```
  {
      "TemplatesMetadata": [
          {
              "Name": "SpecialOffers",
              "CreatedTimestamp": "2020-08-05T16:04:12.640Z"
          },
          {
              "Name": "NewsAndUpdates",
              "CreatedTimestamp": "2019-10-03T20:03:34.574Z"
          }
      ]
  }
  ```

  テンプレートをまだ作成していない場合、このコマンドはメンバーのいない`TemplatesMetadata`オブジェクトを返します。

## 特定の E メール テンプレートの内容の表示
<a name="send-personalized-email-manage-templates-get"></a>

SES v2 API オペレーション [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html) を使用して、特定の E メールテンプレートの内容を表示できます。

**E メールテンプレートの内容を表示するには**
+ コマンドラインで以下のコマンドを入力します。

  ```
  aws sesv2 get-email-template --template-name MyTemplate
  ```

  上記のコマンドで、*MyTemplate*を、表示したいテンプレートの名前に置き換えます。

  指定したテンプレート名が SES アカウントに存在するテンプレートと一致する場合、このコマンドは次の例のようなレスポンスを返します。

  ```
  {
      "Template": {
          "TemplateName": "TestMessage",
          "SubjectPart": "Amazon SES Test Message",
          "TextPart": "Hello! This is the text part of the message.",
          "HtmlPart": "<html>\n<body>\n<h2>Hello!</h2>\n<p>This is the HTML part of the message.</p></body>\n</html>"
      }
  }
  ```

  指定したテンプレート名が SES アカウントに存在するテンプレートと一致しない場合、このコマンドは `NotFoundException` エラーを返します。

## E メールテンプレートの削除
<a name="send-personalized-email-manage-templates-delete"></a>

SES v2 API オペレーション [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_DeleteEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_DeleteEmailTemplate.html) を使用して、特定の E メールテンプレートを削除できます。

**E メールテンプレートを削除する**
+ コマンドラインで以下のコマンドを入力します。

  ```
  aws sesv2 delete-email-template --template-name MyTemplate
  ```

  前述のコマンドで、*MyTemplate* を削除するテンプレート名で置き換えます。

  このコマンドは出力を提供しません。[GetTemplate](#send-personalized-email-manage-templates-get) オペレーションを使用して、テンプレートが削除されたことを確認できます。

## E メールテンプレートの更新
<a name="send-personalized-email-manage-templates-update"></a>

SES v2 API オペレーション [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_UpdateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_UpdateEmailTemplate.html) を使用して、既存の E メールテンプレートを更新できます。たとえば、このオペレーションは、E メールテンプレートの件名を変更する場合や、メッセージの本文を変更する必要がある場合に役立ちます。

**E メールテンプレートを更新する**

1. `GetEmailTemplate` コマンドを使用し、コマンドラインに次のコマンドを入力して、既存のテンプレートを取得できます。

   ```
   aws sesv2 get-email-template --template-name MyTemplate
   ```

   上記のコマンドで、*MyTemplate*を、テンプレートの更新名に置き換えます。

   指定したテンプレート名が SES アカウントに存在するテンプレートと一致する場合、このコマンドは次の例のようなレスポンスを返します。

   ```
   {
       "Template": {
           "TemplateName": "TestMessage",
           "SubjectPart": "Amazon SES Test Message",
           "TextPart": "Hello! This is the text part of the message.",
           "HtmlPart": "<html>\n<body>\n<h2>Hello!</h2>\n<p>This is the HTML part of the message.</p></body>\n</html>"
       }
   }
   ```

1. テキストエディタで新規ファイルを作成します。前のコマンドの出力をファイルに貼り付けます。

1. 必要に応じてテンプレートを変更します。省略した行は、テンプレートから削除されます。たとえば、テンプレートの `SubjectPart` を変更したい場合のみ、`TextPart` および `HtmlPart` のプロパティを含める必要があります。

   終了したら、`update_template.json`としてファイルを保存します。

1. コマンドラインで以下のコマンドを入力します。

   ```
   aws sesv2 update-email-template --cli-input-json file://path/to/update_template.json
   ```

   前述の上記のコマンドで、*path/to/update\$1template.json* を、前のステップで作成した `update_template.json` ファイルのパスに置き換えます。

   テンプレートが正常に更新された場合、このコマンドは出力を提供しません。[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html) オペレーションを使用して、テンプレートが更新されたことを確認できます。

   指定したテンプレートが存在しない場合、このコマンドは `TemplateDoesNotExist` エラーを返します。テンプレートに `TextPart` または `HtmlPart` のプロパティ (またはその両方) が含まれていない場合、このコマンドは `InvalidParameterValue` エラーを返します。

# AWS SDK を使用して Amazon SES 経由で E メールを送信する
<a name="send-an-email-using-sdk-programmatically"></a>

 AWS SDK を使用して Amazon SES 経由で E メールを送信できます。 AWS SDKsは複数のプログラミング言語で使用できます。詳細については、[Tools for Amazon Web Services](https://aws.amazon.com/tools/#sdk) を参照してください。

## 前提条件
<a name="send-an-email-using-sdk-programmatically-prereqs"></a>

次のセクションのコードサンプルを完了するには、次の前提条件を完了する必要があります。
+ まだ行っていない場合は、「[Amazon Simple Email Service を設定する](setting-up.md)」の作業を完了してください。
+ **Amazon SES で E メールアドレスを検証する**- Amazon SES で E メールを送信するには、送信者の E メールアドレスを所有していることを検証する必要があります。アカウントが Amazon SES サンドボックスにまだある場合は、受信者の E メールアドレスも検証する必要があります。E メールアドレスを検証するには、Amazon SES コンソールを使用することをお勧めします。詳細については、「[Eメールアドレス ID の作成](creating-identities.md#verify-email-addresses-procedure)」を参照してください。
+ ** AWS 認証情報の取得** — SDK を使用して Amazon SES にアクセスするには、 AWS アクセスキー ID と AWS シークレットアクセスキーが必要です。認証情報を取得するするには、 AWS マネジメントコンソールの「[セキュリティの認証情報](https://console.aws.amazon.com/iam/home?#security_credential)」のページを参照してください。認証情報の詳細については、「[Amazon SES 認証情報の種類](send-email-concepts-credentials.md)」を参照してください。
+ **共有認証情報ファイルの作成** — このセクションのサンプルコードが正常に機能するためには、共有認証情報ファイルを作成する必要があります。詳細については、「[AWS SDK を使用して Amazon SES 経由で E メールを送信するときに使用する共有認証情報ファイルの作成](create-shared-credentials-file.md)」を参照してください。

## コードの例
<a name="send-an-email-using-sdk-programmatically-examples"></a>

**重要**  
次のチュートリアルでは、受信を確認できるように自分宛に E メールを送信します。さらに詳しい実験や負荷テストには、Amazon SES メールボックスシミュレーターを使用してください。メールボックスシミュレーターに送信される E メールは、送信クォータに加算されず、バウンス率や苦情率の計算にも含まれません。詳細については、[手動でメールボックスシミュレーターを使用する](send-an-email-from-console.md#send-email-simulator)を参照ください。

**Topics**

------
#### [ .NET ]

以下の手順は、[Visual Studio](https://www.visualstudio.com/)と AWS SDK for .NETを使用して、Amazon SES 経由で E メールを送信する方法を示しています。

このソリューションは次のコンポーネントを使用してテスト済みです。
+ Microsoft Visual Studio コミュニティ 2017、バージョン 15.4.0。
+ Microsoft .NET Framework バージョン 4.6.1.
+ NuGet を使用してインストールされた AWSSDK.Core パッケージ (バージョン 3.3.19)。
+ NuGet を使用してインストールされた AWSSDK.SimpleEmail パッケージ (バージョン 3.3.6.1)。

**開始する前に、次のタスクを実行します。**
+ **Visual Studio のインストール** - Visual Studio は [https://www.visualstudio.com/](https://www.visualstudio.com/)から入手可能です。

**を使用して E メールを送信するには AWS SDK for .NET**

1. 以下のステップを実行して、新しいプロジェクトを作成します。

   1. Visual Studio を起動します。

   1. [**ファイル**] メニューで [**New**]、[**Project**] の順に選択します。

   1. [**New Project**] ウィンドウの左側のパネルで、[**Installed**]、[**Visual C\$1**] の順に展開します。

   1. 右側のパネルで、[**Console App (.NET Framework)**] を選択します。

   1. **名前**に **AmazonSESSample** と入力し、**OK** を選択します。

1. 次のステップを実行して、NuGet を使用して Amazon SES パッケージをソリューションに含めます。

   1. **ソリューションエクスプローラー**ペインで、プロジェクトを右クリックして、コンテキストメニューの [**NuGet パッケージの管理**] を選択します。

   1. [**NuGet: AmazonSESSample**] タブで、[**参照**] を選択します。

   1. 検索ボックスに [**AWSSDK.SimpleEmail**] と入力します 

   1. [**AWSSDK.SimpleEmail**] パッケージを選択し、[**インストール**] を選択します。

   1. **変更のプレビュー**ウィンドウで、**OK** を選択します。

1. [**Program.cs**] タブで、次のコードを貼り付けます。

   ```
    1. using Amazon;
    2. using System;
    3. using System.Collections.Generic;
    4. using Amazon.SimpleEmail;
    5. using Amazon.SimpleEmail.Model;
    6. 
    7. namespace AmazonSESSample 
    8. {
    9.     class Program
   10.     {
   11.         // Replace sender@example.com with your "From" address.
   12.         // This address must be verified with Amazon SES.
   13.         static readonly string senderAddress = "sender@example.com";
   14. 
   15.         // Replace recipient@example.com with a "To" address. If your account
   16.         // is still in the sandbox, this address must be verified.
   17.         static readonly string receiverAddress = "recipient@example.com";
   18. 
   19.         // The configuration set to use for this email. If you do not want to use a
   20.         // configuration set, comment out the following property and the
   21.         // ConfigurationSetName = configSet argument below. 
   22.         static readonly string configSet = "ConfigSet";
   23. 
   24.         // The subject line for the email.
   25.         static readonly string subject = "Amazon SES test (AWS SDK for .NET)";
   26. 
   27.         // The email body for recipients with non-HTML email clients.
   28.         static readonly string textBody = "Amazon SES Test (.NET)\r\n" 
   29.                                         + "This email was sent through Amazon SES "
   30.                                         + "using the AWS SDK for .NET.";
   31.         
   32.         // The HTML body of the email.
   33.         static readonly string htmlBody = @"<html>
   34. <head></head>
   35. <body>
   36.   <h1>Amazon SES Test (SDK for .NET)</h1>
   37.   <p>This email was sent with
   38.     <a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the
   39.     <a href='https://aws.amazon.com/sdk-for-net/'> AWS SDK for .NET</a>.</p>
   40. </body>
   41. </html>";
   42. 
   43.         static void Main(string[] args)
   44.         {
   45.             // Replace USWest2 with the AWS Region you're using for Amazon SES.
   46.             // Acceptable values are EUWest1, USEast1, and USWest2.
   47.             using (var client = new AmazonSimpleEmailServiceClient(RegionEndpoint.USWest2))
   48.             {
   49.                 var sendRequest = new SendEmailRequest
   50.                 {
   51.                     Source = senderAddress,
   52.                     Destination = new Destination
   53.                     {
   54.                         ToAddresses =
   55.                         new List<string> { receiverAddress }
   56.                     },
   57.                     Message = new Message
   58.                     {
   59.                         Subject = new Content(subject),
   60.                         Body = new Body
   61.                         {
   62.                             Html = new Content
   63.                             {
   64.                                 Charset = "UTF-8",
   65.                                 Data = htmlBody
   66.                             },
   67.                             Text = new Content
   68.                             {
   69.                                 Charset = "UTF-8",
   70.                                 Data = textBody
   71.                             }
   72.                         }
   73.                     },
   74.                     // If you are not using a configuration set, comment
   75.                     // or remove the following line 
   76.                     ConfigurationSetName = configSet
   77.                 };
   78.                 try
   79.                 {
   80.                     Console.WriteLine("Sending email using Amazon SES...");
   81.                     var response = client.SendEmail(sendRequest);
   82.                     Console.WriteLine("The email was sent successfully.");
   83.                 }
   84.                 catch (Exception ex)
   85.                 {
   86.                     Console.WriteLine("The email was not sent.");
   87.                     Console.WriteLine("Error message: " + ex.Message);
   88. 
   89.                 }
   90.             }
   91. 
   92.             Console.Write("Press any key to continue...");
   93.             Console.ReadKey();
   94.         }
   95.     }
   96. }
   ```

1. コードエディタで、以下の作業を行います。
   + *sender@example.com* を "差出人:" の E メールアドレスに置き換えます。このアドレスは確認する必要があります。詳細については、「[Amazon SES の検証済みID](verify-addresses-and-domains.md)」を参照してください。
   + *recipient@example.com* を "宛先:" のアドレスに置き換えます。アカウントがサンドボックスにまだある場合は、このアドレスも確認する必要があります。
   + *ConfigSet*を、この E メールを送信するときに使用する設定セットの名前に置き換えます。
   + *USWest2* を、Amazon SES を使用して E メールを送信するために使用する AWS リージョン エンドポイントの名前に置き換えます。Amazon SES を使用できるリージョンのリストについては、「*AWS 全般のリファレンス*」の「[Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)」を参照してください。

   終了したら、`Program.cs`を保存します。

1. 次の手順に従ってアプリケーションをビルドおよび実行します。

   1. [**Build**] メニューの [**Build Solution**] を選択します。

   1. [**Debug**] メニューの [**Start Debugging**] を選択します。コンソールウィンドウが表示されます。

1. コンソールの出力を確認します。E メールが正常に送信されると、コンソールに "`The email was sent successfully.`" と表示されます 

1. E メールが正常に送信されたら、受信者アドレスの E メールクライアントにサインインします。送信した E メールメッセージを確認します。

------
#### [ Java ]

次の手順では、[Eclipse IDE for Java EE Developers ](http://www.eclipse.org/)を使用して AWS SDK プロジェクト[AWS Toolkit for Eclipse](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/welcome.html)を作成し、Java コードを変更して Amazon SES 経由で E メールを送信する方法を示します。

**開始する前に、次のタスクを実行します。**
+ **Eclipse のインストール** - Eclipse は[https://www.eclipse.org/downloads](https://www.eclipse.org/downloads)からダウンロードできます。このチュートリアルのコードは、バージョン 1.8 の Java Runtime Environment を実行する Eclipse Neon.3 (バージョン 4.6.3) でテスト済みです。
+ **のインストール AWS Toolkit for Eclipse**— Eclipse のインストール AWS Toolkit for Eclipse に を追加する手順については、[https://aws.amazon.com/eclipse](https://aws.amazon.com/eclipse) を参照してください。このチュートリアルのコードはバージョン 2.3.1 の AWS Toolkit for Eclipseでテスト済みです。

**を使用して E メールを送信するには AWS SDK for Java**

1. 次の手順を実行して、Eclipse AWS で Java プロジェクトを作成します。

   1. Eclipse を起動します。

   1. [**File**] メニューで [**New**]、[**Other**] の順に選択します。[**New**] ウィンドウで、**AWS**フォルダを展開し、[**AWS Java Project**] を選択します。

   1. **新しい Java AWS プロジェクト**ダイアログボックスで、次の操作を行います。

      1. [**Project name**] に、プロジェクト名を入力します。

      1. **AWS SDK for Java のサンプル**で、**Amazon Simple Email Service JavaMail のサンプル**を選択します。

      1. [**Finish**] を選択します。

1. Eclipse の [**Package Explorer**] ペインで、プロジェクトを展開します。

1. プロジェクトの `src/main/java` フォルダ、`com.amazon.aws.samples` フォルダの順に展開し、`AmazonSESSample.java` をダブルクリックします。

1. `AmazonSESSample.java` の内容全体を次のコードに置き換えます。

   ```
    1. package com.amazonaws.samples;
    2. 
    3. import java.io.IOException;
    4. 
    5. import com.amazonaws.regions.Regions;
    6. import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
    7. import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
    8. import com.amazonaws.services.simpleemail.model.Body;
    9. import com.amazonaws.services.simpleemail.model.Content;
   10. import com.amazonaws.services.simpleemail.model.Destination;
   11. import com.amazonaws.services.simpleemail.model.Message;
   12. import com.amazonaws.services.simpleemail.model.SendEmailRequest; 
   13. 
   14. public class AmazonSESSample {
   15. 
   16.   // Replace sender@example.com with your "From" address.
   17.   // This address must be verified with Amazon SES.
   18.   static final String FROM = "sender@example.com";
   19. 
   20.   // Replace recipient@example.com with a "To" address. If your account
   21.   // is still in the sandbox, this address must be verified.
   22.   static final String TO = "recipient@example.com";
   23. 
   24.   // The configuration set to use for this email. If you do not want to use a
   25.   // configuration set, comment the following variable and the 
   26.   // .withConfigurationSetName(CONFIGSET); argument below.
   27.   static final String CONFIGSET = "ConfigSet";
   28. 
   29.   // The subject line for the email.
   30.   static final String SUBJECT = "Amazon SES test (AWS SDK for Java)";
   31.   
   32.   // The HTML body for the email.
   33.   static final String HTMLBODY = "<h1>Amazon SES test (AWS SDK for Java)</h1>"
   34.       + "<p>This email was sent with <a href='https://aws.amazon.com/ses/'>"
   35.       + "Amazon SES</a> using the <a href='https://aws.amazon.com/sdk-for-java/'>" 
   36.       + "AWS SDK for Java</a>";
   37. 
   38.   // The email body for recipients with non-HTML email clients.
   39.   static final String TEXTBODY = "This email was sent through Amazon SES "
   40.       + "using the AWS SDK for Java.";
   41. 
   42.   public static void main(String[] args) throws IOException {
   43. 
   44.     try {
   45.       AmazonSimpleEmailService client = 
   46.           AmazonSimpleEmailServiceClientBuilder.standard()
   47.           // Replace US_WEST_2 with the AWS Region you're using for
   48.           // Amazon SES.
   49.             .withRegion(Regions.US_WEST_2).build();
   50.       SendEmailRequest request = new SendEmailRequest()
   51.           .withDestination(
   52.               new Destination().withToAddresses(TO))
   53.           .withMessage(new Message()
   54.               .withBody(new Body()
   55.                   .withHtml(new Content()
   56.                       .withCharset("UTF-8").withData(HTMLBODY))
   57.                   .withText(new Content()
   58.                       .withCharset("UTF-8").withData(TEXTBODY)))
   59.               .withSubject(new Content()
   60.                   .withCharset("UTF-8").withData(SUBJECT)))
   61.           .withSource(FROM)
   62.           // Comment or remove the next line if you are not using a
   63.           // configuration set
   64.           .withConfigurationSetName(CONFIGSET);
   65.       client.sendEmail(request);
   66.       System.out.println("Email sent!");
   67.     } catch (Exception ex) {
   68.       System.out.println("The email was not sent. Error message: " 
   69.           + ex.getMessage());
   70.     }
   71.   }
   72. }
   ```

1. `AmazonSESSample.java`で、以下を実際の値に置き換えます。
**重要**  
E メールアドレスでは、大文字と小文字は区別されます。検証したアドレスと完全に一致することを確認してください。
   + `SENDER@EXAMPLE.COM` - 「From」E メールアドレスに置き換えます。このアドレスを確認してから、プログラムを実行してください。詳細については、「[Amazon SES の検証済みID](verify-addresses-and-domains.md)」を参照してください。
   + `RECIPIENT@EXAMPLE.COM` - 「To」E メールアドレスに置き換えます。アカウントがサンドボックスにまだある場合は、このアドレスを使用前に確認する必要があります。詳細については、「[本稼働アクセスのリクエスト (Amazon SES サンドボックスからの移行)](request-production-access.md)」を参照してください。
   + **(オプション)`us-west-2`** — 米国西部（オレゴン）以外の地域で Amazon SES を使用する場合は、これを使用する地域に置き換えます。Amazon SES を使用できるリージョンのリストについては、「*AWS 全般のリファレンス*」の「[Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)」を参照してください。

1. `AmazonSESSample.java` を保存します。

1. プロジェクトを構築します。[**Project**]、[**Build Project**] の順に選択します。
**注記**  
このオプションが無効の場合、自動構築が有効になっている可能性があります。その場合は、このステップをスキップします。

1. プログラムを開始して E メールを送信します。[**Run**] を選択した後、もう一度 [**Run**] を選択します。

1. Eclipse でコンソールペインの出力を確認します。E メールが正常に送信されると、コンソールに "`Email sent!`" が表示されます。送信に失敗すると、エラーメッセージが表示されます。

1. E メールが正常に送信されたら、受信者アドレスの E メールクライアントにサインインします。送信した E メールメッセージを確認します。

------
#### [ PHP ]

このトピックでは、[AWS SDK for PHP](https://aws.amazon.com/sdk-for-php/) を使用して Amazon SES 経由で E メールを送信する方法を示します。

**開始する前に、次のタスクを実行します。**
+ **PHP をインストールする** — PHP は、[http://php.net/downloads.php](http://php.net/downloads.php) から入手できます。このチュートリアルでは、バージョン 5.5 以上の PHP が必要です。PHP をインストールした後、コマンドプロンプトから PHP を実行できるように環境変数に PHP のパスを追加します。このチュートリアルのコードは PHP 7.2.7 でテスト済みです。
+ ** AWS SDK for PHP バージョン 3 のインストール** — ダウンロードとインストールの手順については、 [AWS SDK for PHP ドキュメント](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/installation.html)を参照してください。このチュートリアルのコードは SDK バージョン 3.64.13 でテスト済みです。

**を使用して Amazon SES 経由で E メールを送信するには AWS SDK for PHP**

1. テキストエディタで `amazon-ses-sample.php` という名前のファイルを作成します。次のコードを貼り付けます。

   ```
    1. <?php
    2. 
    3. // If necessary, modify the path in the require statement below to refer to the 
    4. // location of your Composer autoload.php file.
    5. require 'vendor/autoload.php';
    6. 
    7. use Aws\Ses\SesClient;
    8. use Aws\Exception\AwsException;
    9. 
   10. // Create an SesClient. Change the value of the region parameter if you're 
   11. // using an AWS Region other than US West (Oregon). Change the value of the
   12. // profile parameter if you want to use a profile in your credentials file
   13. // other than the default.
   14. $SesClient = new SesClient([
   15.     'profile' => 'default',
   16.     'version' => '2010-12-01',
   17.     'region'  => 'us-west-2'
   18. ]);
   19. 
   20. // Replace sender@example.com with your "From" address.
   21. // This address must be verified with Amazon SES.
   22. $sender_email = 'sender@example.com';
   23. 
   24. // Replace these sample addresses with the addresses of your recipients. If
   25. // your account is still in the sandbox, these addresses must be verified.
   26. $recipient_emails = ['recipient1@example.com','recipient2@example.com'];
   27. 
   28. // Specify a configuration set. If you do not want to use a configuration
   29. // set, comment the following variable, and the
   30. // 'ConfigurationSetName' => $configuration_set argument below.
   31. $configuration_set = 'ConfigSet';
   32. 
   33. $subject = 'Amazon SES test (AWS SDK for PHP)';
   34. $plaintext_body = 'This email was sent with Amazon SES using the AWS SDK for PHP.' ;
   35. $html_body =  '<h1>AWS Amazon Simple Email Service Test Email</h1>'.
   36.               '<p>This email was sent with <a href="https://aws.amazon.com/ses/">'.
   37.               'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-php/">'.
   38.               'AWS SDK for PHP</a>.</p>';
   39. $char_set = 'UTF-8';
   40. 
   41. try {
   42.     $result = $SesClient->sendEmail([
   43.         'Destination' => [
   44.             'ToAddresses' => $recipient_emails,
   45.         ],
   46.         'ReplyToAddresses' => [$sender_email],
   47.         'Source' => $sender_email,
   48.         'Message' => [
   49.           'Body' => [
   50.               'Html' => [
   51.                   'Charset' => $char_set,
   52.                   'Data' => $html_body,
   53.               ],
   54.               'Text' => [
   55.                   'Charset' => $char_set,
   56.                   'Data' => $plaintext_body,
   57.               ],
   58.           ],
   59.           'Subject' => [
   60.               'Charset' => $char_set,
   61.               'Data' => $subject,
   62.           ],
   63.         ],
   64.         // If you aren't using a configuration set, comment or delete the
   65.         // following line
   66.         'ConfigurationSetName' => $configuration_set,
   67.     ]);
   68.     $messageId = $result['MessageId'];
   69.     echo("Email sent! Message ID: $messageId"."\n");
   70. } catch (AwsException $e) {
   71.     // output error message if fails
   72.     echo $e->getMessage();
   73.     echo("The email was not sent. Error message: ".$e->getAwsErrorMessage()."\n");
   74.     echo "\n";
   75. }
   ```

1. `amazon-ses-sample.php`で、以下を独自の値に置き換えます。
   + **`path_to_sdk_inclusion`**— をプログラム AWS SDK for PHP に を含めるために必要なパスに置き換えます。詳細については、[AWS SDK for PHP ドキュメント](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html)を参照してください。
   + **`sender@example.com`** — Amazon SES で検証した E メールアドレスに置き換えます。詳細については、「[検証済みID](verify-addresses-and-domains.md)」を参照してください。Amazon SES では、E メールアドレスの大文字と小文字が区別されます。検証したアドレスと完全に一致するアドレスを入力してください。
   + **`recipient1@example.com`, `recipient2@example.com`** – 受信者のアドレスに置き換えます。アカウントがサンドボックスにまだある場合は、受取人のアドレスも確認済みである必要があります。詳細については、「[本稼働アクセスのリクエスト (Amazon SES サンドボックスからの移行)](request-production-access.md)」を参照してください。検証したアドレスと完全に一致するアドレスを入力してください。
   + **(オプション)`ConfigSet`** — この E メールを送信する際に設定セットを使用する場合、この値を設定セットの名前で置き換えます。設定セットの詳細については、「[Amazon SES の設定セットの使用](using-configuration-sets.md)」を参照してください。
   + **(オプション)`us-west-2`** — 米国西部（オレゴン）以外の地域で Amazon SES を使用する場合は、これを使用する地域に置き換えます。Amazon SES を使用できるリージョンのリストについては、「*AWS 全般のリファレンス*」の「[Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)」を参照してください。

1. `amazon-ses-sample.php`を保存します。

1. プログラムを実行するには、`amazon-ses-sample.php` と同じディレクトリでコマンドプロンプトを開き、次のコマンドを入力します。

   ```
   $ php amazon-ses-sample.php
   ```

1. 出力を確認します。E メールが正常に送信されると、コンソールに "`Email sent!`" が表示されます。送信に失敗すると、エラーメッセージが表示されます。
**注記**  
プログラムの実行時に "cURL error 60: SSL certificate problem" エラーが発生した場合は、[AWS SDK for PHP のドキュメント](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/faq.html#what-do-i-do-about-a-curl-ssl-certificate-error)に従って、最新の CA バンドルをダウンロードしてください。次に、`amazon-ses-sample.php` で、`SesClient::factory` 配列に以下の行を追加し、ダウンロードした CA バンドルのパスで `path_of_certs`を置き換えて、プログラムを再実行します。  

   ```
   1. 'http' => [
   2.    'verify' => 'path_of_certs\ca-bundle.crt'
   3. ]
   ```

1. 受信者のアドレスの E メールクライアントにサインインします。送信した メッセージを確認します。

------
#### [ Ruby ]

このトピックでは、[AWS SDK for Ruby](https://aws.amazon.com/sdk-for-ruby/) を使用して Amazon SES 経由で E メールを送信する方法を示します。

**開始する前に、次のタスクを実行します。**
+ **Ruby のインストール** - Ruby は [https://www.ruby-lang.org/en/downloads/](https://www.ruby-lang.org/en/downloads/)からダウンロードできます。このチュートリアルのコードは Ruby 1.9.3 でテスト済みです。Ruby をインストールした後、コマンドプロンプトから Ruby を実行できるように環境変数に Ruby のパスを追加します。
+ **のインストール AWS SDK for Ruby** — ダウンロードとインストールの手順については、 *AWS SDK for Ruby デベロッパーガイド*[の「 AWS SDK for Ruby](https://docs.aws.amazon.com/sdk-for-ruby/latest/developer-guide/setup-install.html)のインストール」を参照してください。このチュートリアルのサンプルコードは AWS SDK for Rubyバージョン 2.9.36 でテスト済みです。
+ **共有認証情報ファイルの作成** — このセクションのサンプルコードが正常に機能するためには、共有認証情報ファイルを作成する必要があります。詳細については、「[AWS SDK を使用して Amazon SES 経由で E メールを送信するときに使用する共有認証情報ファイルの作成](create-shared-credentials-file.md)」を参照してください。

**を使用して Amazon SES 経由で E メールを送信するには AWS SDK for Ruby**

1. テキストエディタで `amazon-ses-sample.rb` という名前のファイルを作成します。ファイルに次のコードを貼り付けます。

   ```
    1. require 'aws-sdk'
    2. 
    3. # Replace sender@example.com with your "From" address.
    4. # This address must be verified with Amazon SES.
    5. sender = "sender@example.com"
    6. 
    7. # Replace recipient@example.com with a "To" address. If your account 
    8. # is still in the sandbox, this address must be verified.
    9. recipient = "recipient@example.com"
   10. 
   11. # Specify a configuration set. If you do not want to use a configuration
   12. # set, comment the following variable and the 
   13. # configuration_set_name: configsetname argument below. 
   14. configsetname = "ConfigSet"
   15.   
   16. # Replace us-west-2 with the AWS Region you're using for Amazon SES.
   17. awsregion = "us-west-2"
   18. 
   19. # The subject line for the email.
   20. subject = "Amazon SES test (AWS SDK for Ruby)"
   21. 
   22. # The HTML body of the email.
   23. htmlbody =
   24.   '<h1>Amazon SES test (AWS SDK for Ruby)</h1>'\
   25.   '<p>This email was sent with <a href="https://aws.amazon.com/ses/">'\
   26.   'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-ruby/">'\
   27.   'AWS SDK for Ruby</a>.'
   28. 
   29. # The email body for recipients with non-HTML email clients.  
   30. textbody = "This email was sent with Amazon SES using the AWS SDK for Ruby."
   31. 
   32. # Specify the text encoding scheme.
   33. encoding = "UTF-8"
   34. 
   35. # Create a new SES resource and specify a region
   36. ses = Aws::SES::Client.new(region: awsregion)
   37. 
   38. # Try to send the email.
   39. begin
   40. 
   41.   # Provide the contents of the email.
   42.   resp = ses.send_email({
   43.     destination: {
   44.       to_addresses: [
   45.         recipient,
   46.       ],
   47.     },
   48.     message: {
   49.       body: {
   50.         html: {
   51.           charset: encoding,
   52.           data: htmlbody,
   53.         },
   54.         text: {
   55.           charset: encoding,
   56.           data: textbody,
   57.         },
   58.       },
   59.       subject: {
   60.         charset: encoding,
   61.         data: subject,
   62.       },
   63.     },
   64.   source: sender,
   65.   # Comment or remove the following line if you are not using 
   66.   # a configuration set
   67.   configuration_set_name: configsetname,
   68.   })
   69.   puts "Email sent!"
   70. 
   71. # If something goes wrong, display an error message.
   72. rescue Aws::SES::Errors::ServiceError => error
   73.   puts "Email not sent. Error message: #{error}"
   74. 
   75. end
   ```

1. `amazon-ses-sample.rb`で、以下を独自の値に置き換えます。
   + **`sender@example.com`**— Amazon SES で検証した E メールアドレスに置き換えます。詳細については、「[検証済みID](verify-addresses-and-domains.md)」を参照してください。Amazon SES では、E メールアドレスの大文字と小文字が区別されます。検証したアドレスと完全に一致するアドレスを入力してください。
   + **`recipient@example.com`**— 受信者のアドレスに置き換えます。アカウントがサンドボックスにまだある場合は、このアドレスを使用前に確認する必要があります。詳細については、「[本稼働アクセスのリクエスト (Amazon SES サンドボックスからの移行)](request-production-access.md)」を参照してください。検証したアドレスと完全に一致するアドレスを入力してください。
   + **(オプション)`us-west-2`** — 米国西部（オレゴン）以外の地域で Amazon SES を使用する場合は、これを使用する地域に置き換えます。Amazon SES を使用できるリージョンのリストについては、「*AWS 全般のリファレンス*」の「[Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)」を参照してください。

1. `amazon-ses-sample.rb`を保存します。

1. プログラムを実行するには、`amazon-ses-sample.rb` と同じディレクトリでコマンドプロンプトを開き、**ruby amazon-ses-sample.rb** と入力します

1. 出力を確認します。E メールが正常に送信されると、コンソールに "`Email sent!`" が表示されます。送信に失敗すると、エラーメッセージが表示されます。

1. 受信者のアドレスの E メールクライアントにサインインします。送信した E メールメッセージを確認します。

------
#### [ Python ]

このトピックでは、[AWS SDK for Python (Boto)](https://aws.amazon.com/sdk-for-python/)を使用して Amazon SES 経由で E メールを送信する方法を示します。

**開始する前に、次のタスクを実行します。**
+ **Amazon SES で E メールアドレスを検証する** - Amazon SES で E メールを送信するには、送信者の E メールアドレスを所有していることを検証する必要があります。アカウントが Amazon SES サンドボックスにまだある場合は、受信者の E メールアドレスも検証する必要があります。E メールアドレスを検証するには、Amazon SES コンソールを使用することをお勧めします。詳細については、「[Eメールアドレス ID の作成](creating-identities.md#verify-email-addresses-procedure)」を参照してください。
+ **認証情報の取得 AWS **— SDK を使用して Amazon SES にアクセスするには、 AWS アクセスキー ID と AWS シークレットアクセスキーが必要です。認証情報を取得するには、 AWS マネジメントコンソールの「[セキュリティの認証情報](https://console.aws.amazon.com/iam/home?#security_credential)」のページを参照してください。認証情報の詳細については、「[Amazon SES 認証情報の種類](send-email-concepts-credentials.md)」を参照してください。
+ **Python のインストール** - Python は[https://www.python.org/downloads/](https://www.python.org/downloads/)からダウンロードできます。このチュートリアルのコードは Python 2.7.6 および Python 3.6.1 でテスト済みです。Python をインストールした後、コマンドプロンプトから Python を実行できるように環境変数に Python のパスを追加します。
+ **のインストール AWS SDK for Python (Boto)** — ダウンロードとインストールの手順については、 [AWS SDK for Python (Boto) ドキュメント](https://boto3.readthedocs.io/en/latest/guide/quickstart.html#installation)を参照してください。このチュートリアルのサンプルコードは SDK for Python のバージョン 1.4.4 でテスト済みです。

**SDK for Python を使用して Amazon SES 経由で E メールを送信するには**

1. テキストエディタで`amazon-ses-sample.py`という名前のファイルを作成します。ファイルに次のコードを貼り付けます。

   ```
    1. import boto3
    2. from botocore.exceptions import ClientError
    3. 
    4. # Replace sender@example.com with your "From" address.
    5. # This address must be verified with Amazon SES.
    6. SENDER = "Sender Name <sender@example.com>"
    7. 
    8. # Replace recipient@example.com with a "To" address. If your account 
    9. # is still in the sandbox, this address must be verified.
   10. RECIPIENT = "recipient@example.com"
   11. 
   12. # Specify a configuration set. If you do not want to use a configuration
   13. # set, comment the following variable, and the 
   14. # ConfigurationSetName=CONFIGURATION_SET argument below.
   15. CONFIGURATION_SET = "ConfigSet"
   16. 
   17. # If necessary, replace us-west-2 with the AWS Region you're using for Amazon SES.
   18. AWS_REGION = "us-west-2"
   19. 
   20. # The subject line for the email.
   21. SUBJECT = "Amazon SES Test (SDK for Python)"
   22. 
   23. # The email body for recipients with non-HTML email clients.
   24. BODY_TEXT = ("Amazon SES Test (Python)\r\n"
   25.              "This email was sent with Amazon SES using the "
   26.              "AWS SDK for Python (Boto)."
   27.             )
   28.             
   29. # The HTML body of the email.
   30. BODY_HTML = """<html>
   31. <head></head>
   32. <body>
   33.   <h1>Amazon SES Test (SDK for Python)</h1>
   34.   <p>This email was sent with
   35.     <a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the
   36.     <a href='https://aws.amazon.com/sdk-for-python/'> AWS SDK for Python (Boto)</a>.</p>
   37. </body>
   38. </html>
   39.             """            
   40. 
   41. # The character encoding for the email.
   42. CHARSET = "UTF-8"
   43. 
   44. # Create a new SES resource and specify a region.
   45. client = boto3.client('ses',region_name=AWS_REGION)
   46. 
   47. # Try to send the email.
   48. try:
   49.     #Provide the contents of the email.
   50.     response = client.send_email(
   51.         Destination={
   52.             'ToAddresses': [
   53.                 RECIPIENT,
   54.             ],
   55.         },
   56.         Message={
   57.             'Body': {
   58.                 'Html': {
   59.                     'Charset': CHARSET,
   60.                     'Data': BODY_HTML,
   61.                 },
   62.                 'Text': {
   63.                     'Charset': CHARSET,
   64.                     'Data': BODY_TEXT,
   65.                 },
   66.             },
   67.             'Subject': {
   68.                 'Charset': CHARSET,
   69.                 'Data': SUBJECT,
   70.             },
   71.         },
   72.         Source=SENDER,
   73.         # If you are not using a configuration set, comment or delete the
   74.         # following line
   75.         ConfigurationSetName=CONFIGURATION_SET,
   76.     )
   77. # Display an error if something goes wrong.	
   78. except ClientError as e:
   79.     print(e.response['Error']['Message'])
   80. else:
   81.     print("Email sent! Message ID:"),
   82.     print(response['MessageId'])
   ```

1. `amazon-ses-sample.py`で、以下を独自の値に置き換えます。
   + **`sender@example.com`**— Amazon SES で検証した E メールアドレスに置き換えます。詳細については、「[検証済みID](verify-addresses-and-domains.md)」を参照してください。Amazon SES では、E メールアドレスの大文字と小文字が区別されます。検証したアドレスと完全に一致するアドレスを入力してください。
   + **`recipient@example.com`**— 受信者のアドレスに置き換えます。アカウントがサンドボックスにまだある場合は、このアドレスを使用前に確認する必要があります。詳細については、「[本稼働アクセスのリクエスト (Amazon SES サンドボックスからの移行)](request-production-access.md)」を参照してください。検証したアドレスと完全に一致するアドレスを入力してください。
   + **(オプション)`us-west-2`** — 米国西部（オレゴン）以外の地域で Amazon SES を使用する場合は、これを使用する地域に置き換えます。Amazon SES を使用できるリージョンのリストについては、「*AWS 全般のリファレンス*」の「[Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ses_region)」を参照してください。

1. `amazon-ses-sample.py` を保存します。

1. プログラムを実行するには、`amazon-ses-sample.py` と同じディレクトリでコマンドプロンプトを開き、**python amazon-ses-sample.py** と入力します。

1. 出力を確認します。E メールが正常に送信されると、コンソールに "`Email sent!`" が表示されます。送信に失敗すると、エラーメッセージが表示されます。

1. 受信者のアドレスの E メールクライアントにサインインします。送信した E メールメッセージを確認します。

------

# AWS SDK を使用して Amazon SES 経由で E メールを送信するときに使用する共有認証情報ファイルの作成
<a name="create-shared-credentials-file"></a>

次の手順は、ホームディレクトリに認証情報の共有ファイルを作成する方法を示しています。SDK サンプルコードが正常に動作するには、このファイルを作成する必要があります。

1. テキストエディタで新規ファイルを作成します。ファイルに次のコードを貼り付けます。

   ```
   1. [default]
   2. aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
   3. aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY
   ```

1. 先ほど作成したテキストファイルで、 を一意の AWS アクセスキー ID `YOUR_AWS_ACCESS_KEY`に置き換え、 を一意の AWS シークレットアクセスキー`YOUR_AWS_SECRET_ACCESS_KEY`に置き換えます。

1. ファイルを保存します。次の表は、オペレーティングシステム別の正しい場所とファイル名を示しています。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/ses/latest/dg/create-shared-credentials-file.html)
**重要**  
認証情報ファイルを保存するときは、ファイル拡張子を含めないでください。

# Amazon SES でサポートされているコンテンツのエンコーディング
<a name="content-encodings"></a>

以下は、参考のために提供されています。

Amazon SES は、次のコンテンツエンコーディングをサポートしています。
+ `deflate`
+ `gzip`
+ `identity`

Amazon SES は、[RFC 7231](https://tools.ietf.org/html/rfc7231#section-5.3.4) 仕様に従って、次の Accept-Encoding ヘッダー形式もサポートしています。
+ `Accept-Encoding:deflate,gzip`
+ `Accept-Encoding:`
+ `Accept-Encoding:*`
+ `Accept-Encoding:deflate;q=0.5,gzip;q=1.0`
+ `Accept-Encoding:gzip;q=1.0,identity;q=0.5,*;q=0`

# Amazon SES およびセキュリティプロトコル
<a name="security-protocols"></a>

このトピックでは、Amazon SES に接続する際、そして Amazon SES が受信者に E メールを送信する際に使用できるセキュリティプロトコルについて説明します。

## E メール送信者から Amazon SES へ
<a name="security-client-to-ses"></a>

Amazon SES に接続するために使われるセキュリティプロトコルは、以下に説明されるように、Amazon SES API あるいは Amazon SES SMTP インターフェイスの使用によって異なります。

### HTTPS
<a name="security-client-to-ses-api"></a>

Amazon SES API (直接または AWS SDK 経由) を使用している場合、すべての通信は Amazon SES HTTPS エンドポイントを介して TLS によって暗号化されます。Amazon SES の HTTPS エンドポイントは、TLS 1.2 および TLS 1.3 をサポートします。

### SMTP インターフェイス
<a name="security-client-to-ses-smtp"></a>

SMTP インターフェイスを介して Amazon SES にアクセスする場合、Transport Layer Security (TLS) を使って接続を暗号化する必要があります。TLS は、以前のプロトコルの名前である「Secure Sockets Layer (SSL)」と呼ばれることが多いことに注意してください。

Amazon SES は、TLS で暗号化された接続を確立するために、STARTTLS および TLS ラッパーという 2 つのメカニズムをサポートしています。
+ **STARTTLS** – STARTTLS とは、暗号化されていない接続を暗号化された接続にアップグレードする方法です。STARTTLS には、様々なプロトコルに対応したバージョンがあります。SMTP バージョンは、「[RFC 3207](https://www.ietf.org/rfc/rfc3207.txt)」に定義されています。STARTTLS 接続の場合、Amazon SES は TLS 1.2 と TLS 1.3 をサポートします。
+ **TLS Wrapper** – TLS Wrapper (SMTPS またはハンドシェイクプロトコルとも呼ばれる) は、最初に暗号化されていない接続を確立するのではなく、最初から暗号化された接続を開始する方法です。TLS ラッパーを使用する場合、Amazon SES SMTP エンドポイントは TLS ネゴシエーションを実行しません。TLS を使用してエンドポイントに接続し、通信全体で TLS の使用を継続するのはクライアントの役割です。TLS ラッパーは古いプロトコルですが、数多くのクライアントが今もサポートしています。TLS ラッパー接続の場合、Amazon SES は TLS 1.2 および TLS 1.3 をサポートします。

これらの方法を使用した、Amazon SES SMTP インターフェイスへの接続について詳しくは、「[Amazon SES SMTP エンドポイントへの接続](smtp-connect.md)」を参照してください。

## Amazon SES から受信者へ
<a name="security-ses-to-receiver"></a>

 TLS 1.3 はデフォルトの配信方法であるとはいえ、SES は以前のバージョンの TLS を使用してメールサーバーに E メールを配信できます。

デフォルトで、Amazon SES は*便宜的 TLS*を使用します。SES の便宜的 TLS は常に STARTTLS を使用し、TLS ラッパーを含みません。このフローでは、最初のプレーンテキスト接続を確立し、クライアントとサーバーの両方が STARTTLS をサポートしている場合は TLS で暗号化されたセッションにアップグレードします。SES で安全な接続を確立できない場合、暗号化されていないメッセージが送信されます。

この動作は、設定セットを使用することで変更できます。[PutConfigurationSetDeliveryOptions](https://docs.aws.amazon.com/ses/latest/APIReference/API_PutConfigurationSetDeliveryOptions.html) API オペレーションを使用して、設定セットの `TlsPolicy` プロパティを `Require` に設定します。この変更には、[AWS CLI](https://aws.amazon.com/cli) を使用できます。

**設定セットに TLS 接続を要求するよう Amazon SES を設定するには**
+ コマンドラインで以下のコマンドを入力します。

  ```
  aws sesv2 put-configuration-set-delivery-options --configuration-set-name MyConfigurationSet --tls-policy REQUIRE
  ```

  前述の例では、*MyConfigurationSet* をお客様の設定セットの名前に置き換えます。

  この設定セットを使用して E メールを送信する場合、Amazon SES は、安全な接続を確立できる受信 E メールサーバーに対してのみメッセージを送信します。受信 E メールサーバーへの安全な接続が確立できない場合、Amazon SES はメッセージを破棄します。

## エンドツーエンドの暗号化
<a name="security-end-to-end"></a>

Amazon SES を使用して、S/MIME または PGP を使用して暗号化されたメッセージを送信できます。これらのプロトコルを使用するメッセージは、送信者によって暗号化されます。これらのコンテンツは、メッセージを復号化するために必要なプライベートキーを有する受信者のみが表示できます。

Amazon SES では以下の MIME タイプがサポートされ、S/MIME で暗号化された E メールを送信するために使用できます。
+ `application/pkcs7-mime`
+ `application/pkcs7-signature`
+ `application/x-pkcs7-mime`
+ `application/x-pkcs7-signature`

Amazon SES では以下の MIME タイプ もサポートされており、PGP で暗号化された E メールを送信するために使用できます。
+ `application/pgp-encrypted`
+ `application/pgp-keys`
+ `application/pgp-signature`

# Amazon SES ヘッダーフィールド
<a name="header-fields"></a>

Amazon SES は、[RFC 822](https://www.rfc-editor.org/rfc/rfc822.html)で規定された形式に準拠するあらゆる E メールヘッダーに対応できます。

以下のフィールドをメッセージのヘッダーセクションに複数回含めることはできません。
+ `Accept-Language`
+ `acceptLanguage`
+ `Archived-At`
+ `Auto-Submitted`
+ `Bounces-to`
+ `Comments`
+ `Content-Alternative`
+ `Content-Base`
+ `Content-Class`
+ `Content-Description`
+ `Content-Disposition`
+ `Content-Duration`
+ `Content-ID`
+ `Content-Language`
+ `Content-Length`
+ `Content-Location`
+ `Content-MD5`
+ `Content-Transfer-Encoding`
+ `Content-Type`
+ `Date`
+ `Delivered-To `
+ `Disposition-Notification-Options`
+ `Disposition-Notification-To`
+ `DKIM-Signature`
+ `DomainKey-Signature`
+ `Errors-To`
+ `From`
+ `Importance`
+ `In-Reply-To`
+ `Keywords`
+ `List-Archive`
+ `List-Help`
+ `List-Id`
+ `List-Owner`
+ `List-Post`
+ `List-Subscribe`
+ `List-Unsubscribe`
+ `List-Unsubscribe-Post`
+ `Message-Context`
+ `Message-ID`
+ `MIME-Version`
+ `Organization`
+ `Original-From`
+ `Original-Message-ID`
+ `Original-Recipient`
+ `Original-Subject`
+ `Precedence`
+ `Priority`
+ `References`
+ `Reply-To`
+ `Return-Path`
+ `Return-Receipt-To`
+ `Sender`
+ `Solicitation`
+ `Sensitivity`
+ `Subject`
+ `Thread-Index`
+ `Thread-Topic`
+ `User-Agent`
+ `VBR-Info`

**考慮事項**
+ `acceptLanguage` フィールドは標準ではありません。可能であれば、代わりに `Accept-Language`ヘッダーを使用してください。
+ `Date`ヘッダーを指定した場合、Amazon SES は、Amazon SES がメッセージを受け取ったときに、UTC タイムゾーンの日付と時刻に対応するタイムスタンプでヘッダーを上書きします。
+ `Message-ID`ヘッダーを指定すると、Amazon SES はヘッダーを独自の値で上書きします。
+ `Return-Path`ヘッダーを指定した場合、Amazon SES は指定されたアドレスにバウンスと苦情の通知を送信します。ただし、受取人が受け取るメッセージの`Return-Path`ヘッダーには別の値が含まれています。
+ *Simple* または *Templated* のコンテンツで Amazon SES API v2 `SendEmail` オペレーションを使用する場合、または `SendBulkEmail` オペレーションを使用する場合、SES が設定したヘッダーのカスタムヘッダーコンテンツはユーザーは設定できません。したがって、次のヘッダーはカスタムヘッダーとして許可されません。
  + `BCC`, `CC`, `Content-Disposition`, `Content-Type`, `Date`, `From`, `Message-ID`, `MIME-Version`, `Reply-To`, `Return-Path`, `Subject`, `To`

# SES での E メール添付ファイルの操作
<a name="attachments"></a>

SES の E メール添付ファイルは、SES API v2 の `SendEmail` および `SendBulkEmail` オペレーションを使用するときに E メールメッセージに含めることができるファイルです。この機能を使用すると、SES でサポートされている MIME タイプに準拠する PDF、Word ファイル、イメージ、またはその他のファイルタイプのドキュメントを含めることで、E メールコンテンツを充実させることができます。また、受信者が個別にダウンロードすることなく、E メールコンテンツに直接レンダリングされるインラインイメージを含めることもできます。1 通の E メールに複数の添付ファイルを含めることができます。メッセージの合計サイズの上限は 40 MB です。

**注記**  
`Raw` コンテンツタイプ、SMTP インターフェイス、および SES API v1 を使用する [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) SES API v2 は、[raw E メール MIME メッセージ構造](send-email-raw.md#send-email-raw-mime)を通じて添付ファイルを引き続き処理します。

## SES での添付ファイルの仕組み
<a name="how-attachments-work"></a>

添付ファイルを含む E メールを送信する場合、各段階で発生するエンコードには 2 つの異なるタイプがあります。

ステージ 1 – SES へのデータの送信:
+ 添付ファイルを SES に送信する場合は、バイナリデータ (PDF や画像など) を安全に送信できる形式に変換する必要があります。
+ ここで base64 エンコードがその役割を果たします。base64 エンコードが必要となるのは、JSON リクエストで raw バイナリデータを送信できないためです。
+  AWS SDK を使用している場合、このエンコーディングは自動的に処理されます。
+ を使用している場合は AWS CLI、送信する前にアタッチメントを base64 でエンコードする必要があります。

ステージ 2 – SES による E メールの作成:
+ SES は、データを受信したら、添付ファイルを含む実際の E メールを作成する必要があります。
+ ここで、[ContentTransferEncoding](#attachment-structure) 設定がその役割を果たします。
+ SES は ContentTransferEncoding で指定したエンコード方法を使用して、最終的な E メールの添付ファイルを自動的にフォーマットします。

これは、郵送で荷物を送る作業に似ています。まず、荷物を郵便局に持ち込む必要があります (ステージ 1 – Base64 エンコードが必要)。その後、郵便局は最終的な配送のため、荷物を適切に梱包します (ステージ 2 – ContentTransferEncoding)。

## 添付ファイルオブジェクトの構造
<a name="attachment-structure"></a>

SES 経由で添付ファイルを含む E メールを送信すると、サービスは複雑な MIME メッセージ構造を自動的に処理します。次の SES API v2 [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Attachment.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Attachment.html) オブジェクト構造に従って、添付ファイルの内容とメタデータを提供するだけで済みます。
+ `FileName` (必須) – 受信者に表示されるファイル名 (ファイル拡張子を含める必要があります)。指定しない場合、SES は `FileName` の拡張機能から `ContentType` を取得します。
+ `ContentType` (オプション) – [IANA 準拠のメディアタイプ識別子](https://www.iana.org/assignments/media-types/media-types.xhtml)。
+ `ContentDisposition` (オプション) – 添付ファイルのレンダリング方法を指定します: `ATTACHMENT` *(デフォルト)* または `INLINE`。
+ `ContentDescription` (オプション) – コンテンツの簡単な説明。
+ `RawContent` (必須) – 添付ファイルの実際のコンテンツ。
+ `ContentTransferEncoding` (オプション) – 添付ファイルのペイロードを E メールの mime メッセージにアセンブルするときにエンコードする方法を指定します: `SEVEN_BIT` *(デフォルト)*、`BASE64` または `QUOTED_PRINTABLE`。

アタッチされたすべてのコンテンツは、送信のために SES エンドポイントに転送する前に base64 にエンコードする必要があります。 AWS SDK クライアントを使用して API コールを行う場合は、自動的に処理されます。を使用している場合 AWS CLI、または独自のクライアントを実装している場合は、次のようなエンコーディングを自分で実行する必要があります。
+ プレーンテキストの内容: `Text attachment sample content.`
+ Base64 エンコード: `VGV4dCBhdHRhY2htZW50IHNhbXBsZSBjb250ZW50Lg==`

次の例は、SES API v2 でアタッチメントを指定するときにアタッチメントオブジェクト構造を使用する方法[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html)と、アタッチメントオブジェクト要素を含む JSON ファイル AWS CLI を参照する [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html)オペレーションを示しています。

**Example – シンプルなコンテンツを含む SendEmail**  

```
aws sesv2 send-email --cli-input-json file://request-send-email-simple.json
```
**request-send-email-simple.json**  

```
{
    "FromEmailAddress": "sender@example.com",
    "Destination": {
        "ToAddresses": [
            "recipient@example.com"
        ]
    },
    "Content": {
        "Simple": {
            "Subject": {
                "Data": "Email with attachment"
            },
            "Body": {
                "Text": {
                    "Data": "Please see attached document."
                },
                "Html": {
                    "Data": "Please see attached <b>document</b>."
                }
            },
            "Attachments": [
                {
                    "RawContent": "<base64-encoded-content>",
                    "ContentDisposition": "ATTACHMENT",
                    "FileName": "document.pdf",
                    "ContentDescription": "PDF Document Attachment",
                    "ContentTransferEncoding": "BASE64"
                }
            ]
        }
    }
}
```

**Example – シンプルなコンテンツとインライン添付ファイルを含む SendEmail**  

```
aws sesv2 send-email --cli-input-json file://request-send-email-simple-inline-attachment.json
```
**request-send-email-simple-inline-attachment.json**  

```
{
    "FromEmailAddress": "sender@example.com",
    "Destination": {
        "ToAddresses": [
            "recipient@example.com"
        ]
    },
    "Content": {
        "Simple": {
            "Subject": {
                "Data": "Email with attachment"
            },
            "Body": {
                "Html": {
                    "Data": "<html><body>Our logo:<br><img src=\"cid:logo123\" alt=\"Company Logo\"></body></html>"
                }
            },
            "Attachments": [
                {
                    "RawContent": "<base64-encoded-content>",
                    "ContentDisposition": "INLINE",
                    "FileName": "logo.png",
                    "ContentId": "logo123",
                    "ContentTransferEncoding": "BASE64"
                }
            ]
        }
    }
}
```

**Example – テンプレートコンテンツを含む SendEmail**  

```
aws sesv2 send-email --cli-input-json file://request-send-email-template.json
```
**request-send-email-template.json**  

```
{
    "FromEmailAddress": "sender@example.com",
    "Destination": {
        "ToAddresses": [
            "recipient@example.com"
        ]
    },
    "Content": {
        "Template": {
            "TemplateName": "MyTemplate",
            "TemplateData": "{\"name\":\"John\"}",
            "Attachments": [
                {
                    "RawContent": "<base64-encoded-content>",
                    "ContentDisposition": "ATTACHMENT",
                    "FileName": "document.pdf",
                    "ContentDescription": "PDF Document Attachment",
                    "ContentTransferEncoding": "BASE64"
                }
            ]
        }
    }
}
```

**Example – 添付ファイルコンテンツを含む SendBulkEmail**  

```
aws sesv2 send-bulk-email --cli-input-json file://request-send-bulk-email.json
```
**request-send-bulk-email.json**  

```
{
    "FromEmailAddress": "sender@example.com",
    "DefaultContent": {
        "Template": {
            "TemplateName": "MyTemplate",
            "TemplateData": "{}",
            "Attachments": [
                {
                    "RawContent": "<base64-encoded-content>",
                    "ContentDisposition": "ATTACHMENT",
                    "FileName": "document.pdf",
                    "ContentDescription": "PDF Document Attachment",
                    "ContentTransferEncoding": "BASE64"
                }
            ]
        }
    },
    "BulkEmailEntries": [
        {
            "Destination": {
                "ToAddresses": [
                    "recipient@example.com"
                ]
            },
            "ReplacementEmailContent": {
                "ReplacementTemplate": {
                    "ReplacementTemplateData": "{\"name\":\"John\"}"
                }
            }
        }
    ]
}
```

## ベストプラクティス
<a name="attachments-best-practices"></a>
+ メッセージの合計サイズ (添付ファイルを含む) を 40 MB 未満に保ちます。
+ 可能であれば、SES がファイル拡張子に基づいてコンテンツタイプを自動検出できるようにします。
+ コンテンツタイプは、[一般的な MIME タイプ](https://developer.mozilla.org/en-US/docs/Web/HTTP/MIME_types/Common_types)から外れる場合にのみ明示的に指定します。
+ E メールのレンダリングを強化するため、インラインイメージの使用を検討します。
+ SES は、「[サポート対象外の添付ファイルのタイプ](#mime-types)」に記載されているものを除き、添付ファイルに対して幅広い MIME タイプをサポートしています。

## SES でサポート対象外の添付ファイルのタイプ
<a name="mime-types"></a>

多目的インターネットメール拡張‎ (MIME) スタンダードを使用して、Amazon SES 経由で送信メッセージにファイルを添付できます。Amazon SES は、すべての添付ファイルのタイプを受け入れます。しかし次のリストのファイル拡張子を持つ添付ファイルは*例外*です。


|  |  |  |  |  | 
| --- |--- |--- |--- |--- |
| .ade .adp .app .asp .bas .bat .cer .chm .cmd .com .cpl .crt .csh .der .exe .fxp .gadget .hlp  | .hta .inf .ins .isp .its .js .jse .ksh .lib .lnk .mad .maf .mag .mam .maq .mar .mas .mat  | .mau .mav .maw .mda .mdb .mde .mdt .mdw .mdz .msc .msh .msh1 .msh2 .mshxml .msh1xml .msh2xml .msi .msp  | .mst .ops .pcd .pif .plg .prf .prg .reg .scf .scr .sct .shb .shs .sys .ps1 .ps1xml .ps2 .ps2xml  | .psc1 .psc2 .tmp .url .vb .vbe .vbs .vps .vsmacros .vss .vst .vsw .vxd .ws .wsc .wsf .wsh .xnk  | 

ISP によっては他にも制限があります (添付ファイルのアーカイブに関する制限など)。実際に本稼働する前に大手 ISP を使って E メール送信をテストするようお勧めします。