Cron Jobs এর মাধ্যমে Email Automation

Java Technologies - জাভা মেইল এপিআই (JavaMail API) - Email Scheduling এবং Task Management
135

JavaMail API ব্যবহার করে ইমেইল শিডিউলিং করার জন্য আমরা Timer বা ScheduledExecutorService ব্যবহার করতে পারি। এই দুটি পদ্ধতি সাহায্যে আপনি নির্দিষ্ট সময়ে বা নিয়মিত ইমেইল পাঠানোর কাজ শিডিউল করতে পারেন।

  • Timer: এটি Java এর একটি পুরানো ক্লাস যা নির্দিষ্ট সময় পরে বা নির্দিষ্ট সময়ের মধ্যে ইভেন্ট বা কাজ পরিচালনা করতে ব্যবহৃত হয়।
  • ScheduledExecutorService: এটি java.util.concurrent প্যাকেজের অংশ এবং এটি Timer এর তুলনায় আরো আধুনিক এবং আরও ভাল পারফরম্যান্স প্রদান করে। এটি একাধিক কাজের জন্য আরও উন্নত কনকারেন্সি ম্যানেজমেন্ট প্রদান করে।

JavaMail API ব্যবহার করে Email Scheduling

এখানে আমরা ScheduledExecutorService ব্যবহার করে একটি ইমেইল শিডিউল করার উদাহরণ দেখব। এটি নির্দিষ্ট সময়ে একটি ইমেইল পাঠানোর জন্য ব্যবহৃত হবে।

ধাপ ১: JavaMail API সেটআপ

প্রথমে, JavaMail API সহ আপনার প্রজেক্টে Maven বা Gradle ব্যবহার করে ডিপেনডেন্সি অন্তর্ভুক্ত করতে হবে।

Maven ডিপেনডেন্সি:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

application.properties:

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=your-email@gmail.com
spring.mail.password=your-email-password
spring.mail.protocol=smtp
spring.mail.smtp.auth=true
spring.mail.smtp.starttls.enable=true

ধাপ ২: ScheduledExecutorService ব্যবহার করে ইমেইল শিডিউল করা

এখানে আমরা একটি উদাহরণ দেখাবো যেখানে নির্দিষ্ট সময়ে ইমেইল পাঠানোর কাজ শিডিউল করা হবে।

EmailService.java:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class EmailService {

    @Autowired
    private JavaMailSender emailSender;

    public void sendSimpleMessage(String to, String subject, String text) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom("your-email@gmail.com");
        message.setTo(to);
        message.setSubject(subject);
        message.setText(text);

        emailSender.send(message);
    }
}

EmailScheduler.java:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class EmailScheduler {

    @Autowired
    private EmailService emailService;

    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

    public void scheduleEmail(String to, String subject, String body, long delayInSeconds) {
        Runnable emailTask = new Runnable() {
            @Override
            public void run() {
                // Email পাঠানো
                emailService.sendSimpleMessage(to, subject, body);
                System.out.println("Scheduled Email sent to " + to);
            }
        };

        // শিডিউল করা কাজ, নির্দিষ্ট সময় পরে পাঠানো হবে
        scheduler.schedule(emailTask, delayInSeconds, TimeUnit.SECONDS);
    }

    public void scheduleRepeatingEmail(String to, String subject, String body, long initialDelay, long period) {
        Runnable emailTask = new Runnable() {
            @Override
            public void run() {
                // Email পাঠানো
                emailService.sendSimpleMessage(to, subject, body);
                System.out.println("Repeated Email sent to " + to);
            }
        };

        // পুনরাবৃত্ত ইমেইল পাঠানো, নির্দিষ্ট সময় অন্তর
        scheduler.scheduleAtFixedRate(emailTask, initialDelay, period, TimeUnit.SECONDS);
    }
}

Main Application Class:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class EmailSchedulerApplication implements CommandLineRunner {

    @Autowired
    private EmailScheduler emailScheduler;

    public static void main(String[] args) {
        SpringApplication.run(EmailSchedulerApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        // একবার ইমেইল শিডিউল করা, 10 সেকেন্ড পর ইমেইল পাঠানো হবে
        emailScheduler.scheduleEmail("recipient@example.com", "Scheduled Email", "This is a scheduled email!", 10);

        // পুনরাবৃত্তি ইমেইল পাঠানো, প্রথম ইমেইল পাঠানো হবে 5 সেকেন্ড পর এবং পরে প্রতি 10 সেকেন্ডে পাঠানো হবে
        emailScheduler.scheduleRepeatingEmail("recipient@example.com", "Repeated Email", "This is a repeated email!", 5, 10);
    }
}

এখানে কী হচ্ছে?

  1. EmailService: এই ক্লাসটি Spring MailSender ব্যবহার করে একটি সাধারণ ইমেইল পাঠানোর লজিক সরবরাহ করে।
  2. EmailScheduler: এখানে একটি ScheduledExecutorService ব্যবহার করা হচ্ছে যা ইমেইল পাঠানোর কাজটি নির্দিষ্ট সময় পরে বা নির্দিষ্ট সময়ের মধ্যে পুনরাবৃত্তি করে।
    • scheduleEmail: একটি নির্দিষ্ট সময় পরে একটি এককালীন ইমেইল পাঠানোর জন্য ব্যবহার হয়।
    • scheduleRepeatingEmail: পুনরাবৃত্তি ইমেইল পাঠানোর জন্য, যেখানে প্রথম ইমেইল পাঠানোর পর একটি নির্দিষ্ট সময় অন্তর পরবর্তী ইমেইল পাঠানো হয়।
  3. Main Application Class: এই ক্লাসটি Spring Boot অ্যাপ্লিকেশন শুরু করে এবং EmailScheduler ক্লাসে ইমেইল শিডিউল করার কাজ করে।

Timer এবং ScheduledExecutorService এর মধ্যে পার্থক্য:

FeatureTimerScheduledExecutorService
Concurrencyএকাধিক কাজ চালাতে পারেন, তবে এটি কিছু সীমাবদ্ধতা আছে।এটি উচ্চ পারফরম্যান্স এবং আরো নির্ভরযোগ্য কনকারেন্সি প্রদান করে।
Ease of Useসহজ কিন্তু পুরানো API, একক থ্রেডে কাজ করে।আধুনিক এবং আরো শক্তিশালী, অনেক ধরনের কাজ একসাথে পরিচালনা করতে পারে।
Error Handlingসীমিত ত্রুটি পরিচালনা।উন্নত ত্রুটি পরিচালনা এবং ব্যাচ প্রসেসিং সমর্থন করে।
Task Schedulingনির্দিষ্ট সময় পরে একটি কাজ চালাতে পারে।একাধিক কাজের জন্য নির্দিষ্ট সময় অন্তর এবং এককালীন কাজ শিডিউল করতে পারে।
Thread Pool Managementথ্রেড পুল পরিচালনা করার জন্য TimerTask ব্যবহার করতে হয়।নিজস্ব থ্রেড পুল পরিচালনা এবং সহজে থ্রেড ব্যবস্থাপনা।

ScheduledExecutorService JavaMail API দিয়ে ইমেইল শিডিউল করার জন্য আধুনিক এবং উন্নত উপায় প্রদান করে। আপনি নির্দিষ্ট সময়ে বা পুনরাবৃত্তি ইমেইল পাঠাতে পারেন এবং এটি একাধিক কাজের জন্য উপযুক্ত। Timer এর তুলনায় এটি আরো শক্তিশালী, এবং আপনার অ্যাপ্লিকেশনকে আরও স্কেলেবল এবং পারফরম্যান্সের জন্য উপযুক্ত করে তোলে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...