परिचय
AWS SES (सरल ईमेल सेवा) एक आसान-से-सेटअप ईमेल भेजने और प्राप्त करने की सेवा है। ऑन-प्रिमाइसेस ईमेल सिस्टम को प्रबंधित करना आमतौर पर कठिन, बारीक और थकाऊ होता है, इसलिए प्रक्रिया को आउटसोर्स करना एक लोकप्रिय विकल्प है।
हम अपने ग्राहकों को लेन-देन संबंधी ईमेल, मार्केटिंग ईमेल या किसी अन्य प्रकार के सूचना ईमेल भेजने के लिए Amazon SES का उपयोग कर सकते हैं। यह सभी आकार के व्यवसायों के लिए एक किफायती समाधान है जो अपने ग्राहकों से जुड़ने के लिए ईमेल का उपयोग करते हैं क्योंकि यह भरोसेमंद और स्केलेबल बुनियादी ढांचे पर बनाया गया है। अमेज़ॅन वेब सेवा (एडब्ल्यूएस).
बल्क ईमेल भेजने के लिए, कोई भी एप्लिकेशन Amazon SES के साथ इंटरैक्ट कर सकता है। हम केवल उन ईमेल के लिए भुगतान करते हैं जो हम वास्तव में भेजते हैं, चाहे वे लेन-देन संबंधी ईमेल हों या मार्केटिंग ईमेल। इसके अतिरिक्त, अमेज़ॅन एसईएस द्वारा समर्पित, साझा या स्वामित्व वाले आईपी पते सहित कॉन्फ़िगरेशन की एक श्रृंखला समर्थित है। डिलिवरेबिलिटी डैशबोर्ड और प्रेषक की जानकारी पर रिपोर्ट के उपयोग से व्यवसाय हर ईमेल की गिनती कर सकते हैं।
इस गाइड में हम एक क्षेत्र में AWS SES उदाहरण को कॉन्फ़िगर करने जा रहे हैं और फिर इसके साथ एकीकृत होंगे AWS के लिए स्प्रिंग क्लाउड जो की एक उप-परियोजना है वसंत मेघ. हम अपने एप्लिकेशन से ईमेल भेजने के लिए विभिन्न परिदृश्यों का प्रयास करेंगे।
नोट: आप गाइड में उपयोग किए गए सभी स्रोत कोड को पा सकते हैं Github.
AWS SES का उपयोग करके ईमेल भेजने का जीवनचक्र
आइए देखें कि किसी एप्लिकेशन द्वारा भेजे गए ईमेल का जीवनचक्र गंतव्य मेलबॉक्स तक कैसे पहुंचता है:
-
एक एप्लिकेशन, हमारे मामले में, स्प्रिंग क्लाउड कोड एक या अधिक प्राप्तकर्ताओं को एक ईमेल भेजने के लिए AWS SES का अनुरोध करता है।
-
एसईएस प्रारंभ में अनुरोध की पुष्टि करता है, और यदि यह स्वीकृत हो जाता है, तो अनुरोध के विनिर्देशों के साथ एक ईमेल संदेश तैयार करता है। इस ईमेल संदेश में एक हेडर, बॉडी और लिफाफा है और इसका अनुपालन करता है RFC 5322की इंटरनेट संदेश प्रारूप परिभाषा।
-
एसईएस तब इंटरनेट पर प्राप्तकर्ता के प्राप्तकर्ता को संदेश भेजता है। जैसे ही संदेश एसईएस को सौंप दिया जाता है, इसे अक्सर तुरंत प्रसारित किया जाता है, प्रारंभिक वितरण प्रयास आमतौर पर मिलीसेकंड के मामले में होता है।
-
इस समय कई परिणाम हैं। उदाहरण के लिए:
- सफल वितरण: इंटरनेट सेवा प्रदाता (ISP) ईमेल को स्वीकार करता है और इसे इच्छित प्राप्तकर्ता को भेजता है।
- कठिन उछाल: क्योंकि प्राप्तकर्ता का पता अमान्य है, ISP ईमेल को अस्वीकार कर देता है। ISP हार्ड बाउंस सूचना वापस Amazon SES को भेजती है, जो प्रेषक को ईमेल के माध्यम से या इस सूचना को प्राप्त करने के लिए सेट की गई Amazon सिंपल नोटिफिकेशन सर्विस (Amazon SNS) विषय पर प्रकाशित करके सूचित करती है।
- नरम उछाल: रिसीवर के इनबॉक्स के भरे होने, डोमेन के मौजूद न होने, या आईएसपी के अनुरोध को संसाधित करने में बहुत व्यस्त होने जैसी परिस्थितियों के कारण, आईएसपी प्राप्तकर्ता को ईमेल वितरित करने में असमर्थ हो सकता है। ISP तब ईमेल को एक निश्चित संख्या तक पुनः प्राप्त करता है और SES को एक सॉफ्ट बाउंस संदेश भेजता है। यदि एसईएस निर्दिष्ट समय सीमा के भीतर ईमेल वितरित करने में असमर्थ है, तो यह या तो घटना को एसएनएस विषय पर प्रकाशित करता है या ईमेल के माध्यम से हार्ड बाउंस संदेश भेजता है।
- शिकायत: ईमेल को प्राप्तकर्ता द्वारा उनके ईमेल प्रोग्राम में स्पैम के रूप में वर्गीकृत किया जाता है। एक शिकायत अधिसूचना Amazon SES को प्रेषित की जाती है, जो तब इसे प्रेषक को भेजती है यदि Amazon SES और ISP के पास फीडबैक लूप स्थापित है।
- स्व प्रतिक्रिया: प्राप्तकर्ता ISP Amazon SES को रिसीवर से एक स्वचालित प्रतिक्रिया के बारे में सूचित करता है, जैसे कि कार्यालय से बाहर का नोटिस, और Amazon SES प्रेषक को सूचना भेजता है।
जब डिलीवरी विफल हो जाती है, तो Amazon SES प्रेषक को एक त्रुटि देता है और ईमेल को हटा देता है।
अमेज़ॅन एसईएस की स्थापना
किसी भी अन्य AWS सेवाओं के विपरीत, व्यावहारिक रूप से SES उदाहरण बनाने की कोई आवश्यकता नहीं है क्योंकि सभी नए AWS खाते डिफ़ॉल्ट रूप से AWS SES सैंडबॉक्स में रखे जाते हैं। डिफ़ॉल्ट रूप से प्रत्येक एडब्ल्यूएस खाते के पास उपलब्ध क्षेत्रों में एडब्ल्यूएस एसईएस के लिए सैंडबॉक्स पहुंच है।
सैंडबॉक्स मोड का उपयोग करते समय, हम केवल सत्यापित पहचानकर्ताओं को ही ईमेल भेज सकते हैं। एक डोमेन या ईमेल पता जिसका उपयोग हम ईमेल भेजने के लिए करते हैं, एक सत्यापित पहचान है। हमें प्रत्येक पहचान का निर्माण और सत्यापन करना चाहिए जिसे हम एक के रूप में उपयोग करना चाहते हैं From
, To
, Source
, Sender
या, Return-Path
पता सैंडबॉक्स मोड में एसईएस का उपयोग करके हम एक ईमेल भेज सकते हैं। पहचान सत्यापित करने के लिए Amazon SES का उपयोग करके, हम अपना स्वामित्व साबित कर सकते हैं और अवैध उपयोग को रोक सकते हैं।
धोखाधड़ी से बचने और IP पते की प्रतिष्ठा को बनाए रखने के लिए, AWS SES में ईमेल भेजने की सीमाएँ शामिल हैं। ये सीमाएँ प्रति सेकंड ईमेल की अधिकतम संख्या और प्रत्येक उपयोगकर्ता के लिए दैनिक ईमेल सीमा निर्दिष्ट करती हैं। AWS सहायता केंद्र से संपर्क करके, हम क्षेत्र द्वारा इस तरह के कोटा स्थापित कर सकते हैं।
आइए पहचान सत्यापित करें। AWS कंसोल में लॉग इन करें और "खोजें"अमेज़न सरल ईमेल सेवा"
फिर “पर क्लिक करेंपहचान बनाएं” सत्यापन के लिए एक ईमेल या एक डोमेन जोड़ने के लिए। हमारे मामले में, हम सत्यापन के लिए एक ईमेल जोड़ने जा रहे हैं।
एक बार, पहचान बन जाने के बाद, हम विवरणों को सत्यापित कर सकते हैं।
हमने जो पहचान बनाई है वह "सत्यापन लंबित" मंच। इस स्तर पर, उपयोगकर्ता को AWS से सत्यापन मेल की जाँच करने और ईमेल सत्यापित करने के लिए निर्देशों का पालन करने की आवश्यकता होती है।
अगला, हमें लाने की जरूरत है "प्रवेश की चाबी" तथा "गुप्त कुंजी” एसईएस के साथ हमारे आवेदन के प्रमाणीकरण और प्राधिकरण के लिए। इसे उत्पन्न करने के लिए, हमें एक उपयोगकर्ता समूह बनाना होगा और उस समूह में एक उपयोगकर्ता को जोड़ना होगा। जब हम उस उपयोगकर्ता को बनाते हैं, तो AWS एक एक्सेस-कुंजी और गुप्त-कुंजी उत्पन्न करता है। तो चलिए " पर पुनर्निर्देशित करते हैंआई ए एम”एडब्ल्यूएस कंसोल में और उपयोगकर्ता समूह बनाएं।
फिर हमें जोड़ने की जरूरत है "व्यवस्थापक पहुंच” SES के लिए उस समूह को अनुमति।
अंत में, हम उपरोक्त समूह में एक उपयोगकर्ता जोड़ेंगे।
अगला, हमें अनुमतियों के लिए समूह का चयन करने की आवश्यकता है।
अंत में, आगे उपयोग के लिए स्क्रीन पर प्रदर्शित एक्सेस-कुंजी और गुप्त-कुंजी को कॉपी करें।
ईमेल भेजने के लिए स्प्रिंग क्लाउड प्रोजेक्ट का उपयोग करें
प्रोजेक्ट सेटअप
आइए स्प्रिंग क्लाउड प्रोजेक्ट को स्पिन करें और एसईएस के साथ एकीकृत करने के लिए उपयोग-मामलों के माध्यम से चलाएं। एक कंकाल परियोजना के साथ आरंभ करने का सबसे आसान तरीका है स्प्रिंग इनिशियलाइज़र:
हमने जोड़ा है स्प्रिंग वेब बाकी एमवीसी के लिए, अपाचे फ्रीमार्कर HTML-आधारित ईमेल टेम्प्लेट बनाने के लिए, जावा मेल प्रेषक एक ईमेल भेजने के लिए और Lombok (वैकल्पिक बॉयलरप्लेट-कम करने वाली लाइब्रेरी) निर्भरता। इसके अतिरिक्त, हमें स्प्रिंग क्लाउड AWS और SES के लिए प्रासंगिक निर्भरताएँ जोड़ने की आवश्यकता है। स्प्रिंग क्लाउड AWS के लिए, हम अपने में एक अलग स्प्रिंग क्लाउड 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>
अंत में, एसईएस के लिए समर्थन जोड़ने के लिए, हमें मॉड्यूल निर्भरता को शामिल करने की आवश्यकता है जो स्टार्टर मॉड्यूल के रूप में उपलब्ध है 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
एसईएस के लिए मॉड्यूल में दो वर्ग हैं: SimpleEmailServiceMailSender
और SimpleEmailServiceJavaMailSender
.
- RSI
SimpleEmailServiceMailSender
क्लास ईमेल भेजने के लिए Amazon सिंपल ईमेल सर्विस का इस्तेमाल करती है। इस कार्यान्वयन के लिए जावा मेल एपीआई की आवश्यकता नहीं है। इसका उपयोग अनुलग्नकों से रहित सीधा मेल संदेश भेजने के लिए किया जा सकता है। - RSI
SimpleEmailServiceJavaMailSender
वर्ग ईमेल भेजने में सक्षम बनाता है जिसमें अटैचमेंट और अन्य माइम तत्व होते हैं।
तो यह हमारी सभी मूलभूत आवश्यकताओं को कवर करता है!
बीन्स को कॉन्फ़िगर करना
जैसा कि ऊपर चर्चा की गई है, हमें दो प्रकार की फलियों को परिभाषित करने की आवश्यकता है: 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 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'
अगला, हम प्राप्तकर्ता के मेल पते पर लॉगिन कर सकते हैं और सत्यापित कर सकते हैं कि प्राप्तकर्ता को ईमेल प्राप्त हुआ है या नहीं।
अनुलग्नक के साथ सरल ईमेल भेजना
हम अटैचमेंट को माइम के रूप में पास करने के लिए एक सर्विस लेयर को परिभाषित करेंगे और अन्य ईमेल विशेषताओं को सेट करेंगे 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;
}
}
अगला, हम इस टेम्प्लेट को लोड करने के लिए अपनी सर्विस लेयर को परिभाषित करेंगे और एसईएस को भेजने के लिए एक अंतिम संदेश तैयार करेंगे:
@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 हमें एक ही ऑपरेशन में एक या एक से अधिक गंतव्यों पर व्यक्तिगत ईमेल भेजने के लिए ईमेल टेम्प्लेट बनाने की अनुमति देता है।
हम प्रति Amazon SES खाते में 10,000 तक ईमेल टेम्प्लेट बना सकते हैं। प्रत्येक टेम्प्लेट का आकार 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}}
ईमेल भेजते समय प्रत्येक गंतव्य के लिए। - एचटीएमएलपार्ट: इसमें ईमेल का HTML बॉडी होता है और इसमें रिप्लेसमेंट टैग भी हो सकते हैं।
- टेक्स्टपार्ट: यह ईमेल के टेक्स्ट बॉडी का प्रतिनिधित्व करता है। ईमेल का यह संस्करण उन प्राप्तकर्ताओं को भेजा जाता है जिनके ईमेल क्लाइंट HTML ईमेल नहीं देखते हैं। इस संपत्ति पर प्रतिस्थापन टैग मौजूद हो सकते हैं।
इस फाइल को हम इस रूप में सेव कर सकते हैं mytemplate.json
. अंत में हम टेम्पलेट बनाने के लिए एडब्ल्यूएस सीएलआई कमांड का उपयोग निम्नानुसार कर सकते हैं:
$ 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 कंसोल से उपरोक्त सभी विवरणों को भरते हुए अनुरोध सबमिट कर सकते हैं। इसे AWS CLI का उपयोग करके भी सबमिट किया जा सकता है। यह तब मददगार होगा जब हमें बड़ी संख्या में पहचान के लिए एक्सेस का अनुरोध करने की आवश्यकता होगी और हम प्रक्रिया को स्वचालित करना चाहेंगे।
निष्कर्ष
अमेज़ॅन सिंपल ईमेल सर्विस (एसईएस) के प्रमुख विचार और इसके साथ इंटरफेस करने के लिए स्प्रिंग क्लाउड एडब्ल्यूएस द्वारा पेश किए गए पुस्तकालय इस लेख में शामिल किए गए थे। इसके अतिरिक्त, हमने एक REST API के साथ एक स्प्रिंग बूट एप्लिकेशन बनाया है जो स्प्रिंग क्लाउड AWS SES मॉड्यूल के माध्यम से ईमेल भेज सकता है।
अब आपको इस बात की ठोस समझ होनी चाहिए कि Amazon सिंपल ईमेल सर्विस (SES) क्या है और ईमेल भेजने के लिए इसका उपयोग कैसे करें।