

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 명령줄을 사용하여 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 자격 증명과 다릅니다. 두 유형의 자격 증명을 서로 바꿔 사용할 수 없습니다. 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` cmdlet(대부분의 최신 Windows 버전에 포함됨)을 둘 다 사용하여 연결을 테스트하는 절차가 나와 있습니다.

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

Amazon SES SMTP 인터페이스를 OpenSSL과 연결하는 두 가지 방법이 있습니다. 포트 587을 통해 명시적 SSL을 사용하거나 포트 465를 통해 암시적 SSL을 사용하는 것입니다.

**명시적 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) cmdlet을 사용하여 Amazon SES SMTP 서버에 연결할 수 있습니다.

**참고**  
`Test-NetConnection` cmdlet를 통해 컴퓨터가 Amazon SES SMTP 엔드포인트에 연결할 수 있는지 여부를 확인할 수 있습니다. 하지만 컴퓨터가 SMTP 엔드포인트에 대한 암시적 또는 명시적 SSL 연결을 만들 수 있는지 여부는 테스트하지 않습니다. SSL 연결을 테스트하려면 Windows용 OpenSSL을 설치하거나 테스트 이메일을 보낼 수 있습니다.

**`Test-NetConnection` cmdlet를 사용하여 SMTP 인터페이스에 연결하려면**
+ PowerShell에 다음 명령을 입력하여 Amazon SES SMTP 서버에 연결합니다.

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

  앞의 명령에서 *email-smtp.us-west-2.amazonaws.com* 리전의 Amazon SES SMTP 엔드포인트 URL로 바꾸고 AWS *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 인터페이스를 통해 이메일 전송
<a name="send-email-using-openssl"></a>

명령줄을 사용하여 Amazon SES SMTP 인터페이스를 통해 메시지를 보낼 수도 있습니다. SMTP 자격 증명을 테스트할 때나, Amazon SES를 사용하여 보내는 메시지를 특정 수신자가 받을 수 있는지 테스트할 때 이 절차가 유용합니다.

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

이메일 발신자가 SMTP 서버에 연결하면 클라이언트가 표준 요청 세트를 발행하고 서버가 각 요청에 표준 응답으로 회신합니다. 이러한 일련의 요청 및 응답을 *SMTP 대화*라고 합니다. OpenSSL을 사용하여 Amazon SES SMTP 서버에 연결하면 서버가 SMTP 대화가 발생할 것을 예상합니다.

OpenSSL을 사용하여 SMTP 인터페이스에 연결하려면 base64 인코딩을 사용하여 SMTP 자격 증명을 인코딩해야 합니다. 이 섹션에는 base64를 사용하여 자격 증명을 인코딩하는 절차가 나와 있습니다.

**SMTP 인터페이스를 통해 명령줄에서 이메일을 보내려면**

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` 뒤에 나오는 숫자 및 텍스트 문자열이 이메일의 메시지 ID입니다.
**참고**  
비활성 시간이 약 10초 이상 지속되면 연결이 자동으로 닫힙니다.

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

[Net.Mail.SmtpClient](https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient?view=netframework-4.8) 클래스를 이용하면 포트 587을 통해 명시적 SSL을 사용하여 이메일을 보낼 수 있습니다.

**참고**  
이 `Net.Mail.SmtpClient` 클래스는 공식적으로 사용되지 않으므로 타사 라이브러리를 사용하는 것이 좋습니다. 이 코드는 테스트 목적으로만 사용되며 프로덕션 워크로드에 사용해서는 안 됩니다.

**명시적 SSL을 사용하여 PowerShell을 통해 이메일을 보내려면**

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*을 메시지 발신자 이메일 주소로 바꿉니다.
   + *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을 사용하여 이메일을 보낼 수 있습니다.

**참고**  
이 `System.Web.Mail.SmtpMail` 클래스는 공식적으로 사용되지 않으므로 타사 라이브러리를 사용하는 것이 좋습니다. 이 코드는 테스트 목적으로만 사용되며 프로덕션 워크로드에 사용해서는 안 됩니다.

**암시적 SSL을 사용하여 PowerShell을 통해 이메일을 보내려면**

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*을 메시지 발신자 이메일 주소로 바꿉니다.
   + *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 사용자 이름과 암호를 입력합니다.

------