מדריך לשירות אימייל פשוט (AWS SES) עם Spring Boot ו-Spring Cloud PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

מדריך לשירות אימייל פשוט (AWS SES) עם Spring Boot ו-Spring Cloud

מבוא

AWS SES (שירות אימייל פשוט) הוא שירות שליחה וקבלה של דואר אלקטרוני פשוט להתקנה. בדרך כלל קשה, קפדני ומייגע לנהל מערכת דוא"ל מקומית, ולכן מיקור חוץ של התהליך הוא בחירה פופולרית.

אנו יכולים להשתמש ב-Amazon SES כדי לשלוח הודעות דוא"ל עסקאות, הודעות דוא"ל שיווקיות, או כל סוג אחר של הודעות דוא"ל ללקוחות שלנו. זהו פתרון סביר לעסקים בכל הגדלים שמשתמשים בדוא"ל כדי להתחבר ללקוחות שלהם מאחר והוא בנוי על התשתית האמינה והניתנת להרחבה של אמזון שירותי אינטרנט (AWS).

עבור שליחת הודעות דוא"ל בכמות גדולה, כל אפליקציה עשויה ליצור אינטראקציה עם Amazon SES. אנו משלמים רק עבור המיילים שאנו שולחים בפועל, בין אם הם דוא"ל עסקה או מיילים שיווקיים. בנוסף, מגוון תצורות, כולל כתובות IP ייעודיות, משותפות או בבעלות, נתמכות על ידי Amazon SES. עסקים יכולים לגרום לכל אימייל להיחשב עם שימוש במרכזי מחוונים למסירה ודוחות על פרטי השולח.

במדריך זה אנו הולכים להגדיר מופע AWS SES באזור ואז לשלב איתו אביב ענן עבור AWS שהוא תת-פרויקט של ענן אביב. ננסה תרחישים שונים לשליחת אימיילים מהאפליקציה שלנו.

הערה: אתה יכול למצוא את כל קוד המקור בשימוש במדריך על GitHub.

מחזור חיים של שליחת דואר אלקטרוני באמצעות AWS SES

בואו נסתכל כיצד מחזור החיים של אימייל שנשלח על ידי אפליקציה מגיע לתיבת הדואר היעד:

  • אפליקציה, במקרה שלנו, קוד Spring Cloud מבקש מ-AWS SES לשלוח אימייל לנמען אחד או יותר.

  • SES מאמת תחילה את הבקשה, ואם היא מאושרת, מייצרת הודעת דואר אלקטרוני עם מפרט הבקשה. הודעת דוא"ל זו כוללת כותרת, גוף ומעטפה והיא תואמת RFC 5322ההגדרה של פורמט הודעה באינטרנט.

  • לאחר מכן SES מעביר את ההודעה למקלט של הנמען דרך האינטרנט. ברגע שההודעה מועברת ל-SES, היא לרוב מועברת מיד, כאשר ניסיון המסירה הראשוני מתרחש בדרך כלל תוך אלפיות שניות.

  • ישנן מספר תוצאות בשלב זה. לדוגמה:

    • משלוח מוצלח: ספק שירותי האינטרנט (ISP) מקבל את המייל ושולח אותו לנמען המיועד.
    • קפיצה קשה: מכיוון שכתובת הנמען אינה חוקית, ספק שירותי האינטרנט דוחה את האימייל. ספק שירותי האינטרנט שולח את הודעת החזרה הקשה חזרה לאמזון SES, אשר מודיע לשולח באמצעות דואר אלקטרוני או על ידי פרסום זה לנושא של Amazon Simple Notification Service (Amazon SNS) שהוגדר לקבלת הודעה זו.
    • קפיצה רכה: עקב תנאים כמו תיבת הדואר הנכנס של המקבל מלאה, הדומיין אינו קיים, או כל נסיבות חולפות כמו ספק שירותי האינטרנט עסוק מכדי לעבד את הבקשה, ייתכן שספק האינטרנט לא יוכל להעביר את האימייל לנמען. לאחר מכן, ספק שירותי האינטרנט מנסה שוב את האימייל עד למספר מסוים של פעמים ושולח ל-SES הודעת הקפצה רכה. אם SES לא מצליח להעביר את האימייל בתוך מסגרת הזמן שצוינה, היא מפרסמת את האירוע לנושא SNS או שולחת הודעת הקפצה קשה בדוא"ל.
    • תְלוּנָה: האימייל מסווג כדואר זבל על ידי המקבל בתוכנית הדוא"ל שלו. הודעת תלונה מועברת לאמזון SES, אשר לאחר מכן מעבירה אותה לשולח אם ל-Amazon SES ול-ISP יש לולאת משוב.
    • תגובה אוטומטית: ספק שירותי האינטרנט הנמען מודיע לאמזון SES על תגובה אוטומטית מהמקבל, כגון הודעת מחוץ למשרד, ואמזון 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 וחפש את "שירות דוא"ל פשוט של אמזון"

מבוא SES

ואז לחץ על “צור זהות" כדי להוסיף אימייל או דומיין לאימות. במקרה שלנו, אנו הולכים להוסיף מייל לאימות.

צור זהות

לאחר יצירת הזהות, נוכל לאמת את הפרטים.

יצרה זהות

הזהות שיצרנו נכנסת ל"ממתין לאימות" שלב. בשלב זה, המשתמש צריך לבדוק את דואר האימות מ-AWS ולעקוב אחר ההוראות כדי לאמת את המייל.

זהות מאומתת

לאחר מכן, עלינו להביא "מפתח גישה"וגם"מפתח סודי" לאימות והרשאה של האפליקציה שלנו עם SES. כדי ליצור את זה, עלינו ליצור קבוצת משתמשים ולהוסיף משתמש לאותה קבוצה. כאשר אנו יוצרים את המשתמש הזה, AWS מייצר מפתח גישה ומפתח סודי. אז בואו נפנה אל "IAM" ב-AWS Console וליצור קבוצת משתמשים.

צור קבוצת משתמשים

אז אנחנו צריכים להוסיף "גישת מנהל" הרשאה לקבוצה זו עבור SES.

הוסף הרשאה

לבסוף, נוסיף משתמש לקבוצה שלעיל.

הוסף משתמש

לאחר מכן, עלינו לבחור את הקבוצה לקבלת הרשאות.

הוסף קבוצה

לבסוף, העתק את מקש הגישה והמפתח הסודי המוצגים על המסך לשימוש נוסף.

שליחת אימיילים באמצעות Spring Cloud Project

הגדרת פרויקט

בואו נסובב פרויקט Spring Cloud ונעבור על מקרי השימוש לשילוב עם SES. הדרך הקלה ביותר להתחיל עם פרויקט שלד היא באמצעות ראשוני האביב:

ראשוני האביב

הוספנו רשת אביב עבור REST MVC, Apache Freemarker ליצור תבניות דוא"ל מבוססות HTML, שולח Java Mail לשלוח מייל ו Lombok (ספרייה אופציונלית להפחתת לוחיות) תלות. בנוסף, עלינו להוסיף תלות רלוונטית עבור Spring Cloud AWS ו-SES. עבור Spring Cloud AWS, נוסיף BOM נפרד של Spring Cloud AWS שלנו 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 הכיתה משתמשת בשירות האימייל הפשוט של אמזון כדי לשלוח מיילים. ה-API של Java Mail אינו דרישה ליישום זה. זה עשוי לשמש לשליחת הודעות דואר פשוטות נטולות קבצים מצורפים.
  • אל האני SimpleEmailServiceJavaMailSender class מאפשרת שליחת מיילים המכילים קבצים מצורפים ורכיבי פנטומימה אחרים.

אז זה מכסה את כל הדרישות הבסיסיות שלנו!

הגדרת שעועית

כפי שנדון לעיל, עלינו להגדיר שני סוגים של שעועית: 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 ממשק מהפשטת הדואר של Spring.

עיין במדריך המעשי והמעשי שלנו ללימוד Git, עם שיטות עבודה מומלצות, סטנדרטים מקובלים בתעשייה ודף רמאות כלול. תפסיק לגוגל פקודות 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 bean לשלוח את האימייל שלנו. אנחנו גם צריכים לעבור את SimpleMailMessage שיכיל תכונות כמו from, to, הטקסט והנושא של האימייל שלנו. אז בואו נגדיר א Controller מחלקה להתקשר לשירות הנ"ל באמצעות REST API:

@RestController
public class EmailController {

    @Autowired
    private EmailService emailService;

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

        return "Email sent successfully";
    }
}

כעת, אם נריץ את היישום ונבצע את התלתל הבא, הוא ישלח אימייל לכתובת הדוא"ל המאומתת:

curl -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 מאפיינים you

@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. הוספנו קודם לכן את התלות עבור Apache Freemarker. נשתמש בה כדי להגדיר תבנית ולטעון אותה לעיבוד!

לשם כך, בוא נגדיר תחילה תבנית פשוטה, ונתן לה בשם 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

ב-use-case הקודם השתמשנו בתבנית סטטית לשליחת מיילים. כיצד נוכל לאפשר עיצוב תבניות באופן דינמי למטרות שונות ולסוגים שונים של נמענים? AWS SES מאפשרת לנו ליצור תבניות דוא"ל לשליחת מיילים מותאמים אישית ליעד אחד או יותר בפעולה אחת.

אנו יכולים ליצור עד 10,000 תבניות דוא"ל לכל חשבון SES של אמזון. כל תבנית יכולה להיות בגודל של עד 500KB, כולל גם את הטקסט וגם את חלקי ה-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'

כעת הנמען סוף סוף יכול לראות הודעת דוא"ל בתבנית:

אימייל בתבנית

בקש גישה להפקה

לבסוף, על מנת לשלוח מיילים לכל נמען, ללא קשר אם הכתובת או הדומיין של המקבל מאומתים, עלינו בסופו של דבר להוציא את החשבון שלנו מארגז החול. כל הזהויות שלנו, כולל From, Source, Sender, ו Return-Path כתובות, עדיין יש לאמת. אנו יכולים להגיש בקשה לגישה להפקה מה-"לוח מחוונים חשבון" הדף באופן הבא:

לוח מחוונים חשבון
בקש גישה להפקה

אנו יכולים להגיש את הבקשה למלא את כל הפרטים לעיל מ-AWS Console. ניתן להגיש את אותו הדבר גם באמצעות AWS CLI. זה יעזור כשאנחנו צריכים לבקש גישה למספר רב של זהויות ונרצה להפוך את התהליך לאוטומטי.

סיכום

הרעיונות המרכזיים של Amazon Simple Email Service (SES) והספריות שמציעה Spring Cloud AWS להתממשק איתו כוסו במאמר זה. בנוסף, יצרנו אפליקציית Spring Boot עם REST API שיכול לשלוח מיילים דרך מודול Spring Cloud AWS SES.

כעת אתה אמור לקבל הבנה מוצקה של מה זה שירות דוא"ל פשוט של אמזון (SES) וכיצד להשתמש בו לשליחת אימיילים.

בול זמן:

עוד מ Stackabuse