স্প্রিং বুট এবং স্প্রিং ক্লাউড প্লেটোব্লকচেন ডেটা ইন্টেলিজেন্স সহ সরল ইমেল পরিষেবার (AWS SES) নির্দেশিকা৷ উল্লম্ব অনুসন্ধান. আ.

স্প্রিং বুট এবং স্প্রিং ক্লাউড সহ সাধারণ ইমেল পরিষেবার (AWS SES) নির্দেশিকা৷

ভূমিকা

AWS SES (সরল ইমেল পরিষেবা) একটি সহজ-টু-সেটআপ ইমেল পাঠানো এবং গ্রহণ করার পরিষেবা৷ একটি অন-প্রিমিস ইমেল সিস্টেম পরিচালনা করা সাধারণত কঠিন, চতুর এবং ক্লান্তিকর, তাই প্রক্রিয়াটি আউটসোর্সিং একটি জনপ্রিয় পছন্দ।

আমরা আমাদের ক্লায়েন্টদের লেনদেনমূলক ইমেল, বিপণন ইমেল, বা অন্য কোন ধরনের বিজ্ঞপ্তি ইমেল পাঠাতে Amazon SES ব্যবহার করতে পারি। এটি সমস্ত আকারের ব্যবসার জন্য একটি সাশ্রয়ী সমাধান যা তাদের গ্রাহকদের সাথে সংযোগ স্থাপনের জন্য ইমেল ব্যবহার করে কারণ এটি নির্ভরযোগ্য এবং পরিমাপযোগ্য অবকাঠামোর উপর নির্মিত। আমাজন ওয়েব সার্ভিসেস (এডব্লিউএস).

বাল্ক ইমেল পাঠানোর জন্য, যেকোনো অ্যাপ্লিকেশন Amazon SES এর সাথে যোগাযোগ করতে পারে। আমরা প্রকৃতপক্ষে যে ইমেলগুলি প্রেরণ করি তার জন্য আমরা কেবল অর্থ প্রদান করি, সেগুলি লেনদেনমূলক ইমেল হোক বা বিপণন ইমেল হোক। অতিরিক্তভাবে, ডেডিকেটেড, শেয়ার করা বা মালিকানাধীন আইপি ঠিকানা সহ কনফিগারেশনের একটি পরিসর Amazon SES দ্বারা সমর্থিত। ব্যবসাগুলি ডেলিভারিবিলিটি ড্যাশবোর্ড এবং প্রেরকের তথ্যের রিপোর্ট ব্যবহার করে প্রতিটি ইমেল গণনা করতে পারে।

এই নির্দেশিকায় আমরা একটি অঞ্চলে একটি AWS SES দৃষ্টান্ত কনফিগার করতে যাচ্ছি এবং তারপরে এর সাথে সংহত করতে যাচ্ছি AWS এর জন্য স্প্রিং ক্লাউড যা একটি উপ-প্রকল্প বসন্ত মেঘ. আমরা আমাদের অ্যাপ্লিকেশন থেকে ইমেল পাঠানোর জন্য বিভিন্ন পরিস্থিতিতে চেষ্টা করব।

বিঃদ্রঃ: আপনি গাইডটিতে ব্যবহৃত সমস্ত উত্স কোড খুঁজে পেতে পারেন গিটহাব.

AWS SES ব্যবহার করে একটি ইমেল পাঠানোর জীবনচক্র

একটি অ্যাপ্লিকেশন দ্বারা প্রেরিত একটি ইমেলের জীবনচক্র কিভাবে গন্তব্য মেলবক্সে পৌঁছায় তা দেখা যাক:

  • একটি অ্যাপ্লিকেশন, আমাদের ক্ষেত্রে, স্প্রিং ক্লাউড কোড এক বা একাধিক প্রাপককে একটি ইমেল পাঠাতে AWS SES-কে অনুরোধ করে৷

  • SES প্রাথমিকভাবে অনুরোধটি যাচাই করে, এবং যদি এটি অনুমোদিত হয়, তাহলে অনুরোধের স্পেসিফিকেশন সহ একটি ইমেল বার্তা তৈরি করে। এই ইমেল বার্তাটিতে একটি শিরোনাম, বডি এবং খাম রয়েছে এবং এটি মেনে চলে RFC 5322এর ইন্টারনেট মেসেজ ফরম্যাটের সংজ্ঞা।

  • SES তারপর ইন্টারনেটের মাধ্যমে প্রাপকের রিসিভারের কাছে বার্তা প্রেরণ করে। যত তাড়াতাড়ি বার্তাটি এসইএস-এ হস্তান্তর করা হয়, এটি প্রায়শই সরাসরি প্রেরণ করা হয়, প্রাথমিক ডেলিভারি প্রচেষ্টা সাধারণত মিলিসেকেন্ডের মধ্যে ঘটে।

  • এই সময়ে বেশ কিছু ফলাফল আছে। এই ক্ষেত্রে:

    • সফল ডেলিভারি: ইন্টারনেট পরিষেবা প্রদানকারী (ISP) ইমেলটি গ্রহণ করে এবং এটি উদ্দিষ্ট প্রাপকের কাছে পাঠায়।
    • হার্ড বাউন্স: প্রাপকের ঠিকানা অবৈধ হওয়ায়, আইএসপি ইমেলটি প্রত্যাখ্যান করে। আইএসপি হার্ড বাউন্স বিজ্ঞপ্তিটি অ্যামাজন এসইএস-এ ফেরত পাঠায়, যা প্রেরককে ইমেলের মাধ্যমে বা এই বিজ্ঞপ্তিটি পাওয়ার জন্য সেট আপ করা একটি অ্যামাজন সিম্পল নোটিফিকেশন সার্ভিস (অ্যামাজন এসএনএস) বিষয়ে প্রকাশ করে বিজ্ঞপ্তি দেয়।
    • নরম বাউন্স: রিসিভারের ইনবক্স পূর্ণ থাকার কারণে, ডোমেনটি বিদ্যমান নেই, বা ISP অনুরোধটি প্রক্রিয়া করতে খুব ব্যস্ত থাকার মতো পরিস্থিতির কারণে, ISP প্রাপকের কাছে ইমেলটি সরবরাহ করতে অক্ষম হতে পারে। ISP তারপর একটি নির্দিষ্ট সংখ্যক বার পর্যন্ত ইমেলটি পুনরায় চেষ্টা করে এবং SES-কে একটি নরম বাউন্স বার্তা পাঠায়। যদি SES নির্দিষ্ট সময়সীমার মধ্যে ইমেলটি সরবরাহ করতে অক্ষম হয়, তবে এটি হয় একটি SNS বিষয়ে ইভেন্টটি প্রকাশ করে বা ইমেলের মাধ্যমে একটি হার্ড বাউন্স বার্তা পাঠায়।
    • অভিযোগ: ইমেলটি তাদের ইমেল প্রোগ্রামে রিসিভার দ্বারা স্প্যাম হিসাবে শ্রেণীবদ্ধ করা হয়। অ্যামাজন এসইএস-এ একটি অভিযোগের বিজ্ঞপ্তি প্রেরণ করা হয়, যা পরে অ্যামাজন এসইএস এবং আইএসপি-র একটি ফিডব্যাক লুপ স্থাপন করা থাকলে তা প্রেরকের কাছে পাঠানো হয়।
    • অটো প্রতিক্রিয়া: প্রাপক আইএসপি অ্যামাজন এসইএসকে রিসিভার থেকে স্বয়ংক্রিয় প্রতিক্রিয়া যেমন অফিসের বাইরের নোটিশের বিষয়ে অবহিত করে এবং অ্যামাজন এসইএস প্রেরককে বিজ্ঞপ্তি দেয়।

যখন ডেলিভারি ব্যর্থ হয়, তখন 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 কনসোলে লগইন করুন এবং "এর জন্য অনুসন্ধান করুনঅ্যামাজন সাধারণ ইমেল পরিষেবা Email":

SES ভূমিকা

তারপরে “ক্লিক করুনপরিচয় তৈরি করুন” যাচাইকরণের জন্য একটি ইমেল বা একটি ডোমেন যোগ করতে। আমাদের ক্ষেত্রে, আমরা যাচাইয়ের জন্য একটি ইমেল যোগ করতে যাচ্ছি।

পরিচয় তৈরি করুন

একবার, পরিচয় তৈরি হয়ে গেলে, আমরা বিস্তারিত যাচাই করতে পারি।

পরিচয় তৈরি করেছেন

আমরা যে পরিচয় তৈরি করেছি তা "যাচাইকরণ মুলতুবি"মঞ্চ। এই পর্যায়ে, ব্যবহারকারীকে AWS থেকে যাচাইকরণ মেইল ​​চেক করতে হবে এবং ইমেল যাচাই করতে নির্দেশাবলী অনুসরণ করতে হবে।

যাচাইকৃত পরিচয়

পরবর্তী, আমাদের আনতে হবে "অ্যাক্সেস কী" এবং "গোপন চাবি” SES এর সাথে আমাদের আবেদনের প্রমাণীকরণ এবং অনুমোদনের জন্য। এটি তৈরি করার জন্য, আমাদের একটি ব্যবহারকারী গ্রুপ তৈরি করতে হবে এবং সেই গ্রুপে একজন ব্যবহারকারীকে যুক্ত করতে হবে। যখন আমরা সেই ব্যবহারকারী তৈরি করি, তখন AWS একটি অ্যাক্সেস-কী এবং গোপন-কী তৈরি করে। তো চলুন রিডাইরেক্ট করি "আমি” AWS কনসোলে এবং ব্যবহারকারী গ্রুপ তৈরি করুন।

ইউজার গ্রুপ তৈরি করুন

তারপর আমাদের যোগ করতে হবে "অ্যাডমিনিস্ট্রেটর অ্যাক্সেস" SES-এর জন্য সেই গোষ্ঠীর অনুমতি৷

অনুমতি যোগ করুন

অবশেষে, আমরা উপরের গ্রুপে একজন ব্যবহারকারী যোগ করব।

ব্যবহারকারী যুক্ত করুন

পরবর্তী, আমাদের অনুমতির জন্য গ্রুপ নির্বাচন করতে হবে।

গ্রুপ যুক্ত করুন

অবশেষে, আরও ব্যবহারের জন্য পর্দায় প্রদর্শিত অ্যাক্সেস-কী এবং গোপন-কী অনুলিপি করুন।

স্প্রিং ক্লাউড প্রজেক্ট ব্যবহার করে ইমেল পাঠানো হচ্ছে

প্রকল্প সেটআপ

আসুন একটি স্প্রিং ক্লাউড প্রজেক্ট স্পিন করুন এবং SES-এর সাথে একীভূত করার জন্য ব্যবহার-ক্ষেত্রগুলির মধ্য দিয়ে চলুন। একটি কঙ্কাল প্রকল্প দিয়ে শুরু করার সবচেয়ে সহজ উপায় হল মাধ্যমে স্প্রিং ইনিশিয়ালাইজার:

স্প্রিং ইনিশিয়ালাইজার

আমরা যোগ করেছি স্প্রিং ওয়েব REST MVC এর জন্য, অ্যাপাচি ফ্রিমার্কার 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>

অবশেষে, 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 ক্লাস ইমেল পাঠাতে অ্যামাজন সাধারণ ইমেল পরিষেবা ব্যবহার করে। এই বাস্তবায়নের জন্য Java Mail API-এর প্রয়োজন নেই। এটি সংযুক্তি ছাড়া সহজবোধ্য মেল বার্তা পাঠাতে ব্যবহার করা যেতে পারে।
  • সার্জারির 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 স্প্রিং এর মেল বিমূর্ততা থেকে ইন্টারফেস।

সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!

আমরা থেকে তথ্য পুনরুদ্ধার করার বৈশিষ্ট্যগুলিও সংজ্ঞায়িত করব 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'

এরপরে, আমরা প্রাপকের মেল ঠিকানায় লগইন করতে পারি এবং প্রাপক ইমেলটি পেয়েছে কিনা তা যাচাই করতে পারি।

সংযুক্তি সহ টেমপ্লেট ইমেল পাঠানো হচ্ছে

পূর্ববর্তী ব্যবহার-ক্ষেত্রগুলি যা আমরা দেখেছি তা উন্নয়ন বা পরীক্ষার পরিস্থিতির জন্য ভাল কিন্তু উৎপাদনে, আমরা সাধারণত ভেরিয়েবল সহ একটি ইমেল টেমপ্লেট ব্যবহার করি যা একটি 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>

এর পরে, পাথ থেকে টেমপ্লেট লোড করতে এবং বিন হিসাবে যোগ করার জন্য আমাদের একটি কনফিগারেশন ক্লাস নির্ধারণ করতে হবে। এই জন্য, আমরা সংজ্ঞায়িত করা হবে 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 আমাদের একক অপারেশনে এক বা একাধিক গন্তব্যে ব্যক্তিগতকৃত ইমেল পাঠাতে ইমেল টেমপ্লেট তৈরি করতে দেয়।

আমরা প্রতি Amazon SES অ্যাকাউন্টে 10,000টি পর্যন্ত ইমেল টেমপ্লেট তৈরি করতে পারি। প্রতিটি টেমপ্লেট টেক্সট এবং HTML উভয় অংশ সহ 500KB পর্যন্ত আকারের হতে পারে। আমরা প্রতিটি কলে 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 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 মডিউলের মাধ্যমে ইমেল পাঠাতে পারে।

অ্যামাজন সিম্পল ইমেল সার্ভিস (এসইএস) কী এবং ইমেল পাঠানোর জন্য কীভাবে এটি ব্যবহার করতে হয় সে সম্পর্কে আপনার এখন একটি দৃঢ় ধারণা থাকা উচিত।

সময় স্ট্যাম্প:

থেকে আরো Stackabuse