Hướng dẫn về Dịch vụ email đơn giản (AWS SES) với Spring Boot và Spring Cloud PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Hướng dẫn về Dịch vụ Email Đơn giản (AWS SES) với Spring Boot và Spring Cloud

Giới thiệu

AWS SES (Dịch vụ email đơn giản) là một dịch vụ gửi và nhận email dễ cài đặt. Việc quản lý một hệ thống email tại chỗ thường khó khăn, phức tạp và tẻ nhạt, vì vậy thuê ngoài quy trình là một lựa chọn phổ biến.

Chúng tôi có thể sử dụng Amazon SES để gửi email giao dịch, email tiếp thị hoặc bất kỳ loại email thông báo nào khác cho khách hàng của mình. Đây là một giải pháp hợp lý cho các doanh nghiệp thuộc mọi quy mô sử dụng email để kết nối với khách hàng của họ vì nó được xây dựng trên cơ sở hạ tầng đáng tin cậy và có thể mở rộng của Amazon Web Services (AWS).

Để gửi email hàng loạt, bất kỳ ứng dụng nào cũng có thể tương tác với Amazon SES. Chúng tôi chỉ trả tiền cho những email chúng tôi thực sự gửi, cho dù đó là email giao dịch hay email tiếp thị. Ngoài ra, một loạt các cấu hình, bao gồm địa chỉ IP chuyên dụng, chia sẻ hoặc sở hữu, đều được Amazon SES hỗ trợ. Các doanh nghiệp có thể làm cho mọi email đều có giá trị bằng cách sử dụng bảng điều khiển khả năng gửi và báo cáo về thông tin người gửi.

Trong hướng dẫn này, chúng tôi sẽ định cấu hình phiên bản AWS SES trong một khu vực, sau đó tích hợp với Đám mây mùa xuân cho AWS đó là một tiểu dự án của Mây mùa xuân. Chúng tôi sẽ thử các kịch bản khác nhau để gửi email từ ứng dụng của chúng tôi.

Lưu ý: Bạn có thể tìm thấy tất cả mã nguồn được sử dụng trong hướng dẫn trên Github.

Vòng đời gửi email bằng AWS SES

Hãy xem vòng đời của một email được gửi bởi một ứng dụng đến hộp thư đích như thế nào:

  • Trong trường hợp của chúng tôi, một ứng dụng, mã Spring Cloud yêu cầu AWS SES gửi email đến một hoặc nhiều người nhận.

  • SES ban đầu xác minh yêu cầu và nếu yêu cầu được chấp thuận, sẽ tạo một thông báo email có thông số kỹ thuật của yêu cầu. Thông báo email này có tiêu đề, nội dung và phong bì và tuân thủ RFC 5322định nghĩa Định dạng Thư trên Internet.

  • SES sau đó truyền tin nhắn đến người nhận của người nhận qua Internet. Ngay sau khi tin nhắn được gửi tới SES, nó thường được truyền đi ngay lập tức, với nỗ lực gửi ban đầu thường diễn ra trong vài phần nghìn giây.

  • Có một số kết quả tại thời điểm này. Ví dụ:

    • giao hàng thành công: Nhà cung cấp dịch vụ Internet (ISP) chấp nhận email và gửi nó đến người nhận đã định.
    • Khó trả lại: Do địa chỉ người nhận không hợp lệ nên ISP từ chối email. ISP gửi thông báo bị trả lại cứng cho Amazon SES, thông báo này sẽ thông báo cho người gửi qua email hoặc bằng cách xuất bản thông báo đó lên chủ đề Dịch vụ thông báo đơn giản của Amazon (Amazon SNS) được thiết lập để nhận thông báo này.
    • Trả lại mềm: Do các điều kiện như hộp thư đến của người nhận đã đầy, miền không tồn tại hoặc bất kỳ trường hợp nào như ISP quá bận để xử lý yêu cầu, ISP có thể không gửi được email cho người nhận. Sau đó, ISP sẽ thử lại email tới một số lần nhất định và gửi cho SES một thông báo bị trả lại mềm. Nếu SES không thể gửi email trong khung thời gian đã chỉ định, thì SES sẽ xuất bản sự kiện lên một chủ đề SNS hoặc gửi thông báo bị trả lại cứng qua email.
    • Lời phàn nàn: Email được người nhận phân loại là thư rác trong chương trình email của họ. Thông báo khiếu nại được truyền tới Amazon SES, sau đó hệ thống này sẽ chuyển tiếp thông báo đó tới người gửi nếu Amazon SES và ISP đã thiết lập vòng phản hồi.
    • Phản hồi tự động: ISP người nhận thông báo cho Amazon SES về phản hồi tự động từ người nhận, chẳng hạn như thông báo vắng mặt và Amazon SES chuyển thông báo tới người gửi.

Khi gửi không thành công, Amazon SES trả về lỗi cho người gửi và xóa email.

Thiết lập Amazon SES

Không giống như bất kỳ Dịch vụ AWS nào khác, thực tế không cần tạo phiên bản SES vì tất cả tài khoản AWS mới được đặt trong hộp cát AWS SES theo mặc định. Theo mặc định, mỗi tài khoản AWS đều có quyền truy cập hộp cát cho AWS SES ở các khu vực khả dụng.

Khi sử dụng chế độ hộp cát, chúng tôi chỉ có thể gửi email đến các danh tính đã được xác minh. Tên miền hoặc địa chỉ email mà chúng tôi sử dụng để gửi email là danh tính đã được xác minh. Chúng tôi phải xây dựng và xác thực từng danh tính mà chúng tôi dự định sử dụng làm From, To, Source, Sender, hoặc là Return-Path địa chỉ trước khi chúng tôi có thể gửi email bằng SES ở chế độ hộp cát. Bằng cách sử dụng Amazon SES để xác minh danh tính, chúng tôi có thể chứng minh quyền sở hữu của mình và ngừng sử dụng bất hợp pháp.

Để tránh gian lận và bảo vệ uy tín của địa chỉ IP, AWS SES bao gồm các giới hạn gửi email. Những hạn chế này chỉ định số lượng email tối đa mỗi giây và giới hạn email hàng ngày cho mỗi người dùng. Bằng cách liên hệ với Trung tâm hỗ trợ AWS, chúng tôi có thể thiết lập hạn ngạch đó theo khu vực.

Hãy xác minh danh tính. Đăng nhập vào Bảng điều khiển AWS và tìm kiếm “Dịch vụ Email Đơn giản của Amazon"

Giới thiệu SES

Sau đó nhấp vào “Tạo danh tính” để thêm email hoặc tên miền để xác minh. Trong trường hợp của chúng tôi, chúng tôi sẽ thêm một email để xác minh.

Tạo danh tính

Sau khi danh tính được tạo, chúng tôi có thể xác minh chi tiết.

Danh tính đã tạo

Danh tính mà chúng tôi đã tạo đi vào “Đang chờ xác minh" sân khấu. Ở giai đoạn này, người dùng cần kiểm tra thư xác minh từ AWS và làm theo hướng dẫn để xác minh email.

Danh tính đã xác minh

Tiếp theo, chúng ta cần tìm nạp “khóa truy cập"Và"chìa khoá bí mật” để xác thực và ủy quyền ứng dụng của chúng tôi với SES. Để tạo điều đó, chúng ta cần tạo Nhóm người dùng và thêm Người dùng vào nhóm đó. Khi chúng tôi tạo Người dùng đó, AWS sẽ tạo khóa truy cập và khóa bí mật. Vì vậy, hãy chuyển hướng đến “IAM” trong Bảng điều khiển AWS và tạo Nhóm người dùng.

Tạo nhóm người dùng

Sau đó, chúng ta cần thêm “Quyền truy cập của quản trị viên” quyền cho nhóm đó đối với SES.

Thêm quyền

Cuối cùng, chúng tôi sẽ thêm Người dùng vào nhóm trên.

Thêm người dùng

Tiếp theo, chúng ta cần chọn nhóm để cấp quyền.

Thêm nhóm

Cuối cùng, sao chép khóa truy cập và khóa bí mật hiển thị trên màn hình để sử dụng tiếp.

Gửi email bằng Spring Cloud Project

Thiết lập dự án

Hãy bắt đầu một dự án Spring Cloud và chạy qua các trường hợp sử dụng để tích hợp với SES. Cách dễ nhất để bắt đầu với một dự án khung là thông qua Khởi đầu mùa xuân:

Khởi đầu mùa xuân

Chúng tôi đã thêm Web mùa xuân cho REST MVC, Công cụ đánh dấu miễn phí của Apache để tạo các mẫu email dựa trên HTML, Người gửi thư Java để gửi email và Lombok (thư viện giảm soạn sẵn tùy chọn) phụ thuộc. Ngoài ra, chúng tôi cần thêm các phụ thuộc có liên quan cho Spring Cloud AWS và SES. Đối với Spring Cloud AWS, chúng tôi sẽ thêm một BOM Spring Cloud AWS riêng vào pom.xml tập tin sử dụng này khối:

<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>

Cuối cùng, để thêm hỗ trợ cho SES, chúng tôi cần bao gồm phần phụ thuộc mô-đun có sẵn dưới dạng mô-đun khởi động spring-cloud-starter-aws-ses:

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

spring-cloud-starter-aws-ses bao gồm các phụ thuộc chuyển tiếp cho spring-cloud-starter-awsspring-cloud-aws-ses. Các spring-cloud-aws-ses module cho SES chứa hai lớp: SimpleEmailServiceMailSenderSimpleEmailServiceJavaMailSender.

  • Sản phẩm SimpleEmailServiceMailSender lớp sử dụng Dịch vụ email đơn giản của Amazon để gửi email. Java Mail API không phải là một yêu cầu đối với việc triển khai này. Nó có thể được sử dụng để gửi thư đơn giản không có tệp đính kèm.
  • Sản phẩm SimpleEmailServiceJavaMailSender lớp cho phép gửi email có chứa tệp đính kèm và các phần tử kịch câm khác.

Vì vậy, điều này bao gồm tất cả các yêu cầu cơ bản của chúng tôi!

Cấu hình đậu

Như đã thảo luận ở trên, chúng ta cần xác định hai loại đậu: SimpleEmailServiceMailSenderSimpleEmailServiceJavaMailSender. Chúng ta có thể chỉ cần chuyển khóa truy cập và khóa bí mật làm thông tin đăng nhập và định cấu hình MailSender bean mà chúng tôi sẽ sử dụng để gửi email:

@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);
    }
}

Để gửi email có tệp đính kèm, chúng tôi cần định cấu hình SimpleEmailServiceJavaMailSender đó là một thực hiện của JavaMailSender giao diện từ bản tóm tắt thư của Spring.

Xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, các tiêu chuẩn được ngành công nghiệp chấp nhận và bảng lừa đảo đi kèm. Dừng lệnh Googling Git và thực sự học nó!

Chúng tôi cũng sẽ xác định các thuộc tính để lấy thông tin từ application.yml:

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

Gửi Email đơn giản

Chúng tôi có thể gửi email đơn giản bằng cách sử dụng SimpleEmailServiceMailSender bean mà chúng ta đã cấu hình ở trên. Hãy xác định một lớp dịch vụ để sử dụng bean này:

@Service
public class EmailService {

    @Autowired
    private MailSender mailSender;

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

Chúng tôi đang gọi send() phương pháp trong MailSender đậu để gửi email của chúng tôi. Chúng ta cũng cần thông qua SimpleMailMessage sẽ chứa các thuộc tính như from, to, văn bản và chủ đề cho email của chúng tôi. Vì vậy, hãy xác định một Controller class để gọi dịch vụ trên bằng API REST:

@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";
    }
}

Bây giờ, nếu chúng ta chạy ứng dụng và thực hiện lệnh curl sau, nó sẽ gửi một email đến địa chỉ email đã xác minh:

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'

Tiếp theo, chúng tôi có thể đăng nhập vào địa chỉ thư của người nhận và xác minh xem người nhận đã nhận được email chưa.

Gửi email đơn giản với tệp đính kèm

Chúng tôi sẽ xác định một lớp dịch vụ để chuyển tệp đính kèm dưới dạng mime và đặt các thuộc tính email khác như from, to, văn bản và chủ đề:

@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());
        }
    }
}

Ở đây chúng tôi đang sử dụng MimeMessageHelper để tạo một email có tệp đính kèm. Cuối cùng, chúng ta sẽ định nghĩa Controller lớp để vượt qua SimpleMailMessage thuộc tính:

@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";
    }
}

Bây giờ, nếu chúng ta chạy ứng dụng và thực hiện lệnh curl sau, nó sẽ gửi một email đến địa chỉ email đã xác minh:

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'

Tiếp theo, chúng tôi có thể đăng nhập vào địa chỉ thư của người nhận và xác minh xem người nhận đã nhận được email chưa.

Gửi Email mẫu có tệp đính kèm

Các trường hợp sử dụng trước đây mà chúng tôi đã thấy phù hợp với các tình huống thử nghiệm hoặc phát triển nhưng trong sản xuất, chúng tôi thường sử dụng mẫu email có các biến sẽ được thay thế bằng cách sử dụng phản hồi của API. Trước đó chúng tôi đã thêm phần phụ thuộc cho Công cụ đánh dấu miễn phí của Apache. Chúng tôi sẽ sử dụng nó để xác định một mẫu và tải nó để xử lý!

Đối với điều này, trước tiên hãy xác định một mẫu đơn giản, đặt tên là email-template.ftl và đặt nó vào templates thư mục dưới 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>

Tiếp theo, chúng ta cần xác định một lớp cấu hình để tải mẫu từ đường dẫn và thêm dưới dạng bean. Đối với điều này, chúng tôi sẽ xác định FreeMarkerConfigurationFactoryBean:

@Configuration
public class FreemarkerConfig {

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

Tiếp theo, chúng tôi sẽ xác định lớp dịch vụ của mình để tải mẫu này và tạo thông báo cuối cùng để gửi tới 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());
        }
    }

Cuối cùng, chúng ta sẽ định nghĩa một Controller lớp để vượt qua các thuộc tính email động:

@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";
    }
}

Bây giờ, nếu chúng ta chạy ứng dụng và thực hiện lệnh curl sau, nó sẽ gửi một email đến địa chỉ email đã xác minh:

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'

Tiếp theo, chúng tôi có thể đăng nhập vào địa chỉ thư của người nhận và xác minh xem người nhận đã nhận được email chưa:

Email mẫu Freemarker

Gửi email được cá nhân hóa bằng Mẫu trong AWS SES

Trong trường hợp sử dụng trước, chúng tôi đã sử dụng một mẫu tĩnh để gửi email. Làm cách nào chúng tôi có thể kích hoạt các mẫu được thiết kế động cho các mục đích khác nhau và các loại người nhận khác nhau? AWS SES cho phép chúng tôi tạo các mẫu email để gửi email được cá nhân hóa tới một hoặc nhiều đích chỉ trong một thao tác.

Chúng tôi có thể tạo tối đa 10,000 mẫu email cho mỗi tài khoản Amazon SES. Mỗi mẫu có thể có kích thước lên tới 500KB, bao gồm cả phần văn bản và phần HTML. Chúng tôi có thể gửi tối đa 50 điểm đến trong mỗi cuộc gọi.

Vì vậy, hãy nhanh chóng tạo một mẫu email. Đầu tiên, chúng ta có thể xác định tệp JSON bằng mẫu sau:

{
  "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." } }

Mẫu này chứa các thuộc tính sau:

  • Tên mẫu: Phần này chứa tên của mẫu.
  • Phần chủ đề: Điều này giữ dòng chủ đề của email. Thẻ thay thế có thể xuất hiện trên nội dung này. Các thẻ này được định dạng như sau: {{tagname}}. Bạn có thể nhập một giá trị cho {{tagname}} cho mỗi điểm đến khi gửi email.
  • Phần Html: Phần này chứa nội dung HTML của email và nó cũng có thể chứa các thẻ thay thế.
  • phần văn bản: Điều này đại diện cho nội dung văn bản của email. Phiên bản email này được gửi đến người nhận có ứng dụng email khách không xem email HTML. Thẻ thay thế có thể xuất hiện trên nội dung này.

Chúng ta có thể lưu tệp này dưới dạng mytemplate.json. Cuối cùng, chúng ta có thể sử dụng lệnh AWS CLI để tạo mẫu như sau:

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

Tiếp theo, hãy xác định một lớp dịch vụ để xác định các thuộc tính và gửi email theo mẫu:

@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);
    }
}

Chúng ta có thể thêm nhiều Destination địa chỉ để gửi email hàng loạt đến nhiều người nhận. chúng tôi đang sử dụng sendTemplatedEmail() phương pháp từ AmazonSimpleEmailService giao diện để gửi email theo mẫu này. Chúng tôi cũng cần chuyển các thẻ thay thế sẽ được thay thế trong văn bản HTML của mẫu mà chúng tôi đã tạo trước đó.

Cuối cùng, chúng ta sẽ định nghĩa một Controller lớp để xác định API REST để chuyển các thuộc tính:

@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";
    }
}

Tiếp theo, khi chúng tôi chạy ứng dụng, chúng tôi có thể thực hiện như sau curl để gửi email theo khuôn mẫu:

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'

Bây giờ người nhận cuối cùng cũng được xem một email theo mẫu:

Email mẫu

Yêu cầu truy cập sản xuất

Cuối cùng, để gửi email đến bất kỳ người nhận nào, bất kể địa chỉ hoặc tên miền của người nhận có được xác thực hay không, cuối cùng chúng tôi phải đưa tài khoản của mình ra khỏi hộp cát. Tất cả các danh tính của chúng tôi, bao gồm cả From, Source, SenderReturn-Path địa chỉ, vẫn phải được xác minh. Chúng tôi có thể gửi yêu cầu truy cập Sản xuất từ ​​“Trang tổng quan tài khoản” trang như sau:

Trang tổng quan tài khoản
Yêu cầu truy cập sản xuất

Chúng tôi có thể gửi yêu cầu điền tất cả các chi tiết trên từ Bảng điều khiển AWS. Điều tương tự cũng có thể được gửi bằng AWS CLI. Điều này sẽ hữu ích khi chúng tôi cần yêu cầu quyền truy cập cho một số lượng lớn danh tính và muốn tự động hóa quy trình.

Kết luận

Các ý tưởng chính của Amazon Simple Email Service (SES) và các thư viện do Spring Cloud AWS cung cấp để giao tiếp với nó đã được đề cập trong bài viết này. Ngoài ra, chúng tôi đã tạo một ứng dụng Khởi động mùa xuân với API REST có thể gửi email thông qua mô-đun Spring Cloud AWS SES.

Bây giờ bạn đã hiểu rõ về Amazon Simple Email Service (SES) là gì và cách sử dụng nó để gửi email.

Dấu thời gian:

Thêm từ xếp chồng lên nhau