Spring Boot ve Spring Cloud PlatoBlockchain Veri Zekası ile Basit E-posta Hizmeti (AWS SES) Kılavuzu. Dikey Arama. Ai.

Spring Boot ve Spring Cloud ile Basit E-posta Hizmeti (AWS SES) Kılavuzu

Giriş

AWS SES (Basit E-posta Hizmeti) kurulumu basit bir e-posta gönderme ve alma hizmetidir. Şirket içi bir e-posta sistemini yönetmek genellikle zor, titiz ve sıkıcıdır, bu nedenle süreci dış kaynak kullanımı popüler bir seçimdir.

Amazon SES'i müşterilerimize işlem e-postaları, pazarlama e-postaları veya diğer türde bildirim e-postaları göndermek için kullanabiliriz. Müşterileriyle bağlantı kurmak için e-posta kullanan her büyüklükteki işletme için uygun maliyetli bir çözümdür çünkü güvenilir ve ölçeklenebilir bir altyapı üzerine kurulmuştur. Amazon Web Services (AWS).

Toplu e-posta göndermek için herhangi bir uygulama Amazon SES ile etkileşime girebilir. İster işlem e-postaları ister pazarlama e-postaları olsun, yalnızca gerçekten gönderdiğimiz e-postalar için ödeme yaparız. Ayrıca, ayrılmış, paylaşılan veya sahip olunan IP adresleri dahil olmak üzere çeşitli yapılandırmalar Amazon SES tarafından desteklenir. İşletmeler, teslim edilebilirlik gösterge panoları ve gönderen bilgileriyle ilgili raporları kullanarak her e-postayı önemli hale getirebilir.

Bu kılavuzda, bir bölgede bir AWS SES örneği yapılandıracağız ve ardından AWS için Bahar Bulutu alt projesi olan Bahar Bulutu. Uygulamamızdan e-posta göndermek için farklı senaryolar deneyeceğiz.

Not: Kılavuzda kullanılan tüm kaynak kodlarını adresinde bulabilirsiniz. Github.

AWS SES Kullanarak E-posta Gönderme Yaşam Döngüsü

Bir uygulama tarafından gönderilen bir e-postanın yaşam döngüsünün hedef posta kutusuna nasıl ulaştığına bakalım:

  • Bizim durumumuzda bir uygulama, Spring Cloud kodu AWS SES'ten bir veya daha fazla alıcıya e-posta göndermesini ister.

  • SES başlangıçta talebi doğrular ve onaylanırsa talebin özelliklerini içeren bir e-posta iletisi oluşturur. Bu e-posta mesajının bir başlığı, gövdesi ve zarfı vardır ve şuna uygundur: RFC 5322'ın İnternet Mesaj Biçimi tanımı.

  • SES daha sonra mesajı İnternet üzerinden alıcının alıcısına iletir. Mesaj SES'e teslim edilir edilmez, genellikle hemen iletilir ve ilk teslim denemesi tipik olarak birkaç milisaniye içinde gerçekleşir.

  • Şu anda birkaç sonuç var. Örneğin:

    • Başarılı Teslimat: İnternet servis sağlayıcısı (ISP) e-postayı kabul eder ve hedeflenen alıcıya gönderir.
    • Sert sıçrama: Alıcının adresi geçersiz olduğundan, ISP e-postayı reddeder. ISP, sabit geri dönen bildirimi, göndereni e-posta yoluyla veya bu bildirimi alacak şekilde ayarlanmış bir Amazon Simple Notification Service (Amazon SNS) başlığında yayınlayarak bilgilendiren Amazon SES'e geri gönderir.
    • Yumuşak Sıçrama: Alıcının gelen kutusunun dolu olması, alan adının mevcut olmaması veya ISP'nin talebi işlemek için çok meşgul olması gibi herhangi bir geçici durum nedeniyle, ISP e-postayı alıcıya teslim edemeyebilir. ISP daha sonra e-postayı belirli bir sayıda yeniden dener ve SES'e geçici olarak geri dönen bir mesaj gönderir. SES, e-postayı belirtilen süre içinde teslim edemezse, olayı bir SNS başlığında yayınlar veya e-posta yoluyla kalıcı bir geri dönen mesaj gönderir.
    • şikâyet: E-posta, alıcı tarafından e-posta programlarında spam olarak sınıflandırılır. Amazon SES'e bir şikayet bildirimi iletilir ve Amazon SES ve ISP'nin bir geri bildirim döngüsü oluşturması durumunda şikayet bildirimi gönderene iletilir.
    • Otomatik cevap: Alıcı ISP, Amazon SES'e, alıcının işyeri dışında bildirimi gibi otomatik bir yanıt verdiğini bildirir ve Amazon SES, bildirimi gönderene iletir.

Teslimat başarısız olduğunda, Amazon SES gönderene bir hata döndürür ve e-postayı siler.

Amazon SES Kurulumu

Diğer tüm AWS Hizmetlerinden farklı olarak, tüm yeni AWS hesapları varsayılan olarak AWS SES korumalı alanına yerleştirildiğinden, bir SES bulut sunucusu oluşturmaya neredeyse hiç gerek yoktur. Her AWS hesabı, varsayılan olarak mevcut bölgelerde AWS SES için korumalı alan erişimine sahiptir.

Korumalı alan modunu kullanırken yalnızca doğrulanmış kimliklere e-posta gönderebiliriz. E-posta göndermek için kullandığımız bir etki alanı veya e-posta adresi, doğrulanmış bir kimliktir. olarak kullanmayı amaçladığımız her bir kimliği oluşturmalı ve doğrulamalıyız. From, To, Source, Senderya da Return-Path SES'i korumalı alan modunda kullanarak bir e-posta gönderebilmemiz için adres. Kimliği doğrulamak için Amazon SES'i kullanarak mülkiyetimizi kanıtlayabilir ve yasa dışı kullanımı durdurabiliriz.

AWS SES, dolandırıcılığı önlemek ve bir IP adresinin itibarını korumak için e-posta gönderme sınırları içerir. Bu sınırlamalar, saniye başına maksimum e-posta sayısını ve her kullanıcı için günlük e-posta sınırını belirtir. AWS Destek Merkezi ile iletişime geçerek bölgelere göre bu kotaları belirleyebiliriz.

Kimlikleri doğrulayalım. AWS Konsolunda oturum açın ve “Amazon Basit E-posta Hizmeti"

SES'e Giriş

Ardından "Kimlik Oluştur” doğrulama için bir e-posta veya alan eklemek için. Bizim durumumuzda, doğrulama için bir e-posta ekleyeceğiz.

Kimlik Oluştur

Kimlik oluşturulduktan sonra ayrıntıları doğrulayabiliriz.

Oluşturulan Kimlik

Yarattığımız kimlik “Doğrulama Bekleniyor" sahne. Bu aşamada, kullanıcının AWS'den gelen doğrulama postasını kontrol etmesi ve e-postayı doğrulamak için talimatları izlemesi gerekir.

Doğrulanmış Kimlik

Sonra, getirmemiz gerekiyor "erişim anahtarı"Ve"gizli anahtar” Uygulamamızın SES ile kimlik doğrulaması ve yetkilendirmesi için. Bunu oluşturmak için bir Kullanıcı Grubu oluşturmamız ve bu gruba bir Kullanıcı eklememiz gerekiyor. Bu Kullanıcıyı oluşturduğumuzda, AWS bir erişim anahtarı ve gizli anahtar oluşturur. O halde “ adresine yönlendirelim.IAM” AWS Konsolunda ve Kullanıcı Grubu oluşturun.

Kullanıcı Grubu Oluştur

O zaman eklememiz gerekiyor "Yönetici Erişimi” SES için o gruba izin.

İzin Ekle

Son olarak, yukarıdaki gruba bir Kullanıcı ekleyeceğiz.

Kullanıcı Ekle

Ardından, izinler için grubu seçmemiz gerekiyor.

Grup ekle

Son olarak, daha fazla kullanım için ekranda görüntülenen erişim anahtarını ve gizli anahtarı kopyalayın.

Spring Cloud Projesi Kullanarak E-posta Gönderme

Proje Kurulumu

Bir Spring Cloud projesi başlatalım ve SES ile entegre etmek için kullanım durumlarını gözden geçirelim. Bir iskelet projesine başlamanın en kolay yolu, Bahar İlklendirme:

Bahar İlklendirme

Biz ekledik Bahar Ağı REST MVC için, Apache Freemarker'ı HTML tabanlı e-posta şablonları oluşturmak için, Java Posta Göndericisi bir e-posta göndermek ve Lombok (isteğe bağlı standart azaltma kitaplığı) bağımlılıklar. Ek olarak, Spring Cloud AWS ve SES için ilgili bağımlılıkları eklememiz gerekiyor. Spring Cloud AWS için ayrı bir Spring Cloud AWS BOM ekleyeceğiz. pom.xml bunu kullanarak dosya blok:

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

Son olarak, SES desteğini eklemek için, başlangıç ​​modülü olarak mevcut olan modül bağımlılığını dahil etmemiz gerekiyor. spring-cloud-starter-aws-ses:

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

spring-cloud-starter-aws-ses için geçişli bağımlılıkları içerir spring-cloud-starter-aws, ve spring-cloud-aws-ses. spring-cloud-aws-ses SES modülü iki sınıf içerir: SimpleEmailServiceMailSender ve SimpleEmailServiceJavaMailSender.

  • The SimpleEmailServiceMailSender class, e-posta göndermek için Amazon Simple Email Service'i kullanır. Java Mail API, bu uygulama için bir gereklilik değildir. Ek içermeyen basit posta mesajları göndermek için kullanılabilir.
  • The SimpleEmailServiceJavaMailSender class, ekler ve diğer mim öğeleri içeren e-postaların gönderilmesini sağlar.

Yani bu, tüm temel gereksinimlerimizi karşılıyor!

Fasulye Yapılandırma

Yukarıda tartışıldığı gibi, iki tür fasulye tanımlamamız gerekiyor: SimpleEmailServiceMailSender ve SimpleEmailServiceJavaMailSender. Erişim anahtarını ve gizli anahtarı kimlik bilgileri olarak iletebilir ve bir MailSender e-posta göndermek için kullanacağımız 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);
    }
}

Ekleri olan e-postalar göndermek için yapılandırmamız gerekir. SimpleEmailServiceJavaMailSender olan bir uygulamadır JavaMailSender Spring'in posta soyutlamasından arayüz.

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Bilgileri almak için özellikleri de tanımlayacağız. application.yml:

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

Basit E-posta Gönderme

kullanarak basit e-postalar gönderebiliriz. SimpleEmailServiceMailSender yukarıda yapılandırdığımız bean. Bu bean'i kullanmak için bir servis katmanı tanımlayalım:

@Service
public class EmailService {

    @Autowired
    private MailSender mailSender;

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

biz diyoruz send() yönteminde MailSender e-postamızı göndermek için. Ayrıca geçmemiz gereken SimpleMailMessage gibi öznitelikleri içerecektir from, to, e-postamızın metni ve konusu. Öyleyse, bir tanımlayalım Controller REST API kullanarak yukarıdaki hizmeti çağırmak için sınıf:

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

Şimdi, uygulamayı çalıştırıp aşağıdaki curl'u çalıştırırsak, doğrulanmış e-posta adresine bir e-posta gönderecektir:

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'

Ardından, alıcının posta adresine giriş yapabilir ve alıcının e-postayı alıp almadığını doğrulayabiliriz.

Ekli Basit E-posta Gönderme

Eki mime olarak iletmek için bir hizmet katmanı tanımlayacağız ve aşağıdaki gibi diğer e-posta özniteliklerini ayarlayacağız. from, to, metin ve konu:

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

İşte kullanıyoruz MimeMessageHelper ekli bir e-posta oluşturmak için. Son olarak, tanımlayacağız Controller geçmek için katman SimpleMailMessage Öznitellikler:

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

Şimdi, uygulamayı çalıştırıp aşağıdaki curl'u çalıştırırsak, doğrulanmış e-posta adresine bir e-posta gönderecektir:

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'

Ardından, alıcının posta adresine giriş yapabilir ve alıcının e-postayı alıp almadığını doğrulayabiliriz.

Ekli Şablon E-postası Gönderme

Gördüğümüz önceki kullanım durumları, geliştirme veya test senaryoları için iyidir, ancak üretimde genellikle bir API'nin yanıtları kullanılarak değiştirilecek değişkenlere sahip bir e-posta şablonu kullanırız. Daha önce bağımlılığı eklemiştik Apache Freemarker'ı. Bunu bir şablon tanımlamak ve işlemek için yüklemek için kullanacağız!

Bunun için önce basit bir şablon tanımlayalım, adını şöyle koyalım. email-template.ftl ve içine koy templates altındaki klasör 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>

Ardından, şablonu yoldan yüklemek ve bean olarak eklemek için bir konfigürasyon sınıfı tanımlamamız gerekiyor. Bunun için tanımlayacağımız FreeMarkerConfigurationFactoryBean:

@Configuration
public class FreemarkerConfig {

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

Ardından, bu şablonu yüklemek ve SES'e gönderilecek son bir mesaj oluşturmak için hizmet katmanımızı tanımlayacağız:

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

Son olarak, bir tanımlayacağız Controller dinamik e-posta özniteliklerini iletmek için katman:

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

Şimdi, uygulamayı çalıştırıp aşağıdaki curl'u çalıştırırsak, doğrulanmış e-posta adresine bir e-posta gönderecektir:

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'

Ardından, alıcının posta adresine giriş yapabilir ve alıcının e-postayı alıp almadığını doğrulayabiliriz:

Freemarker Şablon E-postası

AWS SES'te Şablonları Kullanarak Kişiselleştirilmiş E-posta Gönderme

Önceki kullanım durumunda, e-posta göndermek için statik bir şablon kullandık. Şablonların farklı amaçlar ve farklı alıcı türleri için dinamik olarak tasarlanmasını nasıl sağlayabiliriz? AWS SES, tek bir işlemde bir veya daha fazla hedefe kişiselleştirilmiş e-postalar göndermek için e-posta şablonları oluşturmamıza olanak tanır.

Amazon SES hesabı başına 10,000 adede kadar e-posta şablonu oluşturabiliriz. Her şablonun boyutu, hem metin hem de HTML bölümleri dahil olmak üzere en fazla 500 KB olabilir. Her aramada 50'ye kadar varış noktası gönderebiliriz.

O halde hızlıca bir e-posta şablonu oluşturalım. İlk olarak, aşağıdaki şablonu kullanarak bir JSON dosyası tanımlayabiliriz:

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

Bu şablon aşağıdaki öznitelikleri içerir:

  • Şablon adı: Bu, şablonun adını içerir.
  • Konu Kısmı: Bu, e-postanın konu satırını tutar. Bu öğede yedek etiketler bulunabilir. Bu etiketler aşağıdaki gibi biçimlendirilmiştir: {{tagname}}. için bir değer girebilirsiniz. {{tagname}} e-postayı gönderirken her hedef için.
  • HtmlPart: Bu, e-postanın HTML gövdesini içerir ve aynı zamanda değiştirme etiketlerini de içerebilir.
  • metin parçası: Bu, e-postanın metin gövdesini temsil eder. E-postanın bu sürümü, e-posta istemcileri HTML e-postalarını görüntülemeyen alıcılara gönderilir. Bu öğede yedek etiketler bulunabilir.

Bu dosyayı şu şekilde kaydedebiliriz: mytemplate.json. Son olarak, şablonu aşağıdaki gibi oluşturmak için bir AWS CLI komutu kullanabiliriz:

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

Ardından, nitelikleri tanımlamak ve şablonlu e-postalar göndermek için bir hizmet katmanı tanımlayalım:

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

birden fazla ekleyebiliriz Destination birden çok alıcıya toplu e-posta göndermek için adresler. biz kullanıyoruz sendTemplatedEmail() yöntemden AmazonSimpleEmailService Bu şablon e-postayı göndermek için arayüz. Daha önce oluşturduğumuz şablonumuzun HTML metninde değiştirilecek olan yedek etiketleri de geçirmemiz gerekiyor.

Son olarak, bir tanımlayacağız Controller Nitelikleri iletmek üzere REST API'sini tanımlamak için katman:

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

Ardından, uygulamayı çalıştırdığımızda aşağıdakileri çalıştırabiliriz. curl şablonlu e-postalar göndermek için:

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'

Artık alıcı sonunda şablonlu bir e-posta görebilecek:

Şablonlu E-posta

Üretim Erişimi İste

Son olarak, herhangi bir alıcıya e-posta göndermek için, alıcının adresi veya alan adı doğrulanmış olsun olmasın, hesabımızı korumalı alandan çıkarmalıyız. dahil olmak üzere tüm kimliklerimiz From, Source, Sender, ve Return-Path adresler yine de doğrulanmalıdır. Üretim erişimi için " adresinden bir istek gönderebiliriz.Hesap Tablosu” sayfası aşağıdaki gibidir:

Hesap Tablosu
Üretim Erişimi İste

AWS Konsolundan yukarıdaki tüm detayları doldurarak talebi gönderebiliriz. Aynısı AWS CLI kullanılarak da gönderilebilir. Bu, çok sayıda kimliğe erişim talep etmemiz gerektiğinde ve süreci otomatikleştirmek istediğimizde yardımcı olacaktır.

Sonuç

Amazon Simple Email Service (SES) ile ilgili temel fikirler ve Spring Cloud AWS tarafından arayüz oluşturmak için sunulan kitaplıklar bu makalede ele alındı. Ek olarak, Spring Cloud AWS SES modülü aracılığıyla e-posta gönderebilen REST API'li bir Spring Boot uygulaması oluşturduk.

Artık Amazon Simple Email Service'in (SES) ne olduğu ve e-posta göndermek için nasıl kullanılacağı hakkında sağlam bir anlayışa sahip olmalısınız.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı