

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

# 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 ユーザー名とパスワードを入力します。

------