راهنمای سرویس ایمیل ساده (AWS SES) با Spring Boot و Spring Cloud PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

راهنمای سرویس ایمیل ساده (AWS SES) با Spring Boot و Spring Cloud

معرفی

AWS SES (سرویس ایمیل ساده) یک سرویس ارسال و دریافت ایمیل با تنظیم ساده است. معمولاً مدیریت یک سیستم ایمیل در محل کار دشوار، پیچیده و خسته کننده است، بنابراین برون سپاری این فرآیند یک انتخاب محبوب است.

ما می‌توانیم از Amazon SES برای ارسال ایمیل‌های تراکنشی، ایمیل‌های بازاریابی یا هر نوع ایمیل اعلان دیگری به مشتریان خود استفاده کنیم. این یک راه حل مقرون به صرفه برای مشاغل در هر اندازه است که از ایمیل برای ارتباط با مشتریان خود استفاده می کنند زیرا بر اساس زیرساخت قابل اعتماد و مقیاس پذیر ساخته شده است. خدمات وب آمازون (AWS).

برای ارسال ایمیل های انبوه، هر برنامه ای ممکن است با Amazon SES تعامل داشته باشد. ما فقط برای ایمیل‌هایی که واقعاً ارسال می‌کنیم، هزینه می‌کنیم، چه ایمیل‌های تراکنشی یا ایمیل‌های بازاریابی. علاوه بر این، طیف وسیعی از تنظیمات، از جمله آدرس‌های IP اختصاصی، اشتراک‌گذاری شده یا متعلق به آمازون SES پشتیبانی می‌شوند. کسب‌وکارها می‌توانند با استفاده از داشبوردهای قابلیت تحویل و گزارش‌های مربوط به اطلاعات فرستنده، همه ایمیل‌ها را حساب کنند.

در این راهنما قصد داریم یک نمونه AWS SES را در یک منطقه پیکربندی کنیم و سپس با Spring Cloud برای AWS که زیر پروژه ای از ابر بهاری. ما سناریوهای مختلفی را برای ارسال ایمیل از برنامه خود امتحان خواهیم کرد.

توجه داشته باشید: شما می توانید تمام کد منبع استفاده شده در راهنما را پیدا کنید گیتهاب.

چرخه حیات ارسال ایمیل با استفاده از AWS SES

بیایید ببینیم که چرخه عمر ایمیل ارسال شده توسط یک برنامه کاربردی چگونه به صندوق پستی مقصد می رسد:

  • یک برنامه، در مورد ما، کد Spring Cloud از AWS SES درخواست می‌کند تا یک ایمیل به یک یا چند گیرنده ارسال کند.

  • SES در ابتدا درخواست را تأیید می کند و در صورت تأیید، یک پیام ایمیل با مشخصات درخواست ایجاد می کند. این پیام ایمیل دارای سرصفحه، متن و پاکت است و مطابق با آن است RFC 5322تعریف قالب پیام اینترنتی.

  • سپس SES پیام را از طریق اینترنت به گیرنده گیرنده ارسال می کند. به محض اینکه پیام به SES تحویل داده می شود، اغلب فوراً ارسال می شود و تلاش اولیه معمولاً در چند میلی ثانیه انجام می شود.

  • در این زمان چندین نتیجه وجود دارد. برای مثال:

    • تحویل موفقیت آمیز: ارائه دهنده خدمات اینترنت (ISP) ایمیل را می پذیرد و برای گیرنده مورد نظر ارسال می کند.
    • جهش سخت: از آنجایی که آدرس گیرنده نامعتبر است، ISP ایمیل را رد می کند. ISP اعلان برگشت سخت را به آمازون SES می فرستد، که فرستنده را از طریق ایمیل یا با انتشار آن در یک موضوع سرویس اطلاع رسانی ساده آمازون (Amazon SNS) که برای دریافت این اعلان تنظیم شده است، مطلع می کند.
    • جهش نرم: به دلیل شرایطی مانند پر بودن صندوق ورودی گیرنده، موجود نبودن دامنه، یا هر شرایط گذرا مانند مشغول بودن ISP برای پردازش درخواست، ممکن است ISP نتواند ایمیل را به گیرنده تحویل دهد. سپس ISP ایمیل را تا تعداد معینی دوباره امتحان می کند و یک پیام بازگشتی نرم به SES ارسال می کند. اگر SES نتواند ایمیل را در بازه زمانی مشخص شده تحویل دهد، یا رویداد را در یک موضوع SNS منتشر می کند یا یک پیام جهش سخت از طریق ایمیل ارسال می کند.
    • شکایت: ایمیل توسط گیرنده در برنامه ایمیل خود به عنوان هرزنامه طبقه بندی می شود. یک اعلان شکایت به آمازون SES ارسال می‌شود و اگر آمازون SES و ISP یک حلقه بازخورد ایجاد کنند، آن را به فرستنده ارسال می‌کند.
    • پاسخ خودکار: ISP گیرنده آمازون SES را از پاسخ خودکار گیرنده مطلع می کند، مانند اخطار خارج از دفتر، و Amazon SES اعلان را به فرستنده ارسال می کند.

هنگامی که تحویل ناموفق باشد، آمازون SES خطایی را به فرستنده برمی گرداند و ایمیل را حذف می کند.

راه اندازی آمازون SES

برخلاف سایر سرویس‌های AWS، عملاً نیازی به ایجاد یک نمونه SES نیست زیرا تمام حساب‌های جدید AWS به طور پیش‌فرض در جعبه ایمنی AWS SES قرار می‌گیرند. هر حساب AWS به طور پیش‌فرض دارای دسترسی جعبه ایمنی برای AWS SES در مناطق موجود است.

هنگام استفاده از حالت جعبه ایمنی، ما فقط می توانیم به هویت های تأیید شده ایمیل ارسال کنیم. دامنه یا آدرس ایمیلی که برای ارسال ایمیل از آن استفاده می کنیم یک هویت تأیید شده است. ما باید هر هویتی را که قصد داریم به عنوان یک هویت استفاده کنیم، بسازیم و اعتبار سنجی کنیم From, To, Source, Sender، یا Return-Path قبل از اینکه بتوانیم ایمیلی را با استفاده از SES در حالت جعبه ایمنی ارسال کنیم. با استفاده از Amazon SES برای تأیید هویت، می‌توانیم مالکیت خود را ثابت کرده و استفاده غیرقانونی را متوقف کنیم.

برای جلوگیری از تقلب و حفظ شهرت یک آدرس IP، AWS SES شامل محدودیت‌هایی برای ارسال ایمیل می‌شود. این محدودیت ها حداکثر تعداد ایمیل در ثانیه و محدودیت روزانه ایمیل را برای هر کاربر مشخص می کند. با تماس با مرکز پشتیبانی AWS، ممکن است چنین سهمیه هایی را بر اساس منطقه ایجاد کنیم.

بیایید هویت را بررسی کنیم وارد AWS Console شوید و عبارت " را جستجو کنیدسرویس ایمیل ساده آمازون"

معرفی SES

سپس بر روی "ایجاد هویت” برای افزودن یک ایمیل یا دامنه برای تأیید. در مورد ما، ما قصد داریم یک ایمیل برای تأیید اضافه کنیم.

ایجاد هویت

هنگامی که هویت ایجاد شد، می توانیم جزئیات را تأیید کنیم.

هویت ایجاد کرد

هویتی که ما ایجاد کردیم به «تأیید در انتظار" صحنه. در این مرحله، کاربر باید ایمیل تایید AWS را بررسی کند و دستورالعمل ها را دنبال کند تا ایمیل تایید شود.

هویت تایید شده

بعد، باید واکشی کنیمکلید دسترسی"و"کلید مخفی” برای احراز هویت و مجوز برنامه ما با SES. برای ایجاد آن، باید یک گروه کاربری ایجاد کنیم و یک کاربر به آن گروه اضافه کنیم. وقتی آن کاربر را ایجاد می کنیم، AWS یک کلید دسترسی و کلید مخفی تولید می کند. پس بیایید به " تغییر مسیر دهیمIAMدر AWS Console و User Group ایجاد کنید.

ایجاد گروه کاربری

سپس باید اضافه کنیم "AdministratorAccessمجوز به آن گروه برای SES.

مجوز اضافه کنید

در نهایت یک کاربر به گروه بالا اضافه می کنیم.

افزودن کاربر

در مرحله بعد، باید گروهی را برای مجوزها انتخاب کنیم.

افزودن گروه

در نهایت، کلید دسترسی و کلید مخفی نمایش داده شده روی صفحه را برای استفاده بیشتر کپی کنید.

ارسال ایمیل با استفاده از پروژه Spring Cloud

راه اندازی پروژه

بیایید یک پروژه Spring Cloud را بچرخانیم و موارد استفاده را برای ادغام با SES اجرا کنیم. ساده ترین راه برای شروع با یک پروژه اسکلت از طریق Spring Initializr:

Spring Initializr

ما اضافه کرده ایم وب بهار برای REST MVC، آپاچی فری مارکر برای تولید الگوهای ایمیل مبتنی بر HTML، فرستنده ایمیل جاوا برای ارسال ایمیل و Lombok وابستگی های (کتابخانه کاهش دهنده دیگ بخار اختیاری). علاوه بر این، ما باید وابستگی های مربوطه را برای 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-awsو spring-cloud-aws-ses. spring-cloud-aws-ses ماژول برای SES شامل دو کلاس است: SimpleEmailServiceMailSender و SimpleEmailServiceJavaMailSender.

  • La SimpleEmailServiceMailSender کلاس از سرویس ایمیل ساده آمازون برای ارسال ایمیل استفاده می کند. Java Mail API برای این پیاده سازی الزامی نیست. ممکن است برای ارسال پیام های ایمیلی ساده و بدون پیوست استفاده شود.
  • La SimpleEmailServiceJavaMailSender class ارسال ایمیل‌هایی را که حاوی پیوست‌ها و سایر عناصر mime هستند را امکان‌پذیر می‌کند.

بنابراین این همه نیازهای اساسی ما را پوشش می دهد!

پیکربندی Beans

همانطور که در بالا توضیح داده شد، باید دو نوع لوبیا را تعریف کنیم: SimpleEmailServiceMailSender و SimpleEmailServiceJavaMailSender. ما به سادگی می توانیم کلید دسترسی و کلید مخفی را به عنوان اعتبارنامه ارسال کنیم و a را پیکربندی کنیم 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 را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google Git را متوقف کنید و در واقع یاد گرفتن آی تی!

ما همچنین ویژگی هایی را برای بازیابی اطلاعات تعریف می کنیم application.yml:

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

ارسال ایمیل ساده

ما می توانیم ایمیل های ساده را با استفاده از SimpleEmailServiceMailSender bean که در بالا پیکربندی کردیم. بیایید یک لایه سرویس برای استفاده از این bean تعریف کنیم:

@Service
public class EmailService {

    @Autowired
    private MailSender mailSender;

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

ما تماس می گیریم send() روش در MailSender لوبیا برای ارسال ایمیل ما. ما همچنین نیاز به تصویب SimpleMailMessage که شامل ویژگی هایی مانند from, to، متن و موضوع ایمیل ما. بنابراین، اجازه دهید a را تعریف کنیم 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 -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 -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>

در مرحله بعد، باید یک کلاس پیکربندی تعریف کنیم تا قالب را از مسیر بارگذاری کنیم و به عنوان bean اضافه کنیم. برای این کار تعریف می کنیم 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 -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'

در مرحله بعد، می توانیم به آدرس ایمیل گیرنده وارد شویم و بررسی کنیم که آیا گیرنده ایمیل را دریافت کرده است یا خیر:

ایمیل الگوی Freemarker

ارسال ایمیل شخصی سازی شده با استفاده از الگوها در AWS SES

در مورد قبلی ما از یک الگوی ثابت برای ارسال ایمیل استفاده کردیم. چگونه می توانیم قالب ها را به صورت پویا برای اهداف مختلف و انواع گیرندگان مختلف طراحی کنیم؟ AWS SES به ما امکان می‌دهد تا قالب‌های ایمیل را برای ارسال ایمیل‌های شخصی به یک یا چند مقصد در یک عملیات واحد ایجاد کنیم.

ما می توانیم تا 10,000 قالب ایمیل در هر حساب Amazon SES ایجاد کنیم. هر قالب می تواند تا 500 کیلوبایت حجم داشته باشد که شامل هر دو قسمت متن و HTML می شود. ما می توانیم تا 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 ایمیل است و همچنین می تواند حاوی برچسب های جایگزین باشد.
  • TextPart: این نشان دهنده متن ایمیل است. این نسخه از ایمیل برای گیرندگانی ارسال می شود که سرویس گیرندگان ایمیل آنها ایمیل های 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'

اکنون گیرنده در نهایت می‌تواند یک ایمیل الگو را ببیند:

ایمیل الگو

درخواست دسترسی تولید

در نهایت، برای ارسال ایمیل به هر گیرنده، صرف نظر از اینکه آیا آدرس گیرنده یا دامنه اعتبارسنجی شده است یا خیر، در نهایت باید حساب خود را از sandbox خارج کنیم. همه هویت ما از جمله From, Source, Senderو Return-Path آدرس‌ها، هنوز باید تأیید شوند. ما می توانیم یک درخواست برای دسترسی به تولید از "داشبورد حساب” صفحه به شرح زیر است:

داشبورد حساب
درخواست دسترسی تولید

ما می‌توانیم درخواست را با پر کردن تمام جزئیات بالا از کنسول AWS ارسال کنیم. همین امر همچنین می تواند با استفاده از AWS CLI ارسال شود. این زمانی مفید خواهد بود که ما نیاز به درخواست دسترسی برای تعداد زیادی هویت داشته باشیم و بخواهیم فرآیند را خودکار کنیم.

نتیجه

ایده های کلیدی سرویس ایمیل ساده آمازون (SES) و کتابخانه های ارائه شده توسط Spring Cloud AWS برای ارتباط با آن در این مقاله پوشش داده شده است. علاوه بر این، ما یک برنامه Spring Boot با یک API REST ایجاد کردیم که می تواند ایمیل ها را از طریق ماژول Spring Cloud AWS SES ارسال کند.

اکنون باید درک کاملی از چیستی سرویس ایمیل ساده آمازون (SES) و نحوه استفاده از آن برای ارسال ایمیل داشته باشید.

تمبر زمان:

بیشتر از Stackabuse