JavaMail API ব্যবহার করে Database সংযুক্ত Email প্রেরণ একটি সাধারণ এবং কার্যকর পদ্ধতি, যেখানে আপনি একটি ডাটাবেস থেকে তথ্য বের করে সেগুলোকে ই-মেইলে পাঠাতে পারেন। এটি বিশেষ করে রিপোর্ট বা ডেটাবেস থেকে প্রাপ্ত কাস্টম ডাটা সহ ই-মেইল পাঠানোর জন্য ব্যবহার করা হয়।
এখানে একটি প্রাক্টিকাল উদাহরণ দেয়া হলো যেখানে JavaMail API ব্যবহার করে MySQL ডাটাবেস থেকে ডেটা নিয়ে সেই ডেটা একটি HTML ই-মেইল হিসেবে পাঠানো হচ্ছে।
প্রয়োজনীয় লাইব্রেরি:
- JavaMail API – ই-মেইল পাঠানোর জন্য।
- JDBC (Java Database Connectivity) – ডাটাবেস থেকে ডেটা বের করার জন্য।
Maven Dependency:
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
JavaMail API দিয়ে Database সংযুক্ত Email প্রেরণ:
এই উদাহরণে আমরা একটি MySQL ডাটাবেস থেকে ডেটা নিয়ে সেই ডেটাকে HTML টেবিল আকারে ই-মেইলে পাঠাবো।
1. MySQL Database Setup:
ধরা যাক, আমাদের একটি employees নামক টেবিল আছে, যার মধ্যে কর্মচারীদের নাম, পদ, এবং বেতন তথ্য রয়েছে।
CREATE DATABASE company;
USE company;
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
position VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (name, position, salary) VALUES
('John Doe', 'Software Engineer', 60000),
('Jane Smith', 'Project Manager', 80000),
('Robert Brown', 'QA Tester', 50000);
2. Java Code Example:
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.util.*;
import java.sql.*;
public class SendDatabaseEmail {
public static void main(String[] args) {
// SMTP সার্ভারের জন্য প্রপার্টি সেট করা
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.gmail.com"); // SMTP সার্ভার (Gmail)
properties.put("mail.smtp.port", "587"); // SMTP পোর্ট (TLS এর জন্য 587)
properties.put("mail.smtp.auth", "true"); // অথেন্টিকেশন সক্রিয় করা
properties.put("mail.smtp.starttls.enable", "true"); // TLS সক্রিয় করা
// JavaMail সেশন তৈরি করা
Session session = Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("your-email@gmail.com", "your-app-password");
}
});
try {
// ডাটাবেস থেকে তথ্য সংগ্রহ করা
String dbContent = getDatabaseContent();
// মেইল মেসেজ তৈরি করা
Message message = new MimeMessage(session);
// প্রেরকের ঠিকানা
message.setFrom(new InternetAddress("your-email@gmail.com"));
// প্রাপকের ঠিকানা
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com"));
// মেইলের বিষয়
message.setSubject("Employee Data Report");
// HTML কনটেন্ট তৈরি (ডাটাবেস ডাটা সহ)
String htmlContent = "<h1>Employee Data Report</h1>"
+ "<p>The following is the list of employees:</p>"
+ "<table border='1' cellpadding='5'>"
+ "<tr><th>Name</th><th>Position</th><th>Salary</th></tr>"
+ dbContent
+ "</table>";
// MimeBodyPart ব্যবহার করে HTML কনটেন্ট যোগ করা
MimeBodyPart mimeBodyPart = new MimeBodyPart();
mimeBodyPart.setContent(htmlContent, "text/html");
// MIME multipart তৈরি এবং MIME body part যোগ করা
MimeMultipart mimeMultipart = new MimeMultipart();
mimeMultipart.addBodyPart(mimeBodyPart);
// MIME multipart কনটেন্ট সেট করা
message.setContent(mimeMultipart);
// মেইল পাঠানো
Transport.send(message);
System.out.println("Email sent successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
// ডাটাবেস থেকে তথ্য সংগ্রহ করা
private static String getDatabaseContent() {
StringBuilder content = new StringBuilder();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// ডাটাবেস কনেকশন তৈরি করা
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/company", "root", "yourpassword");
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT name, position, salary FROM employees");
// ডেটা প্রক্রিয়া করে HTML টেবিল তৈরি করা
while (rs.next()) {
String name = rs.getString("name");
String position = rs.getString("position");
double salary = rs.getDouble("salary");
content.append("<tr><td>").append(name).append("</td><td>").append(position)
.append("</td><td>").append(salary).append("</td></tr>");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return content.toString();
}
}
কোডের ব্যাখ্যা:
- SMTP Configuration:
properties.put("mail.smtp.host", "smtp.gmail.com")এবং অন্যান্য প্রপার্টি সেট করা হয় যেন মেইল সার্ভারের সাথে সঠিকভাবে কানেকশন করা যায়। - Session and Authentication:
Sessionতৈরি করা হয়েছে যেখানে Gmail SMTP সার্ভার এবং পাসওয়ার্ড অ্যাথেন্টিকেশন ব্যবহৃত হয়েছে। - Database Connection:
getDatabaseContent()মেথড ব্যবহার করে MySQL ডাটাবেস থেকে কর্মচারীদের তথ্য (নাম, পদ, এবং বেতন) সংগ্রহ করা হয়েছে। এই তথ্য একটি HTML টেবিল আকারে তৈরি করা হয়েছে। - HTML Email: ডাটাবেস থেকে প্রাপ্ত তথ্য HTML টেবিল আকারে ই-মেইলে রেন্ডার করা হয়েছে।
- Sending the Email:
Transport.send(message)ব্যবহার করে মেইল পাঠানো হয়েছে।
ব্যাখ্যা:
getDatabaseContent()মেথডটি ডাটাবেস থেকে কর্মচারীদের তথ্য সংগ্রহ করে এবং সেই তথ্যকে একটি HTML টেবিলের মধ্যে সন্নিবেশিত করে।- মেইলের কন্টেন্ট
MimeBodyPartএবংMimeMultipartএর মাধ্যমে HTML আকারে পাঠানো হয়েছে। - Gmail SMTP সার্ভার ব্যবহার করে মেইল পাঠানো হচ্ছে, কিন্তু আপনি চাইলে অন্য কোন SMTP সার্ভারও ব্যবহার করতে পারেন (যেমন Outlook, Yahoo, ইত্যাদি)।
এই উদাহরণটি দেখিয়েছে কীভাবে JavaMail API এবং JDBC ব্যবহার করে ডাটাবেস সংযুক্ত ই-মেইল পাঠানো যায়। এই পদ্ধতিটি বিভিন্ন ধরনের রিপোর্ট, রিয়েল-টাইম ডেটা অথবা কাস্টম ডেটা পাঠানোর জন্য খুবই কার্যকরী।
Read more