

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

# コマンドラインを使用して、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 ユーザー名とパスワードを入力します。

------