Amazon Simple Email Service
개발자 안내서

AWS SDK를 사용하여 이메일 전송

AWS SDK에는 Amazon SES를 비롯한 몇 가지 다른 AWS 서비스와 상호 작용할 수 있는 메서드가 기본적으로 포함되어 있습니다. 따라서 Amazon SES를 다른 AWS 서비스와 사용할 계획이라면 SDK 사용을 권장합니다. AWS SDK에 대해 자세히 알아보려면 Amazon Web Services 도구를 참조하십시오.

이 단원에서는 Amazon SES에서 AWS SDK를 사용하여 이메일을 전송하는 프로세스를 보여주는 몇 가지 프로그래밍 언어의 코드 예제를 찾아볼 수 있습니다.

C#GolangJavaJavaScriptPHPPythonRuby
C#

다음 코드 예제는 Amazon SES에서 .NET용 AWS SDK를 사용하여 이메일을 전송할 수 있는 완전한 솔루션입니다. 이 코드 예시에서는 사용자가 .NET용 AWS SDK를 설치했고, 공유 자격 증명 파일을 생성했다고 가정합니다. 공유 자격 증명 파일의 생성에 대한 자세한 내용은 공유 자격 증명 파일 생성 단원을 참조하십시오.

중요

공유 자격 증명 파일을 사용하여 AWS 액세스 키 ID 및 보안 액세스 키를 전달합니다. 공유 자격 증명 파일을 사용하는 대신, SDK 스토어에서 AWS 액세스 키 ID 및 보안 액세스 키를 지정할 수 있습니다. 자세한 내용은 .NET용 AWS SDK Developer Guide의 AWS 자격 증명 구성을 참조하십시오. 다음 예시는 이러한 메서드 중 하나를 사용하여 자격 증명을 지정하지 않으면 작동하지 않습니다.

using Amazon; using System; using System.Collections.Generic; using Amazon.SimpleEmail; using Amazon.SimpleEmail.Model; namespace AmazonSESSample { class Program { // Replace sender@example.com with your "From" address. // This address must be verified with Amazon SES. static readonly string senderAddress = "sender@example.com"; // Replace recipient@example.com with a "To" address. If your account // is still in the sandbox, this address must be verified. static readonly string receiverAddress = "recipient@example.com"; // The configuration set to use for this email. If you do not want to use a // configuration set, comment out the following property and the // ConfigurationSetName = configSet argument below. static readonly string configSet = "ConfigSet"; // The subject line for the email. static readonly string subject = "Amazon SES test (.NET용 AWS SDK)"; // The email body for recipients with non-HTML email clients. static readonly string textBody = "Amazon SES Test (.NET)\r\n" + "This email was sent through Amazon SES " + "using the .NET용 AWS SDK."; // The HTML body of the email. static readonly string htmlBody = @"<html> <head></head> <body> <h1>Amazon SES Test (.NET용 AWS SDK)</h1> <p>This email was sent with <a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the <a href='https://aws.amazon.com/sdk-for-net/'> .NET용 AWS SDK</a>.</p> </body> </html>"; static void Main(string[] args) { // Replace USWest2 with the AWS Region you're using for Amazon SES. // Acceptable values are EUWest1, USEast1, and USWest2. using (var client = new AmazonSimpleEmailServiceClient(RegionEndpoint.USWest2)) { var sendRequest = new SendEmailRequest { Source = senderAddress, Destination = new Destination { ToAddresses = new List<string> { receiverAddress } }, Message = new Message { Subject = new Content(subject), Body = new Body { Html = new Content { Charset = "UTF-8", Data = htmlBody }, Text = new Content { Charset = "UTF-8", Data = textBody } } }, // If you are not using a configuration set, comment // or remove the following line ConfigurationSetName = configSet }; try { Console.WriteLine("Sending email using Amazon SES..."); var response = client.SendEmail(sendRequest); Console.WriteLine("The email was sent successfully."); } catch (Exception ex) { Console.WriteLine("The email was not sent."); Console.WriteLine("Error message: " + ex.Message); } } Console.Write("Press any key to continue..."); Console.ReadKey(); } } }
Golang

다음 코드 예제는 Amazon SES에서 Go용 AWS SDK를 사용하여 이메일을 전송할 수 있는 완전한 솔루션입니다. 단, 이 코드 예제는 Go용 AWS SDK이 설치되어 있고 공유 자격 증명 파일이 생성되어 있다는 가정을 전제로 합니다. 공유 자격 증명 파일의 생성에 대한 자세한 내용은 공유 자격 증명 파일 생성 단원을 참조하십시오.

중요

공유 자격 증명 파일을 사용하여 AWS 액세스 키 ID 및 보안 액세스 키를 전달합니다. 공유 자격 증명 파일을 사용하는 대신, 두 가지 환경 변수(각각 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)를 설정하여 AWS 액세스 키 ID 및 보안 액세스 키를 지정할 수 있습니다. 다음 예시는 이러한 메서드 중 하나를 사용하여 자격 증명을 지정하지 않으면 작동하지 않습니다.

package main import ( "fmt" //go get -u github.com/aws/aws-sdk-go "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/ses" "github.com/aws/aws-sdk-go/aws/awserr" ) const ( // Replace sender@example.com with your "From" address. // This address must be verified with Amazon SES. Sender = "sender@example.com" // Replace recipient@example.com with a "To" address. If your account // is still in the sandbox, this address must be verified. Recipient = "recipient@example.com" // Specify a configuration set. If you do not want to use a configuration // set, comment out the following constant and the // ConfigurationSetName: aws.String(ConfigurationSet) argument below ConfigurationSet = "ConfigSet" // Replace us-west-2 with the AWS Region you're using for Amazon SES. AwsRegion = "us-west-2" // The subject line for the email. Subject = "Amazon SES Test (Go용 AWS SDK)" // The HTML body for the email. HtmlBody = "<h1>Amazon SES Test Email (Go용 AWS SDK)</h1><p>This email was sent with " + "<a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the " + "<a href='https://aws.amazon.com/sdk-for-go/'>Go용 AWS SDK</a>.</p>" //The email body for recipients with non-HTML email clients. TextBody = "This email was sent with Amazon SES using the Go용 AWS SDK." // The character encoding for the email. CharSet = "UTF-8" ) func main() { // Create a new session and specify an AWS Region. sess, err := session.NewSession(&aws.Config{ Region:aws.String(AwsRegion)}, ) // Create an SES client in the session. svc := ses.New(sess) // Assemble the email. input := &ses.SendEmailInput{ Destination: &ses.Destination{ CcAddresses: []*string{ }, ToAddresses: []*string{ aws.String(Recipient), }, }, Message: &ses.Message{ Body: &ses.Body{ Html: &ses.Content{ Charset: aws.String(CharSet), Data: aws.String(HtmlBody), }, Text: &ses.Content{ Charset: aws.String(CharSet), Data: aws.String(TextBody), }, }, Subject: &ses.Content{ Charset: aws.String(CharSet), Data: aws.String(Subject), }, }, Source: aws.String(Sender), // Comment or remove the following line if you are not using a configuration set ConfigurationSetName: aws.String(ConfigurationSet), } // Attempt to send the email. result, err := svc.SendEmail(input) // Display error messages if they occur. if err != nil { if aerr, ok := err.(awserr.Error); ok { switch aerr.Code() { case ses.ErrCodeMessageRejected: fmt.Println(ses.ErrCodeMessageRejected, aerr.Error()) case ses.ErrCodeMailFromDomainNotVerifiedException: fmt.Println(ses.ErrCodeMailFromDomainNotVerifiedException, aerr.Error()) case ses.ErrCodeConfigurationSetDoesNotExistException: fmt.Println(ses.ErrCodeConfigurationSetDoesNotExistException, aerr.Error()) default: fmt.Println(aerr.Error()) } } else { // Print the error, cast err to awserr.Error to get the Code and // Message from an error. fmt.Println(err.Error()) } return } fmt.Println("Email Sent!") fmt.Println(result) }
Java

다음 코드 예제는 Amazon SES에서 AWS SDK for Java를 사용하여 이메일을 전송할 수 있는 완전한 솔루션입니다. 단, 이 코드 예제는 AWS SDK for Java이 설치되어 있고 공유 자격 증명 파일이 생성되어 있다는 가정을 전제로 합니다. 공유 자격 증명 파일의 생성에 대한 자세한 내용은 공유 자격 증명 파일 생성 단원을 참조하십시오.

package com.amazonaws.samples; import java.io.IOException; import com.amazonaws.regions.Regions; import com.amazonaws.services.simpleemail.AmazonSimpleEmailService; import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder; import com.amazonaws.services.simpleemail.model.Body; import com.amazonaws.services.simpleemail.model.Content; import com.amazonaws.services.simpleemail.model.Destination; import com.amazonaws.services.simpleemail.model.Message; import com.amazonaws.services.simpleemail.model.SendEmailRequest; public class AmazonSESSample { // Replace sender@example.com with your "From" address. // This address must be verified with Amazon SES. static final String FROM = "sender@example.com"; // Replace recipient@example.com with a "To" address. If your account // is still in the sandbox, this address must be verified. static final String TO = "recipient@example.com"; // The configuration set to use for this email. If you do not want to use a // configuration set, comment the following variable and the // .withConfigurationSetName(CONFIGSET); argument below. static final String CONFIGSET = "ConfigSet"; // The subject line for the email. static final String SUBJECT = "Amazon SES test (AWS SDK for Java)"; // The HTML body for the email. static final String HTMLBODY = "<h1>Amazon SES test (AWS SDK for Java)</h1>" + "<p>This email was sent with <a href='https://aws.amazon.com/ses/'>" + "Amazon SES</a> using the <a href='https://aws.amazon.com/sdk-for-java/'>" + "AWS SDK for Java</a>"; // The email body for recipients with non-HTML email clients. static final String TEXTBODY = "This email was sent through Amazon SES " + "using the AWS SDK for Java."; public static void main(String[] args) throws IOException { try { AmazonSimpleEmailService client = AmazonSimpleEmailServiceClientBuilder.standard() // Replace US_WEST_2 with the AWS Region you're using for // Amazon SES. .withRegion(Regions.US_WEST_2).build(); SendEmailRequest request = new SendEmailRequest() .withDestination( new Destination().withToAddresses(TO)) .withMessage(new Message() .withBody(new Body() .withHtml(new Content() .withCharset("UTF-8").withData(HTMLBODY)) .withText(new Content() .withCharset("UTF-8").withData(TEXTBODY))) .withSubject(new Content() .withCharset("UTF-8").withData(SUBJECT))) .withSource(FROM) // Comment or remove the next line if you are not using a // configuration set .withConfigurationSetName(CONFIGSET); client.sendEmail(request); System.out.println("Email sent!"); } catch (Exception ex) { System.out.println("The email was not sent. Error message: " + ex.getMessage()); } } }
JavaScript

다음 코드 예제는 Amazon SES에서 AWS SDK for JavaScript in Node.js를 사용하여 이메일을 전송할 수 있는 완전한 솔루션입니다. 이 코드 예제에서는 Node.js의 JavaScript용 SDK가 설치되어 있다고 가정합니다. AWS 액세스 키 ID, 보안 액세스 키, 원하는 AWS 리전이 들어 있는 구성 파일도 생성해야 합니다. 이 파일 생성에 대한 자세한 내용은 JSON 파일에서 Node.js의 자격 증명 로드를 참조하십시오.

중요

공유 자격 증명 파일을 사용하여 AWS 액세스 키 ID 및 보안 액세스 키를 전달합니다. 공유 자격 증명 파일을 사용하는 대신, 두 가지 환경 변수(각각 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)를 설정하여 AWS 액세스 키 ID 및 보안 액세스 키를 지정할 수 있습니다. 다음 예시는 이러한 메서드 중 하나를 사용하여 자격 증명을 지정하지 않으면 작동하지 않습니다.

'use strict'; var aws = require('aws-sdk'); // Provide the full path to your config.json file. aws.config.loadFromPath('./config.json'); // Replace sender@example.com with your "From" address. // This address must be verified with Amazon SES. const sender = "Sender Name <sender@recipient.com>"; // Replace recipient@example.com with a "To" address. If your account // is still in the sandbox, this address must be verified. const recipient = "recipient@example.com"; // Specify a configuration set. If you do not want to use a configuration // set, comment the following variable, and the // ConfigurationSetName : configuration_set argument below. const configuration_set = "ConfigSet"; // The subject line for the email. const subject = "Amazon SES Test (AWS SDK for JavaScript in Node.js)"; // The email body for recipients with non-HTML email clients. const body_text = "Amazon SES Test (Node.js의 JavaScript용 SDK)\r\n" + "This email was sent with Amazon SES using the " + "AWS SDK for JavaScript in Node.js."; // The HTML body of the email. const body_html = `<html> <head></head> <body> <h1>Amazon SES Test (Node.js의 JavaScript용 SDK)</h1> <p>This email was sent with <a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the <a href='https://aws.amazon.com/sdk-for-node-js/'> AWS SDK for JavaScript in Node.js</a>.</p> </body> </html>`; // The character encoding for the email. const charset = "UTF-8"; // Create a new SES object. var ses = new aws.SES(); // Specify the parameters to pass to the API. var params = { Source: sender, Destination: { ToAddresses: [ recipient ], }, Message: { Subject: { Data: subject, Charset: charset }, Body: { Text: { Data: body_text, Charset: charset }, Html: { Data: body_html, Charset: charset } } }, ConfigurationSetName: configuration_set }; //Try to send the email. ses.sendEmail(params, function(err, data) { // If something goes wrong, print an error message. if(err) { console.log(err.message); } else { console.log("Email sent! Message ID: ", data.MessageId); } });
PHP

다음 코드 예제는 Amazon SES에서 PHP용 AWS SDK를 사용하여 이메일을 전송할 수 있는 완전한 솔루션입니다. 단, 이 코드 예제는 PHP용 AWS SDK이 설치되어 있고 공유 자격 증명 파일이 생성되어 있다는 가정을 전제로 합니다. 공유 자격 증명 파일의 생성에 대한 자세한 내용은 공유 자격 증명 파일 생성 단원을 참조하십시오.

중요

공유 자격 증명 파일을 사용하여 AWS 액세스 키 ID 및 보안 액세스 키를 전달합니다. 공유 자격 증명 파일을 사용하는 대신, 두 가지 환경 변수(각각 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)를 설정하여 AWS 액세스 키 ID 및 보안 액세스 키를 지정할 수 있습니다. 다음 예시는 이러한 메서드 중 하나를 사용하여 자격 증명을 지정하지 않으면 작동하지 않습니다.

<?php // If necessary, modify the path in the require statement below to refer to the // location of your Composer autoload.php file. require 'vendor/autoload.php'; use Aws\Ses\SesClient; use Aws\Exception\AwsException; // Create an SesClient. Change the value of the region parameter if you're // using an AWS Region other than 미국 서부(오레곤). Change the value of the // profile parameter if you want to use a profile in your credentials file // other than the default. $SesClient = new SesClient([ 'profile' => 'default', 'version' => '2010-12-01', 'region' => 'us-west-2' ]); // Replace sender@example.com with your "From" address. // This address must be verified with Amazon SES. $sender_email = 'sender@example.com'; // Replace these sample addresses with the addresses of your recipients. If // your account is still in the sandbox, these addresses must be verified. $recipient_emails = ['recipient1@example.com','recipient2@example.com']; // Specify a configuration set. If you do not want to use a configuration // set, comment the following variable, and the // 'ConfigurationSetName' => $configuration_set argument below. $configuration_set = 'ConfigSet'; $subject = 'Amazon SES test (PHP용 AWS SDK)'; $plaintext_body = 'This email was sent with Amazon SES using the AWS SDK for PHP.' ; $html_body = '<h1>AWS Amazon Simple Email Service Test Email</h1>'. '<p>This email was sent with <a href="https://aws.amazon.com/ses/">'. 'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-php/">'. 'PHP용 AWS SDK</a>.</p>'; $char_set = 'UTF-8'; try { $result = $SesClient->sendEmail([ 'Destination' => [ 'ToAddresses' => $recipient_emails, ], 'ReplyToAddresses' => [$sender_email], 'Source' => $sender_email, 'Message' => [ 'Body' => [ 'Html' => [ 'Charset' => $char_set, 'Data' => $html_body, ], 'Text' => [ 'Charset' => $char_set, 'Data' => $plaintext_body, ], ], 'Subject' => [ 'Charset' => $char_set, 'Data' => $subject, ], ], // If you aren't using a configuration set, comment or delete the // following line 'ConfigurationSetName' => $configuration_set, ]); $messageId = $result['MessageId']; echo("Email sent! Message ID: $messageId"."\n"); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo("The email was not sent. Error message: ".$e->getAwsErrorMessage()."\n"); echo "\n"; }
Python

다음 코드 예제는 Amazon SES에서 AWS SDK for Python (Boto)를 사용하여 이메일을 전송할 수 있는 완전한 솔루션입니다. 단, 이 코드 예제는 AWS SDK for Python (Boto)이 설치되어 있고 공유 자격 증명 파일이 생성되어 있다는 가정을 전제로 합니다. 공유 자격 증명 파일의 생성에 대한 자세한 내용은 공유 자격 증명 파일 생성 단원을 참조하십시오.

중요

공유 자격 증명 파일을 사용하여 AWS 액세스 키 ID 및 보안 액세스 키를 전달합니다. 공유 자격 증명 파일을 사용하는 대신, 두 가지 환경 변수(각각 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)를 설정하여 AWS 액세스 키 ID 및 보안 액세스 키를 지정할 수 있습니다. 다음 예시는 이러한 메서드 중 하나를 사용하여 자격 증명을 지정하지 않으면 작동하지 않습니다.

import boto3 from botocore.exceptions import ClientError # Replace sender@example.com with your "From" address. # This address must be verified with Amazon SES. SENDER = "Sender Name <sender@example.com>" # Replace recipient@example.com with a "To" address. If your account # is still in the sandbox, this address must be verified. RECIPIENT = "recipient@example.com" # Specify a configuration set. If you do not want to use a configuration # set, comment the following variable, and the # ConfigurationSetName=CONFIGURATION_SET argument below. CONFIGURATION_SET = "ConfigSet" # If necessary, replace us-west-2 with the AWS Region you're using for Amazon SES. AWS_REGION = "us-west-2" # The subject line for the email. SUBJECT = "Amazon SES Test (SDK for Python)" # The email body for recipients with non-HTML email clients. BODY_TEXT = ("Amazon SES Test (Python)\r\n" "This email was sent with Amazon SES using the " "AWS SDK for Python (Boto)." ) # The HTML body of the email. BODY_HTML = """<html> <head></head> <body> <h1>Amazon SES Test (SDK for Python)</h1> <p>This email was sent with <a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the <a href='https://aws.amazon.com/sdk-for-python/'> AWS SDK for Python (Boto)</a>.</p> </body> </html> """ # The character encoding for the email. CHARSET = "UTF-8" # Create a new SES resource and specify a region. client = boto3.client('ses',region_name=AWS_REGION) # Try to send the email. try: #Provide the contents of the email. response = client.send_email( Destination={ 'ToAddresses': [ RECIPIENT, ], }, Message={ 'Body': { 'Html': { 'Charset': CHARSET, 'Data': BODY_HTML, }, 'Text': { 'Charset': CHARSET, 'Data': BODY_TEXT, }, }, 'Subject': { 'Charset': CHARSET, 'Data': SUBJECT, }, }, Source=SENDER, # If you are not using a configuration set, comment or delete the # following line ConfigurationSetName=CONFIGURATION_SET, ) # Display an error if something goes wrong. except ClientError as e: print(e.response['Error']['Message']) else: print("Email sent! Message ID:"), print(response['MessageId'])
Ruby

다음 코드 예제는 Amazon SES에서 Ruby용 AWS SDK를 사용하여 이메일을 전송할 수 있는 완전한 솔루션입니다. 단, 이 코드 예제는 Ruby용 AWS SDK가 설치되어 있고 공유 자격 증명 파일이 생성되어 있다는 가정을 전제로 합니다. Ruby용 SDK 설치에 대한 자세한 내용은 Ruby용 AWS SDK Developer GuideRuby용 AWS SDK 설치를 참조하십시오. 공유 자격 증명 파일의 생성에 대한 자세한 내용은 공유 자격 증명 파일 생성 단원을 참조하십시오.

중요

공유 자격 증명 파일을 사용하여 AWS 액세스 키 ID 및 보안 액세스 키를 전달합니다. 공유 자격 증명 파일을 사용하는 대신, 두 가지 환경 변수(각각 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)를 설정하여 AWS 액세스 키 ID 및 보안 액세스 키를 지정할 수 있습니다. 다음 예시는 이러한 메서드 중 하나를 사용하여 자격 증명을 지정하지 않으면 작동하지 않습니다.

require 'aws-sdk' # Replace sender@example.com with your "From" address. # This address must be verified with Amazon SES. sender = "sender@example.com" # Replace recipient@example.com with a "To" address. If your account # is still in the sandbox, this address must be verified. recipient = "recipient@example.com" # Specify a configuration set. If you do not want to use a configuration # set, comment the following variable and the # configuration_set_name: configsetname argument below. configsetname = "ConfigSet" # Replace us-west-2 with the AWS Region you're using for Amazon SES. awsregion = "us-west-2" # The subject line for the email. subject = "Amazon SES test (Ruby용 AWS SDK)" # The HTML body of the email. htmlbody = '<h1>Amazon SES test (Ruby용 AWS SDK)</h1>'\ '<p>This email was sent with <a href="https://aws.amazon.com/ses/">'\ 'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-ruby/">'\ 'Ruby용 AWS SDK</a>.' # The email body for recipients with non-HTML email clients. textbody = "This email was sent with Amazon SES using the Ruby용 AWS SDK." # Specify the text encoding scheme. encoding = "UTF-8" # Create a new SES resource and specify a region ses = Aws::SES::Client.new(region: awsregion) # Try to send the email. begin # Provide the contents of the email. resp = ses.send_email({ destination: { to_addresses: [ recipient, ], }, message: { body: { html: { charset: encoding, data: htmlbody, }, text: { charset: encoding, data: textbody, }, }, subject: { charset: encoding, data: subject, }, }, source: sender, # Comment or remove the following line if you are not using # a configuration set configuration_set_name: configsetname, }) puts "Email sent!" # If something goes wrong, display an error message. rescue Aws::SES::Errors::ServiceError => error puts "Email not sent. Error message: #{error}" end

Amazon SES에 관련된 다양한 주제에 대한 정보와 토론은 AWS 메시징 및 타게팅 블로그를 참조하십시오. 질문을 찾아보거나 게시하려면 Amazon SES 포럼으로 이동하십시오.