Spring Boot 및 Spring Cloud PlatoBlockchain Data Intelligence를 사용한 Simple Email Service(AWS SES) 가이드입니다. 수직 검색. 일체 포함.

Spring Boot 및 Spring Cloud를 사용한 단순 이메일 서비스(AWS SES) 가이드

개요

AWS SES(단순 이메일 서비스) 설정이 간편한 이메일 송수신 서비스입니다. 일반적으로 사내 이메일 시스템을 관리하는 것은 어렵고 까다롭고 지루하므로 프로세스를 아웃소싱하는 것이 인기 있는 선택입니다.

Amazon SES를 사용하여 거래 이메일, 마케팅 이메일 또는 기타 유형의 알림 이메일을 고객에게 보낼 수 있습니다. 이메일을 사용하여 고객과 연결하는 모든 규모의 비즈니스를 위한 경제적인 솔루션입니다. Amazon Web Services (AWS).

대량 이메일 전송의 경우 모든 애플리케이션이 Amazon SES와 상호 작용할 수 있습니다. 거래 이메일이든 마케팅 이메일이든 실제로 보내는 이메일에 대해서만 비용을 지불합니다. 또한 전용, 공유 또는 소유 IP 주소를 비롯한 다양한 구성이 Amazon SES에서 지원됩니다. 기업은 전달성 대시보드와 발신자 정보에 대한 보고서를 사용하여 모든 이메일을 의미 있게 만들 수 있습니다.

이 가이드에서는 리전에서 AWS SES 인스턴스를 구성한 다음 다음과 통합합니다. AWS용 스프링 클라우드 의 하위 프로젝트입니다. 봄 구름. 우리는 애플리케이션에서 이메일을 보내기 위해 다양한 시나리오를 시도할 것입니다.

참고 : 가이드에 사용된 모든 소스 코드는 에서 찾을 수 있습니다. 깃허브.

AWS SES를 사용한 이메일 전송 수명 주기

애플리케이션에서 보낸 이메일의 수명 주기가 대상 사서함에 도달하는 방법을 살펴보겠습니다.

  • 이 경우 애플리케이션은 Spring Cloud 코드에서 AWS SES에 이메일을 한 명 이상의 수신자에게 보내도록 요청합니다.

  • SES는 처음에 요청을 확인하고 승인되면 요청 사양이 포함된 이메일 메시지를 생성합니다. 이 이메일 메시지에는 헤더, 본문 및 봉투가 있으며 다음을 준수합니다. RFC 5322의 인터넷 메시지 형식 정의.

  • 그런 다음 SES는 인터넷을 통해 수신자의 수신자에게 메시지를 전송합니다. 메시지가 SES로 전달되자마자 바로 전송되는 경우가 많으며 일반적으로 초기 전달 시도는 밀리초 단위로 이루어집니다.

  • 현재 여러 가지 결과가 있습니다. 예를 들어:

    • 성공적인 배송: 인터넷 서비스 제공자(ISP)가 이메일을 수락하여 원하는 수신자에게 보냅니다.
    • 하드 바운스: 수신자의 주소가 잘못되어 ISP에서 이메일을 거부합니다. ISP가 하드 바운스 알림을 Amazon SES로 다시 보내면 이메일을 통해 발신자에게 알리거나 이 알림을 수신하도록 설정된 Amazon Simple Notification Service(Amazon SNS) 주제에 게시하여 알립니다.
    • 소프트 바운스: 수신자의 받은 편지함이 꽉 찼거나, 도메인이 존재하지 않거나, ISP가 너무 바빠서 요청을 처리할 수 없는 일시적인 상황과 같은 조건으로 인해 ISP가 수신자에게 이메일을 전달하지 못할 수 있습니다. 그런 다음 ISP는 특정 횟수까지 이메일을 재시도하고 SES에 소프트 바운스 메시지를 보냅니다. SES가 지정된 시간 내에 이메일을 전달할 수 없는 경우 이벤트를 SNS 주제에 게시하거나 이메일을 통해 하드 바운스 메시지를 보냅니다.
    • 불평: 이메일은 수신자의 이메일 프로그램에서 스팸으로 분류됩니다. 수신 거부 알림이 Amazon SES로 전송된 다음 Amazon SES와 ISP에 피드백 루프가 설정된 경우 이를 발신자에게 전달합니다.
    • 자동 응답: 수신자 ISP는 부재중 알림과 같은 수신자의 자동 응답을 Amazon SES에 알리고 Amazon SES는 알림을 발신자에게 전달합니다.

전송에 실패하면 Amazon SES가 발신자에게 오류를 반환하고 이메일을 삭제합니다.

Amazon SES 설정

다른 AWS 서비스와 달리 기본적으로 모든 새 AWS 계정이 AWS SES 샌드박스에 배치되므로 SES 인스턴스를 생성할 필요가 거의 없습니다. 각 AWS 계정에는 기본적으로 사용 가능한 리전의 AWS SES에 대한 샌드박스 액세스 권한이 있습니다.

샌드박스 모드를 사용하는 경우 확인된 ID에만 이메일을 보낼 수 있습니다. 이메일을 보내는 데 사용하는 도메인 또는 이메일 주소는 확인된 ID입니다. 우리는 우리가 사용하려는 각 ID를 구성하고 검증해야 합니다. From, To, Source, SenderReturn-Path 샌드박스 모드에서 SES를 사용하여 이메일을 보내기 전에 주소를 입력해야 합니다. Amazon SES를 사용하여 신원을 확인함으로써 소유권을 증명하고 불법적인 사용을 막을 수 있습니다.

사기를 방지하고 IP 주소의 평판을 보존하기 위해 AWS SES에는 이메일 전송 제한이 포함되어 있습니다. 이러한 제한은 초당 최대 이메일 수와 각 사용자의 일일 이메일 제한을 지정합니다. AWS 지원 센터에 연락하여 지역별로 이러한 할당량을 설정할 수 있습니다.

신원을 확인합시다. AWS 콘솔에 로그인하고 "아마존 심플 이메일 서비스"

SES 소개

그런 다음 "아이디 생성"를 클릭하여 확인을 위해 이메일 또는 도메인을 추가합니다. 우리의 경우 확인을 위해 이메일을 추가할 것입니다.

아이디 생성

ID가 생성되면 세부 정보를 확인할 수 있습니다.

생성된 ID

우리가 만든 아이덴티티는 "확인 대기 중" 무대. 이 단계에서 사용자는 AWS에서 보낸 확인 메일을 확인하고 지침에 따라 확인된 이메일을 받아야 합니다.

확인된 신원

다음으로 "액세스 키"및"비밀 키” SES로 애플리케이션의 인증 및 승인을 위해. 이를 생성하려면 사용자 그룹을 만들고 해당 그룹에 사용자를 추가해야 합니다. 해당 사용자를 생성하면 AWS는 액세스 키와 비밀 키를 생성합니다. 따라서 "로 리디렉션하겠습니다.IAM"를 클릭하고 사용자 그룹을 생성합니다.

사용자 그룹 생성

그런 다음 "을 추가해야 합니다.관리자액세스" SES에 대한 해당 그룹에 대한 권한.

권한 추가

마지막으로 위의 그룹에 사용자를 추가합니다.

사용자 추가

다음으로 권한 그룹을 선택해야 합니다.

그룹 추가

마지막으로 추가 사용을 위해 화면에 표시된 액세스 키와 비밀 키를 복사합니다.

Spring Cloud 프로젝트를 사용하여 이메일 보내기

프로젝트 설정

Spring Cloud 프로젝트를 시작하고 사용 사례를 실행하여 SES와 통합해 봅시다. 스켈레톤 프로젝트를 시작하는 가장 쉬운 방법은 봄 이니셜 라이저:

봄 이니셜 라이저

우리는 추가했다 스프링 웹 REST MVC의 경우 아파치 프리마커 HTML 기반 이메일 템플릿을 생성하기 위해 자바 메일 발신자 이메일을 보내고 칠레 고추를 넣은 저민 고기와 강낭콩 스튜 (선택적 상용구 감소 라이브러리) 종속성. 또한 Spring Cloud AWS 및 SES에 대한 관련 종속성을 추가해야 합니다. Spring Cloud AWS의 경우 별도의 Spring Cloud AWS BOM을 pom.xml 이것을 사용하는 파일 블록 :

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>io.awspring.cloud</groupId>
			<artifactId>spring-cloud-aws-dependencies</artifactId>
			<version>2.3.0</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

마지막으로 SES에 대한 지원을 추가하려면 시작 모듈로 사용할 수 있는 모듈 종속성을 포함해야 합니다. spring-cloud-starter-aws-ses:

<dependency>
	<groupId>io.awspring.cloud</groupId>
	<artifactId>spring-cloud-starter-aws-ses</artifactId>
</dependency>

spring-cloud-starter-aws-ses 에 대한 전이 종속성을 포함합니다. spring-cloud-starter-awsspring-cloud-aws-ses. 그만큼 spring-cloud-aws-ses SES용 모듈에는 두 가지 클래스가 포함되어 있습니다. SimpleEmailServiceMailSenderSimpleEmailServiceJavaMailSender.

  • XNUMXD덴탈의 SimpleEmailServiceMailSender 클래스는 Amazon Simple Email Service를 사용하여 이메일을 보냅니다. Java Mail API는 이 구현에 대한 요구 사항이 아닙니다. 첨부 파일이 없는 간단한 메일 메시지를 보내는 데 사용할 수 있습니다.
  • XNUMXD덴탈의 SimpleEmailServiceJavaMailSender 클래스를 사용하면 첨부 파일 및 기타 MIME 요소가 포함된 이메일을 보낼 수 있습니다.

이것은 우리의 모든 기본 요구 사항을 다룹니다!

빈 구성

위에서 논의한 바와 같이 두 가지 유형의 빈을 정의해야 합니다. SimpleEmailServiceMailSenderSimpleEmailServiceJavaMailSender. 액세스 키와 비밀 키를 자격 증명으로 전달하고 구성할 수 있습니다. MailSender 이메일을 보내는 데 사용할 bean:

@Configuration
public class SesConfig {

    @Value("${cloud.aws.credentials.access-key}")
    private String accessKey;

    @Value("${cloud.aws.credentials.secret-key}")
    private String secretKey;

    @Value("${cloud.aws.region.static}")
    private String region;

    @Bean
    public AmazonSimpleEmailService amazonSimpleEmailService() {
        BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
        return AmazonSimpleEmailServiceClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(credentials))
                .withRegion(region)
                .build();
    }

    @Bean
    public MailSender mailSender(AmazonSimpleEmailService amazonSimpleEmailService) {
        return new SimpleEmailServiceMailSender(amazonSimpleEmailService);
    }

    @Bean
    public JavaMailSender javaMailSender(AmazonSimpleEmailService amazonSimpleEmailService) {
        return new SimpleEmailServiceJavaMailSender(amazonSimpleEmailService);
    }
}

첨부 파일이 있는 이메일을 보내려면 다음을 구성해야 합니다. SimpleEmailServiceJavaMailSender 의 구현입니다 JavaMailSender Spring의 메일 추상화에서 인터페이스.

모범 사례, 업계에서 인정하는 표준 및 포함된 치트 시트가 포함된 Git 학습에 대한 실습 가이드를 확인하십시오. 인터넷 검색 Git 명령을 중지하고 실제로 배움 이것!

또한 정보를 검색할 속성을 정의합니다. application.yml:

cloud:
  aws:
    region:
      static: eu-central-1
      auto: false
    stack:
      auto: false
    credentials:
      access-key: ********
      secret-key: **************************

간단한 이메일 보내기

다음을 사용하여 간단한 이메일을 보낼 수 있습니다. SimpleEmailServiceMailSender 위에서 설정한 bean. 이 빈을 사용하기 위해 서비스 계층을 정의합시다:

@Service
public class EmailService {

    @Autowired
    private MailSender mailSender;

    public void sendMessage(SimpleMailMessage simpleMailMessage) {
        this.mailSender.send(simpleMailMessage);
    }
}

우리는 전화 send() 의 방법 MailSender Bean을 사용하여 이메일을 보냅니다. 우리도 통과해야 합니다. SimpleMailMessage 다음과 같은 속성을 포함합니다. from, to, 이메일의 텍스트 및 제목입니다. 그래서 정의하자 Controller REST API를 사용하여 위의 서비스를 호출하는 클래스:

@RestController
public class EmailController {

    @Autowired
    private EmailService emailService;

    @PostMapping("/sendEmail")
    public String sendMessage(@RequestBody EmailDetails emailDetails) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(emailDetails.getFromEmail());
        simpleMailMessage.setTo(emailDetails.getToEmail());
        simpleMailMessage.setSubject(emailDetails.getSubject());
        simpleMailMessage.setText(emailDetails.getBody());
        emailService.sendMessage(simpleMailMessage);

        return "Email sent successfully";
    }
}

이제 애플리케이션을 실행하고 다음 curl을 실행하면 확인된 이메일 주소로 이메일이 전송됩니다.

curl -i -X POST 
   -H "Content-Type:application/json" 
   -d 
'{
  "fromEmail": "[email protected]",
  "toEmail": "[email protected]",
  "subject": "test email",
  "body": "Hi, This is a test email."
}' 
 'http://localhost:8080/sendEmail'

다음으로 수신자의 메일 주소에 로그인하여 수신자가 이메일을 받았는지 확인할 수 있습니다.

첨부파일이 있는 간단한 이메일 보내기

첨부 파일을 MIME으로 전달하고 다음과 같은 다른 이메일 속성을 설정하도록 서비스 계층을 정의합니다. from, to, 텍스트 및 제목:

@Service
public class EmailService {

    @Autowired
    private JavaMailSender javaMailSender;

    public void sendMessageWithAttachment(SimpleMailMessage simpleMailMessage) {

        try {
            MimeMessage message = javaMailSender.createMimeMessage();

            
            MimeMessageHelper helper = new MimeMessageHelper(
                    message,
                    MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED,
                    StandardCharsets.UTF_8.name());

            
            helper.addAttachment("logo.png", new ClassPathResource("logo.png"));
            helper.setTo(Objects.requireNonNull(simpleMailMessage.getTo()));
            helper.setText(Objects.requireNonNull(simpleMailMessage.getText()));
            helper.setSubject(Objects.requireNonNull(simpleMailMessage.getSubject()));
            helper.setFrom(Objects.requireNonNull(simpleMailMessage.getFrom()));
            javaMailSender.send(message);

        } catch (MessagingException e) {
            System.err.println("Exception: " + e.getMessage());
        }
    }
}

여기서 우리는 사용하고 있습니다 MimeMessageHelper 첨부 파일이 포함된 이메일을 생성합니다. 마지막으로 정의하겠습니다. Controller 통과하는 레이어 SimpleMailMessage 속성 :

@RestController
public class EmailController {

    @Autowired
    private EmailService emailService;

    @PostMapping("/sendEmailWithAttachment")
    public String sendMessageWithAttachment(@RequestBody EmailDetails emailDetails) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(emailDetails.getFromEmail());
        simpleMailMessage.setTo(emailDetails.getToEmail());
        simpleMailMessage.setSubject(emailDetails.getSubject());
        simpleMailMessage.setText(emailDetails.getBody());
        emailService.sendMessageWithAttachment(simpleMailMessage);

        return "Email sent successfully";
    }
}

이제 애플리케이션을 실행하고 다음 curl을 실행하면 확인된 이메일 주소로 이메일이 전송됩니다.

curl -i -X POST 
   -H "Content-Type:application/json" 
   -d 
'{
  "fromEmail": "[email protected]",
  "toEmail": "[email protected]",
  "subject": "test email",
  "body": "Hi, This is a test email with attachment."
}' 
 'http://localhost:8080/sendEmailWithAttachment'

다음으로 수신자의 메일 주소에 로그인하여 수신자가 이메일을 받았는지 확인할 수 있습니다.

첨부 파일이 있는 템플릿 이메일 보내기

우리가 본 이전 사용 사례는 개발 또는 테스트 시나리오에 적합하지만 프로덕션에서는 일반적으로 API 응답을 사용하여 대체될 변수가 있는 이메일 템플릿을 사용합니다. 우리는 이전에 에 대한 종속성을 추가했습니다. 아파치 프리마커. 템플릿을 정의하고 처리하기 위해 로드하는 데 사용할 것입니다!

이를 위해 먼저 간단한 템플릿을 정의하고 이름을 다음과 같이 지정하겠습니다. email-template.ftl 그리고 그것을 넣어 templates 아래의 폴더 resources:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>StackAbuse Email</title>
</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td align="center" valign="top" bgcolor="#838383"
            style="background-color: #838383;"><br> <br>
            <table width="600" border="0" cellspacing="0" cellpadding="0">
                <tr>
                    <td align="center" valign="top" bgcolor="#d3be6c"
                        style="background-color: #d3be6c; font-family: Arial,
                         Helvetica, sans-serif; font-size: 13px; color: #000000;
                          padding: 0px 15px 10px 15px;">

                        <div style="font-size: 48px; color:blue;">
                            <b>StackAbuse</b>
                        </div>

                        <div style="font-size: 24px; color: #555100;">
                            <br> Sending Email using Spring Cloud with <b>FreeMarker</b> template !!! <br>
                        </div>
                        <div>
                            <br> Want to learn a new technology or become an in-demand full-stack developer?<br>
                            <br> We teach the skills you need to level up in your career.<br>
                            <br>"Sharing knowledge is the biggest learning" <br> <br>
                            <br> <br> <b>${Name}</b><br>${location}<br>
                            <br>
                        </div>
                    </td>
                </tr>
            </table> <br> <br></td>
    </tr>
</table>
</body>
</html>

다음으로 경로에서 템플릿을 로드하고 빈으로 추가할 구성 클래스를 정의해야 합니다. 이를 위해 우리는 정의 할 것입니다 FreeMarkerConfigurationFactoryBean:

@Configuration
public class FreemarkerConfig {

    @Primary
    @Bean
    public FreeMarkerConfigurationFactoryBean factoryBean() {
        FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean();
        bean.setTemplateLoaderPath("classpath:/templates");
        return bean;
    }
}

다음으로 이 템플릿을 로드하고 SES에 보낼 최종 메시지를 생성하도록 서비스 계층을 정의합니다.

@Service
public class EmailService {
    
    @Autowired
    private JavaMailSender javaMailSender;

    @Autowired
    private Configuration config;
    
    public void sendTemplateMessageWithAttachment(SimpleMailMessage simpleMailMessage) {

        try {
            MimeMessage message = javaMailSender.createMimeMessage();

            
            MimeMessageHelper helper = new MimeMessageHelper(
                    message,
                    MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED,
                    StandardCharsets.UTF_8.name());

            Template t = config.getTemplate("email-template.ftl");
            Map model = new HashMap();
            model.put("Name", "StackAbuse Admin");
            model.put("location", "Bangalore, India");
            String html = FreeMarkerTemplateUtils.processTemplateIntoString(t, model);

            
            helper.addAttachment("logo.png", new ClassPathResource("logo.png"));
            helper.setTo(Objects.requireNonNull(simpleMailMessage.getTo()));
            helper.setText(html, true);
            helper.setSubject(Objects.requireNonNull(simpleMailMessage.getSubject()));
            helper.setFrom(Objects.requireNonNull(simpleMailMessage.getFrom()));
            javaMailSender.send(message);

        } catch (MessagingException | IOException | TemplateException e) {
            System.err.println("Exception: " + e.getMessage());
        }
    }

마지막으로 정의하겠습니다. Controller 동적 이메일 속성을 전달하는 계층:

@RestController
public class EmailController {

    @Autowired
    private EmailService emailService;

    @PostMapping("/sendTemplateEmailWithAttachment")
    public String sendTemplateMessageWithAttachment(@RequestBody EmailDetails emailDetails) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(emailDetails.getFromEmail());
        simpleMailMessage.setTo(emailDetails.getToEmail());
        simpleMailMessage.setSubject(emailDetails.getSubject());
        simpleMailMessage.setText(emailDetails.getBody());
        emailService.sendTemplateMessageWithAttachment(simpleMailMessage);

        return "Email sent successfully";
    }
}

이제 애플리케이션을 실행하고 다음 curl을 실행하면 확인된 이메일 주소로 이메일이 전송됩니다.

curl -i -X POST 
   -H "Content-Type:application/json" 
   -d 
'{
  "fromEmail": "[email protected]",
  "toEmail": "[email protected]",
  "subject": "test email",
  "body": "Hi, This is a test template email with attachment."
}' 
 'http://localhost:8080/sendTemplateEmailWithAttachment'

다음으로 수신자의 메일 주소에 로그인하여 수신자가 이메일을 수신했는지 확인할 수 있습니다.

프리마커 템플릿 이메일

AWS SES의 템플릿을 사용하여 개인화된 이메일 보내기

이전 사용 사례에서는 정적 템플릿을 사용하여 이메일을 보냈습니다. 다양한 목적과 다양한 유형의 수신자를 위해 템플릿을 동적으로 디자인할 수 있는 방법은 무엇입니까? AWS SES를 사용하면 단일 작업으로 하나 이상의 대상에 개인화된 이메일을 보내는 이메일 템플릿을 생성할 수 있습니다.

Amazon SES 계정당 최대 10,000개의 이메일 템플릿을 생성할 수 있습니다. 각 템플릿의 크기는 텍스트와 HTML 부분을 모두 포함하여 최대 500KB입니다. 각 통화에서 최대 50개의 목적지를 보낼 수 있습니다.

이제 이메일 템플릿을 빠르게 만들어 보겠습니다. 먼저 다음 템플릿을 사용하여 JSON 파일을 정의할 수 있습니다.

{
  "Template": {
    "TemplateName": "MyTemplate",
    "SubjectPart": "Greetings from {{name}}!",
    "HtmlPart": "StackAbuse Email


StackAbuse

Sending Email using Spring Cloud with AWS SES Email template !!!

Want to learn a new technology or become an in-demand full-stack developer?

We teach the skills you need to level up in your career.

"Sharing knowledge is the biggest learning"



{{name}}
{{location}}



"
, "TextPart": "Dear {{name}},rnHere is your StackAbuse Email." } }

이 템플릿에는 다음 속성이 포함되어 있습니다.

  • 템플릿 이름: 여기에는 템플릿의 이름이 포함됩니다.
  • 주제부분: 이메일의 제목을 포함합니다. 이 자산에 대체 태그가 있을 수 있습니다. 이러한 태그의 형식은 다음과 같습니다. {{tagname}}. 에 대한 값을 입력할 수 있습니다. {{tagname}} 이메일을 보낼 때 각 대상에 대해.
  • HtmlPart: 여기에는 이메일의 HTML 본문이 포함되며 대체 태그도 포함될 수 있습니다.
  • 텍스트 부분: 이메일의 본문을 나타냅니다. 이 버전의 이메일은 이메일 클라이언트가 HTML 이메일을 보지 않는 수신자에게 전송됩니다. 이 자산에 대체 태그가 있을 수 있습니다.

이 파일을 다음과 같이 저장할 수 있습니다. mytemplate.json. 마지막으로 AWS CLI 명령을 사용하여 다음과 같이 템플릿을 생성할 수 있습니다.

$ aws ses create-template --cli-input-json file://mytemplate.json

다음으로 서비스 계층을 정의하여 속성을 정의하고 템플릿 이메일을 보내겠습니다.

@Service
public class EmailService {

    @Autowired
    private AmazonSimpleEmailService simpleEmailService;

    public void sendTemplatedMessage(SimpleMailMessage simpleMailMessage) {

        Destination destination = new Destination();
        List toAddresses = new ArrayList();
        String[] emails = simpleMailMessage.getTo();
        Collections.addAll(toAddresses, Objects.requireNonNull(emails));
        destination.setToAddresses(toAddresses);

        SendTemplatedEmailRequest templatedEmailRequest = new SendTemplatedEmailRequest();
        templatedEmailRequest.withDestination(destination);
        templatedEmailRequest.withTemplate("MyTemplate");
        templatedEmailRequest.withTemplateData("{ "name":"StackAbuse Admin", "location": "Bangalore, India"}");
        templatedEmailRequest.withSource(simpleMailMessage.getFrom());
        simpleEmailService.sendTemplatedEmail(templatedEmailRequest);
    }
}

우리는 여러 개를 추가할 수 있습니다 Destination 여러 수신자에게 대량 이메일을 보낼 수 있는 주소. 우리는 사용하고 있습니다 sendTemplatedEmail() 의 방법 AmazonSimpleEmailService 이 템플릿 이메일을 보내기 위한 인터페이스입니다. 또한 이전에 만든 템플릿의 HTML 텍스트에서 교체할 교체 태그를 전달해야 합니다.

마지막으로 정의하겠습니다. Controller 속성을 전달하기 위해 REST API를 정의하는 레이어:

@RestController
public class EmailController {

    @Autowired
    private EmailService emailService;

    @PostMapping("/sendAWSTemplatedEmail")
    public String sendTemplatedMessage(@RequestBody EmailDetails emailDetails) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(emailDetails.getFromEmail());
        simpleMailMessage.setTo(emailDetails.getToEmail());
        simpleMailMessage.setSubject(emailDetails.getSubject());
        simpleMailMessage.setText(emailDetails.getBody());
        emailService.sendTemplatedMessage(simpleMailMessage);

        return "Email sent successfully";
    }
}

다음으로 앱을 실행할 때 다음을 실행할 수 있습니다. curl 템플릿 이메일을 보내려면:

curl -i -X POST 
   -H "Content-Type:application/json" 
   -d 
'{
  "fromEmail": "[email protected]",
  "toEmail": "[email protected]",
  "subject": "Greetings from StackAbuse Admin",
  "body": "Hi, This is a AWS templated email."
}' 
 'http://localhost:8080/sendAWSTemplatedEmail'

이제 수신자는 마침내 템플릿 이메일을 보게 됩니다.

템플릿 이메일

프로덕션 액세스 요청

마지막으로, 수신자의 주소나 도메인이 확인되었는지 여부에 관계없이 모든 수신자에게 이메일을 보내려면 궁극적으로 샌드박스에서 계정을 꺼내야 합니다. 다음을 포함한 우리의 모든 신원 From, Source, SenderReturn-Path 주소는 여전히 확인되어야 합니다. "에서 프로덕션 액세스 요청을 제출할 수 있습니다.계정 대시 보드" 페이지는 다음과 같습니다.

계정 대시 보드
프로덕션 액세스 요청

AWS 콘솔에서 위의 모든 세부 정보를 채우는 요청을 제출할 수 있습니다. AWS CLI를 사용하여 동일한 항목을 제출할 수도 있습니다. 이것은 많은 수의 ID에 대한 액세스를 요청해야 하고 프로세스를 자동화하려는 경우에 유용합니다.

결론

Amazon Simple Email Service(SES)의 주요 아이디어와 Spring Cloud AWS에서 이에 대한 인터페이스를 제공하는 라이브러리에 대해 다뤘습니다. 또한 Spring Cloud AWS SES 모듈을 통해 이메일을 보낼 수 있는 REST API를 사용하여 Spring Boot 애플리케이션을 만들었습니다.

이제 Amazon Simple Email Service(SES)가 무엇이며 이메일을 보내는 데 활용하는 방법을 확실히 이해해야 합니다.

타임 스탬프 :

더보기 스택카부스