معرفی
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 شوید و عبارت " را جستجو کنیدسرویس ایمیل ساده آمازون"
سپس بر روی "ایجاد هویت” برای افزودن یک ایمیل یا دامنه برای تأیید. در مورد ما، ما قصد داریم یک ایمیل برای تأیید اضافه کنیم.
هنگامی که هویت ایجاد شد، می توانیم جزئیات را تأیید کنیم.
هویتی که ما ایجاد کردیم به «تأیید در انتظار" صحنه. در این مرحله، کاربر باید ایمیل تایید AWS را بررسی کند و دستورالعمل ها را دنبال کند تا ایمیل تایید شود.
بعد، باید واکشی کنیمکلید دسترسی"و"کلید مخفی” برای احراز هویت و مجوز برنامه ما با SES. برای ایجاد آن، باید یک گروه کاربری ایجاد کنیم و یک کاربر به آن گروه اضافه کنیم. وقتی آن کاربر را ایجاد می کنیم، AWS یک کلید دسترسی و کلید مخفی تولید می کند. پس بیایید به " تغییر مسیر دهیمIAMدر AWS Console و User Group ایجاد کنید.
سپس باید اضافه کنیم "AdministratorAccessمجوز به آن گروه برای SES.
در نهایت یک کاربر به گروه بالا اضافه می کنیم.
در مرحله بعد، باید گروهی را برای مجوزها انتخاب کنیم.
در نهایت، کلید دسترسی و کلید مخفی نمایش داده شده روی صفحه را برای استفاده بیشتر کپی کنید.
ارسال ایمیل با استفاده از پروژه Spring Cloud
راه اندازی پروژه
بیایید یک پروژه Spring Cloud را بچرخانیم و موارد استفاده را برای ادغام با SES اجرا کنیم. ساده ترین راه برای شروع با یک پروژه اسکلت از طریق 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'
در مرحله بعد، می توانیم به آدرس ایمیل گیرنده وارد شویم و بررسی کنیم که آیا گیرنده ایمیل را دریافت کرده است یا خیر:
ارسال ایمیل شخصی سازی شده با استفاده از الگوها در 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) و نحوه استفاده از آن برای ارسال ایمیل داشته باشید.