دليل لخدمة البريد الإلكتروني البسيطة (AWS SES) مع Spring Boot و Spring Cloud PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

دليل لخدمة البريد الإلكتروني البسيطة (AWS SES) مع Spring Boot و Spring Cloud

المُقدّمة

AWS SES (خدمة بريد إلكتروني بسيطة) هي خدمة إرسال واستقبال بريد إلكتروني سهلة الإعداد. عادةً ما يكون من الصعب والمرهق والممل إدارة نظام بريد إلكتروني محلي ، لذا فإن الاستعانة بمصادر خارجية للعملية هو خيار شائع.

يمكننا استخدام Amazon SES لإرسال رسائل البريد الإلكتروني الخاصة بالمعاملات أو رسائل البريد الإلكتروني التسويقية أو أي نوع آخر من رسائل البريد الإلكتروني الخاصة بالإشعارات لعملائنا. إنه حل ميسور التكلفة للشركات من جميع الأحجام الذين يستخدمون رسائل البريد الإلكتروني للتواصل مع عملائهم لأنه مبني على بنية تحتية يمكن الاعتماد عليها وقابلة للتطوير أمازون ويب سيرفيسز (أوس).

لإرسال رسائل بريد إلكتروني مجمعة ، قد يتفاعل أي تطبيق مع Amazon SES. نحن ندفع فقط مقابل رسائل البريد الإلكتروني التي نرسلها بالفعل ، سواء كانت رسائل بريد إلكتروني للمعاملات أو رسائل بريد إلكتروني تسويقية. بالإضافة إلى ذلك ، تدعم Amazon SES مجموعة من التكوينات ، بما في ذلك عناوين IP المخصصة أو المشتركة أو المملوكة. يمكن للشركات الاستفادة من كل بريد إلكتروني باستخدام لوحات معلومات التسليم والتقارير الخاصة بمعلومات المرسل.

في هذا الدليل ، سنقوم بتكوين مثيل AWS SES في منطقة ثم التكامل معها Spring Cloud لـ AWS وهو مشروع فرعي من سحابة الربيع. سنقوم بتجربة سيناريوهات مختلفة لإرسال رسائل بريد إلكتروني من تطبيقنا.

ملحوظة: يمكنك العثور على جميع التعليمات البرمجية المصدر المستخدمة في الدليل على جيثب.

دورة حياة إرسال بريد إلكتروني باستخدام AWS SES

لنلقِ نظرة على كيفية وصول دورة حياة البريد الإلكتروني المرسل بواسطة التطبيق إلى صندوق البريد الوجهة:

  • يطلب أحد التطبيقات ، في حالتنا ، أن يطلب رمز Spring Cloud من AWS SES إرسال بريد إلكتروني إلى مستلم واحد أو أكثر.

  • تتحقق SES مبدئيًا من الطلب ، وإذا تمت الموافقة عليه ، فإنه ينتج رسالة بريد إلكتروني تحتوي على مواصفات الطلب. تحتوي رسالة البريد الإلكتروني هذه على رأس ونص ومغلف وتتوافق مع RFC 5322تعريف تنسيق رسائل الإنترنت.

  • ثم يرسل SES الرسالة إلى مستقبل المستلم عبر الإنترنت. بمجرد تسليم الرسالة إلى SES ، غالبًا ما يتم إرسالها على الفور ، حيث تتم محاولة التسليم الأولية عادةً في غضون أجزاء من الثانية.

  • هناك العديد من النتائج في هذا الوقت. على سبيل المثال:

    • تسليم ناجح: يقبل مزود خدمة الإنترنت (ISP) البريد الإلكتروني ويرسله إلى المستلم المقصود.
    • ارتداد صعب: نظرًا لأن عنوان المستلم غير صالح ، يرفض مزود خدمة الإنترنت البريد الإلكتروني. يرسل مزود خدمة الإنترنت إشعار الارتداد الثابت مرة أخرى إلى Amazon SES ، والذي يخطر المرسل عبر البريد الإلكتروني أو عن طريق نشره على موضوع Amazon Simple Notification Service (Amazon SNS) الذي تم إعداده لتلقي هذا الإشعار.
    • ترتد لينة: نظرًا لظروف مثل امتلاء صندوق الوارد للمستلم ، أو عدم وجود المجال ، أو أي ظرف عابر مثل أن يكون مزود خدمة الإنترنت مشغولًا جدًا لمعالجة الطلب ، فقد لا يتمكن مزود خدمة الإنترنت من تسليم البريد الإلكتروني إلى المستلم. ثم يقوم مزود خدمة الإنترنت بإعادة محاولة البريد الإلكتروني لعدد معين من المرات ويرسل رسالة مرتدة بسيطة إلى SES. إذا كان SES غير قادر على تسليم البريد الإلكتروني خلال الإطار الزمني المحدد ، فإنه إما ينشر الحدث إلى موضوع SNS أو يرسل رسالة ثابتة عبر البريد الإلكتروني.
    • شكوى: يصنف المستلم البريد الإلكتروني على أنه بريد عشوائي في برنامج البريد الإلكتروني الخاص به. يتم إرسال إشعار شكوى إلى Amazon SES ، والذي يقوم بعد ذلك بنقله إلى المرسل إذا كان لدى Amazon SES ومزود خدمة الإنترنت حلقة تغذية مرتدة.
    • رد تلقائي: يقوم مزود خدمة الإنترنت المستلم بإخطار Amazon SES برد آلي من المتلقي ، مثل إشعار خارج المكتب ، ويقوم Amazon SES بتمرير الإشعار إلى المرسل.

عندما لا ينجح التسليم ، تقوم خدمة Amazon SES بإرجاع خطأ إلى المرسل وتحذف البريد الإلكتروني.

إعداد Amazon 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 وأنشئ مجموعة مستخدمين.

إنشاء مجموعة مستخدمين

ثم نحتاج إلى إضافة "وصول المسؤول"إذن لهذه المجموعة لـ SES.

إضافة الإذن

أخيرًا ، سنضيف مستخدمًا إلى المجموعة أعلاه.

إضافة مستخدم

بعد ذلك ، نحتاج إلى تحديد المجموعة للحصول على أذونات.

إضافة مجموعة

أخيرًا ، انسخ مفتاح الوصول والمفتاح السري المعروضين على الشاشة لمزيد من الاستخدام.

إرسال رسائل البريد الإلكتروني باستخدام Spring Cloud Project

إعداد مشروع

دعنا ندير مشروع 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-awsو spring-cloud-aws-ses. spring-cloud-aws-ses تحتوي الوحدة النمطية لـ SES على فئتين: SimpleEmailServiceMailSender و SimpleEmailServiceJavaMailSender.

  • SimpleEmailServiceMailSender تستخدم فئة Amazon Simple Email Service لإرسال رسائل البريد الإلكتروني. Java Mail API ليست متطلبًا لهذا التطبيق. يمكن استخدامه لإرسال رسائل بريد مباشرة خالية من المرفقات.
  • SimpleEmailServiceJavaMailSender تتيح class إمكانية إرسال رسائل البريد الإلكتروني التي تحتوي على مرفقات وعناصر mime أخرى.

لذلك هذا يغطي جميع متطلباتنا الأساسية!

تكوين الفول

كما نوقش أعلاه ، نحتاج إلى تحديد نوعين من الفاصوليا: SimpleEmailServiceMailSender و SimpleEmailServiceJavaMailSender. يمكننا ببساطة تمرير مفتاح الوصول والمفتاح السري كبيانات اعتماد وتكوين ملف MailSender الفول الذي سنستخدمه لإرسال رسائل البريد الإلكتروني:

@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 واجهة من تجريد بريد الربيع.

تحقق من دليلنا العملي العملي لتعلم Git ، مع أفضل الممارسات ، والمعايير المقبولة في الصناعة ، وورقة الغش المضمنة. توقف عن أوامر Googling Git وفي الواقع تعلم ذلك!

سنقوم أيضًا بتحديد الخصائص لاسترداد المعلومات منها application.yml:

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

إرسال بريد إلكتروني بسيط

يمكننا إرسال رسائل بريد إلكتروني بسيطة باستخدام SimpleEmailServiceMailSender الفول الذي قمنا بتكوينه أعلاه. دعنا نحدد طبقة خدمة لاستخدام هذا الفول:

@Service
public class EmailService {

    @Autowired
    private MailSender mailSender;

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

نحن ندعو send() طريقة في MailSender فول لإرسال بريدنا الإلكتروني. نحتاج أيضًا إلى تمرير SimpleMailMessage من شأنها أن تحتوي على سمات مثل from, toوالنص والموضوع لبريدنا الإلكتروني. لذلك ، دعنا نحدد ملف Controller فئة لاستدعاء الخدمة المذكورة أعلاه باستخدام واجهة برمجة تطبيقات 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";
    }
}

الآن ، إذا قمنا بتشغيل التطبيق وتنفيذ التجعيد التالي ، فسيتم إرسال بريد إلكتروني إلى عنوان البريد الإلكتروني الذي تم التحقق منه:

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'

بعد ذلك ، يمكننا تسجيل الدخول إلى عنوان بريد المستلم والتحقق مما إذا كان المستلم قد تلقى البريد الإلكتروني.

إرسال نموذج بريد إلكتروني مع مرفق

حالات الاستخدام السابقة التي رأيناها جيدة للتطوير أو لسيناريوهات الاختبار ولكن في الإنتاج ، نستخدم بشكل عام نموذج بريد إلكتروني مع المتغيرات التي سيتم استبدالها باستخدام استجابات واجهة برمجة التطبيقات. لقد أضفنا في وقت سابق التبعية لـ اباتشي فريماركر. سنستخدمه لتحديد قالب وتحميله للمعالجة!

لهذا ، دعنا أولاً نحدد قالبًا بسيطًا ، ونطلق عليه اسم 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 -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}} لكل وجهة عند إرسال البريد الإلكتروني.
  • جزء: يحتوي هذا على نص 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 لتمرير السمات:

@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, Senderو Return-Path العناوين ، لا يزال يجب التحقق منها. يمكننا تقديم طلب للوصول إلى الإنتاج من "حساب لوحةالصفحة على النحو التالي:

حساب لوحة
طلب الوصول إلى الإنتاج

يمكننا إرسال الطلب لملء جميع التفاصيل المذكورة أعلاه من AWS Console. يمكن أيضًا تقديم نفس الشيء باستخدام AWS CLI. سيكون هذا مفيدًا عندما نحتاج إلى طلب الوصول لعدد كبير من الهويات ونرغب في أتمتة العملية.

وفي الختام

تمت تغطية الأفكار الرئيسية لخدمة Amazon Simple Email Service (SES) والمكتبات التي تقدمها Spring Cloud AWS للتفاعل معها في هذه المقالة. بالإضافة إلى ذلك ، أنشأنا تطبيق Spring Boot بواجهة برمجة تطبيقات REST يمكنها إرسال رسائل بريد إلكتروني من خلال وحدة Spring Cloud AWS SES.

يجب أن يكون لديك الآن فهم قوي لماهية Amazon Simple Email Service (SES) وكيفية استخدامها لإرسال رسائل البريد الإلكتروني.

الطابع الزمني:

اكثر من ستاكابوز