JavaMail API এবং Database Integration একটি সাধারণ এবং শক্তিশালী সমাধান তৈরি করতে ব্যবহৃত হয়, যেখানে ডেটাবেস থেকে ডেটা নেওয়া হয় এবং সেই ডেটা ব্যবহার করে ইমেইল পাঠানো হয়। উদাহরণস্বরূপ, একটি contact form বা user registration সিস্টেমের মাধ্যমে ব্যবহারকারীদের ইমেইল পাঠানো হতে পারে যেখানে ডেটাবেস থেকে ব্যবহারকারীর তথ্য নিয়ে ইমেইল পাঠানো হয়।
এখানে একটি উদাহরণ দেওয়া হচ্ছে যেখানে JavaMail API ব্যবহার করে ডেটাবেস থেকে ইমেইল ঠিকানা বের করা হবে এবং ইমেইল পাঠানো হবে।
ধরা যাক, আমাদের একটি ডেটাবেস রয়েছে যেখানে ব্যবহারকারীদের ইমেইল ঠিকানা সংরক্ষিত আছে। আমরা users
নামক একটি টেবিল ব্যবহার করব।
Database Structure (MySQL):
CREATE DATABASE email_example;
USE email_example;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com');
INSERT INTO users (name, email) VALUES ('Jane Smith', 'jane.smith@example.com');
JavaMail API এবং JDBC ইন্টিগ্রেশন জন্য Maven ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</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.26</version>
</dependency>
এখানে একটি Java প্রোগ্রাম দেওয়া হচ্ছে, যা ডেটাবেস থেকে ইমেইল ঠিকানা নিয়ে এবং JavaMail API ব্যবহার করে ইমেইল পাঠায়।
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.util.*;
import java.sql.*;
public class SendEmailFromDatabase {
public static void main(String[] args) {
// SMTP সার্ভারের কনফিগারেশন
String host = "smtp.gmail.com"; // Gmail SMTP হোস্ট
final String user = "your-email@gmail.com"; // আপনার ইমেইল অ্যাড্রেস
final String password = "your-email-password"; // আপনার ইমেইল পাসওয়ার্ড
// JDBC কনফিগারেশন
String dbUrl = "jdbc:mysql://localhost:3306/email_example";
String dbUser = "root";
String dbPassword = "root";
// SQL কুয়েরি
String query = "SELECT name, email FROM users";
// SMTP প্রপার্টি সেট করা
Properties properties = System.getProperties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", "587");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
// সেশন তৈরি করা
Session session = Session.getInstance(properties, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password); // প্রমাণীকরণের জন্য ইমেইল এবং পাসওয়ার্ড
}
});
try {
// ডেটাবেস থেকে ব্যবহারকারীর ইমেইল তথ্য পাওয়া
Connection connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(query);
while (resultSet.next()) {
String name = resultSet.getString("name");
String to = resultSet.getString("email");
// MimeMessage তৈরি করা
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(user));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("Hello " + name);
message.setText("Dear " + name + ",\n\nThis is a test email sent from JavaMail API.\n\nBest Regards,\nYour Company");
// ইমেইল পাঠানো
Transport.send(message);
System.out.println("Email sent to: " + name + " (" + to + ")");
}
connection.close(); // ডেটাবেস সংযোগ বন্ধ করা
} catch (SQLException | MessagingException e) {
e.printStackTrace();
}
}
}
users
টেবিল থেকে name
এবং email
কলামগুলি নিয়ে আসা হচ্ছে।Session
অবজেক্ট তৈরি করা হচ্ছে, যা SMTP সার্ভারের সাথে যোগাযোগ স্থাপন করে।JavaMail API এবং Database Integration ব্যবহার করে আপনি ডেটাবেস থেকে ডেটা নিয়ে এবং সেই ডেটা ব্যবহার করে ইমেইল পাঠাতে পারেন। এটি ডেটাবেসে সংরক্ষিত তথ্য অনুযায়ী ইমেইল প্রেরণের একটি কার্যকরী এবং স্কেলযোগ্য পদ্ধতি তৈরি করে। JavaMail API এবং JDBC এর সাহায্যে ডেটাবেসের সাথে ইমেইল কার্যক্রম সম্পর্কিত অপারেশন সম্পাদন করা সহজ।
JavaMail API ব্যবহার করে Database থেকে Email Address Fetch করা একটি সাধারণ কাজ যা আপনি আপনার অ্যাপ্লিকেশন থেকে ইমেইল পাঠানোর জন্য ডেটাবেসে সংরক্ষিত ইমেইল অ্যাড্রেসগুলি ব্যবহার করতে পারবেন। ডেটাবেস থেকে ইমেইল ঠিকানাগুলি বের করার জন্য আপনি JDBC (Java Database Connectivity) ব্যবহার করতে পারেন এবং তারপর সেই ঠিকানাগুলির মাধ্যমে ইমেইল পাঠাতে JavaMail API ব্যবহার করতে পারেন।
প্রথমে, ডেটাবেসের সাথে সংযোগ স্থাপন করতে হবে এবং সেখান থেকে ইমেইল ঠিকানাগুলি ফেচ করতে হবে। উদাহরণস্বরূপ, যদি আমাদের ডেটাবেসে একটি টেবিল থাকে যার নাম users, সেখানে একটি কলাম email থাকবে যা বিভিন্ন ব্যবহারকারীদের ইমেইল ঠিকানাগুলি ধারণ করবে।
id | name | |
---|---|---|
1 | John Doe | johndoe@example.com |
2 | Jane Smith | janesmith@example.com |
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;
import java.sql.*;
public class SendEmailFromDatabase {
public static void main(String[] args) {
// Step 1: ডেটাবেস থেকে ইমেইল ঠিকানা ফেচ করা
String dbURL = "jdbc:mysql://localhost:3306/your_database"; // ডেটাবেস URL
String dbUsername = "your_database_username";
String dbPassword = "your_database_password";
String emailQuery = "SELECT email FROM users"; // ইমেইল ঠিকানা ফেচ করার SQL কুয়েরি
// Step 2: ইমেইল সার্ভারের প্রপার্টি সেটআপ
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.gmail.com"); // SMTP সার্ভার (Gmail)
properties.put("mail.smtp.port", "587"); // SMTP পোর্ট (TLS)
properties.put("mail.smtp.auth", "true"); // SMTP অথেনটিকেশন
properties.put("mail.smtp.starttls.enable", "true"); // TLS এনাবল করা
final String username = "your-email@gmail.com"; // প্রেরকের ইমেইল
final String password = "your-email-password"; // প্রেরকের পাসওয়ার্ড
// সেশন তৈরি করা
Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Step 3: ডেটাবেস সংযোগ এবং ইমেইল ঠিকানা ফেচ করা
Connection conn = DriverManager.getConnection(dbURL, dbUsername, dbPassword);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(emailQuery);
// Step 4: ফেচ করা ইমেইল ঠিকানাগুলোর মাধ্যমে ইমেইল পাঠানো
while (rs.next()) {
String recipientEmail = rs.getString("email"); // ইমেইল ঠিকানা ফেচ করা
// মেইল মেসেজ তৈরি করা
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientEmail));
message.setSubject("Test Email from Java");
message.setText("Hello, this is a test email sent from Java using database email addresses.");
// মেইল পাঠানো
Transport.send(message);
System.out.println("Email sent to: " + recipientEmail);
}
// ডেটাবেস সংযোগ বন্ধ করা
rs.close();
stmt.close();
conn.close();
} catch (SQLException | MessagingException e) {
e.printStackTrace();
}
}
}
DriverManager.getConnection()
মেথডটি ডেটাবেসের URL, ইউজারনেম এবং পাসওয়ার্ড ব্যবহার করে সংযোগ তৈরি করছে।SELECT email FROM users
কুয়েরি ব্যবহার করে ডেটাবেস থেকে সমস্ত ইমেইল ঠিকানা ফেচ করা হচ্ছে।JavaMail API
ব্যবহার করে প্রতিটি ইমেইল ঠিকানায় মেইল পাঠানো হচ্ছে। এখানে Gmail এর SMTP সার্ভার ব্যবহার করা হয়েছে।Transport.send(message)
মেথড ব্যবহার করে প্রতিটি ইমেইল পাঠানো হচ্ছে।SQLException
এবং MessagingException
এর জন্য যথাযথ exception handling করা হয়েছে।"jdbc:mysql://localhost:3306/your_database"
। আপনি যদি অন্য ডেটাবেস (যেমন PostgreSQL, SQLite) ব্যবহার করেন, তাহলে URL পরিবর্তন করতে হবে।Multiple Recipients:
InternetAddress.parse()
মেথডে একাধিক ইমেইল ঠিকানা পাস করতে পারেন:message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("email1@example.com,email2@example.com"));
SQLException
এবং MessagingException
এর মাধ্যমে আপনি ত্রুটি চিহ্নিত করতে পারেন।HTML Emails:
message.setContent()
মেথডে "text/html"
কনটেন্ট টাইপ ব্যবহার করুন:message.setContent("<h1>HTML Email</h1>", "text/html");
MimeMultipart
ব্যবহার করুন।JavaMail API ব্যবহার করে আপনি ডেটাবেস থেকে ইমেইল ঠিকানা ফেচ করে একাধিক প্রাপককে ইমেইল পাঠাতে পারেন। ডেটাবেসে থাকা ইমেইল অ্যাড্রেস থেকে তথ্য ফেচ করে, JavaMail API ব্যবহার করে সেই ঠিকানাগুলিতে ইমেইল পাঠানো হয়। এই প্রক্রিয়াটি JDBC এবং JavaMail API এর সংমিশ্রণে বাস্তবায়িত করা সম্ভব।
JavaMail API ব্যবহার করে Email Logs সংরক্ষণ করার জন্য ডাটাবেস ব্যবহার করা যেতে পারে। এটি আপনার ইমেইল পাঠানো বা গ্রহণ করা সমস্ত কার্যকলাপ ট্র্যাক করার জন্য একটি ভাল পদ্ধতি। আপনি যেমন ইমেইল পাঠানোর সময় মেসেজের বিষয়, প্রাপক, প্রেরক, পাঠানোর সময় ইত্যাদি ডাটাবেসে সংরক্ষণ করতে পারেন।
এখানে আমরা দেখব কিভাবে JavaMail API ব্যবহার করে ইমেইল পাঠানোর লগ ডাটাবেসে সংরক্ষণ করা যায়। সাধারণত, আপনি একটি ডাটাবেস টেবিল তৈরি করবেন যেখানে এই সমস্ত তথ্য সংরক্ষণ করা হবে এবং তারপর JavaMail API ব্যবহার করে ইমেইল পাঠানোর পর সেই তথ্য ডাটাবেসে ইনসার্ট করবেন।
প্রথমে, একটি ডাটাবেস তৈরি করুন এবং একটি টেবিল তৈরি করুন যা ইমেইল সম্পর্কিত তথ্য সংরক্ষণ করবে। নিচে একটি সিম্পল টেবিলের উদাহরণ দেয়া হলো যা ইমেইল লগ সংরক্ষণ করবে।
CREATE TABLE email_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
sender_email VARCHAR(255),
recipient_email VARCHAR(255),
subject VARCHAR(255),
message_body TEXT,
status VARCHAR(50),
sent_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ডাটাবেসের সাথে সংযোগ করার জন্য JDBC ব্যবহার করা হবে। ডাটাবেসে সংরক্ষণ করার জন্য আপনি Connection, PreparedStatement এবং SQLException ব্যবহার করবেন।
এখন আমরা JavaMail API ব্যবহার করে একটি ইমেইল পাঠানোর পরে লগ ডাটাবেসে সংরক্ষণ করব। নিচে সম্পূর্ণ উদাহরণ দেয়া হলো:
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.sql.*;
public class EmailWithDatabaseLogging {
public static void main(String[] args) {
// SMTP Server Properties
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.port", "587");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
// Gmail SMTP Authentication Details
String username = "your-email@gmail.com";
String password = "your-password";
// Session Setup
Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create MimeMessage
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("your-email@gmail.com"));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient-email@example.com"));
message.setSubject("Test Email");
// Set the email body text
String emailBody = "Hello, this is a test email.";
message.setText(emailBody);
// Send message
Transport.send(message);
// Log email details into database
logEmailToDatabase("your-email@gmail.com", "recipient-email@example.com", "Test Email", emailBody, "Sent");
System.out.println("Email sent and logged successfully!");
} catch (MessagingException e) {
e.printStackTrace();
logEmailToDatabase("your-email@gmail.com", "recipient-email@example.com", "Test Email", "Error sending email", "Failed");
}
}
// Method to log email details into the database
private static void logEmailToDatabase(String sender, String recipient, String subject, String messageBody, String status) {
String jdbcUrl = "jdbc:mysql://localhost:3306/your_database"; // Change to your database URL
String dbUsername = "your-db-username"; // Your database username
String dbPassword = "your-db-password"; // Your database password
String query = "INSERT INTO email_logs (sender_email, recipient_email, subject, message_body, status) VALUES (?, ?, ?, ?, ?)";
try (Connection conn = DriverManager.getConnection(jdbcUrl, dbUsername, dbPassword);
PreparedStatement stmt = conn.prepareStatement(query)) {
stmt.setString(1, sender);
stmt.setString(2, recipient);
stmt.setString(3, subject);
stmt.setString(4, messageBody);
stmt.setString(5, status);
// Execute the query
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Transport.send()
মেথডের মাধ্যমে।jdbc:mysql://localhost:3306/your_database
)।Transactional Emails হল এমন ধরনের ইমেইল যা একটি নির্দিষ্ট কার্যক্রম বা ইভেন্টের সাথে সম্পর্কিত হয়, যেমন একটি পাসওয়ার্ড রিসেট, অর্ডার কনফার্মেশন, নিউজলেটার সাবস্ক্রিপশন, ইত্যাদি। এই ধরনের ইমেইলগুলি সাধারণত ব্যবহারকারী বা গ্রাহক এর সাথে যোগাযোগ রাখার জন্য ব্যবহার করা হয়।
JavaMail API ব্যবহার করে Transactional Emails পাঠানো এবং একটি Database এর সাথে Integration করার জন্য, আপনি সাধারণত Database থেকে প্রয়োজনীয় ডেটা রিট্রিভ করে তা ইমেইল কন্টেন্টে ব্যবহার করবেন। উদাহরণস্বরূপ, আপনি একটি ইমেইল পাঠাতে পারেন যাতে গ্রাহকের নাম, অর্ডার ডিটেলস ইত্যাদি ডেটাবেস থেকে নেওয়া হয় এবং তারপর সেই তথ্য ব্যবহার করে একটি ট্রানজেকশনাল ইমেইল পাঠানো হয়।
প্রথমে, আপনার ডাটাবেস থেকে ইমেইল পাঠানোর জন্য প্রয়োজনীয় ডেটা যেমন গ্রাহকের নাম, ইমেইল ঠিকানা, অর্ডার ডিটেলস ইত্যাদি রিট্রিভ করতে হবে। এটি করার জন্য আপনি JDBC বা ORM frameworks (যেমন Hibernate) ব্যবহার করতে পারেন।
ইমেইল পাঠানোর জন্য JavaMail API ব্যবহার করা হবে, যেখানে ডাটাবেস থেকে রিট্রিভ করা তথ্য (যেমন গ্রাহকের নাম, অর্ডার ইত্যাদি) HTML ইমেইলে ব্যবহার করা হবে।
এখানে একটি উদাহরণ দেওয়া হচ্ছে যেখানে আমরা MySQL ডাটাবেস থেকে ডেটা রিট্রিভ করে একটি ট্রানজেকশনাল ইমেইল পাঠাবো। আমাদের উদাহরণে, আমরা একটি অর্ডার কনফার্মেশন ইমেইল পাঠাবো।
প্রথমে, ডাটাবেস থেকে গ্রাহকের নাম, ইমেইল ঠিকানা এবং অর্ডার ডিটেলস রিট্রিভ করা হবে। নিচে একটি সিম্পল SQL কুয়েরি রয়েছে যা গ্রাহকের তথ্য এবং অর্ডারের ডিটেলস ফেরত দেবে:
SELECT customer_name, email, order_id, order_date, total_amount FROM orders WHERE order_id = 12345;
এখন, JavaMail API ব্যবহার করে Transactional Email পাঠানো হবে, যেখানে ডাটাবেস থেকে রিট্রিভ করা ডেটা HTML কন্টেন্টে ব্যবহার করা হবে।
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.sql.*;
public class SendTransactionalEmail {
public static void main(String[] args) {
// Database Configuration (MySQL)
String dbUrl = "jdbc:mysql://localhost:3306/mydatabase";
String dbUser = "root";
String dbPassword = "password";
String orderId = "12345";
// JDBC to retrieve order details from database
String customerName = "";
String customerEmail = "";
String orderDate = "";
double totalAmount = 0.0;
try {
// Database connection
Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
String query = "SELECT customer_name, email, order_id, order_date, total_amount FROM orders WHERE order_id = ?";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setString(1, orderId);
ResultSet rs = stmt.executeQuery();
// Extract order details
if (rs.next()) {
customerName = rs.getString("customer_name");
customerEmail = rs.getString("email");
orderDate = rs.getString("order_date");
totalAmount = rs.getDouble("total_amount");
}
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
// SMTP Server Properties
String host = "smtp.gmail.com";
String username = "your-email@gmail.com";
String password = "your-app-password"; // Use App Password if 2-Step Verification is enabled
Properties properties = new Properties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", "587");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
// Create a session with authentication
Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create MimeMessage
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("your-email@gmail.com"));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(customerEmail));
message.setSubject("Order Confirmation - Order #" + orderId);
// HTML Content for Transactional Email
String htmlContent = "<html><body>"
+ "<h1>Order Confirmation</h1>"
+ "<p>Dear " + customerName + ",</p>"
+ "<p>Thank you for your order! Below are the details of your recent purchase:</p>"
+ "<table>"
+ "<tr><td><strong>Order ID:</strong></td><td>" + orderId + "</td></tr>"
+ "<tr><td><strong>Order Date:</strong></td><td>" + orderDate + "</td></tr>"
+ "<tr><td><strong>Total Amount:</strong></td><td>$" + totalAmount + "</td></tr>"
+ "</table>"
+ "<p>We hope to serve you again soon!</p>"
+ "</body></html>";
// Set the email content
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent(htmlContent, "text/html");
// Create a MimeMultipart object
MimeMultipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
// Set the content of the message to the multipart object
message.setContent(multipart);
// Send the email
Transport.send(message);
System.out.println("Transactional email sent successfully to: " + customerEmail);
} catch (Exception e) {
e.printStackTrace();
}
}
}
PreparedStatement
ব্যবহার করে একটি নির্দিষ্ট অর্ডারের তথ্য (যেমন গ্রাহকের নাম, ইমেইল ঠিকানা, অর্ডার তারিখ, মোট মূল্য) রিট্রিভ করা হয়েছে।MimeMessage
তৈরি করা হয়েছে এবং HTML কন্টেন্টে অর্ডারের ডেটা যেমন গ্রাহকের নাম, অর্ডার আইডি, অর্ডার তারিখ এবং মোট মূল্য যুক্ত করা হয়েছে।MimeBodyPart
এবং MimeMultipart
ব্যবহার করা হয়েছে।Transport.send()
মেথড ব্যবহার করে ইমেইল পাঠানো হয়েছে, যেখানে গ্রাহকের ইমেইল অ্যাড্রেস এবং HTML কন্টেন্ট সেট করা হয়েছে।JavaMail API ব্যবহার করে Database সংযুক্ত Email প্রেরণ একটি সাধারণ এবং কার্যকর পদ্ধতি, যেখানে আপনি একটি ডাটাবেস থেকে তথ্য বের করে সেগুলোকে ই-মেইলে পাঠাতে পারেন। এটি বিশেষ করে রিপোর্ট বা ডেটাবেস থেকে প্রাপ্ত কাস্টম ডাটা সহ ই-মেইল পাঠানোর জন্য ব্যবহার করা হয়।
এখানে একটি প্রাক্টিকাল উদাহরণ দেয়া হলো যেখানে JavaMail API ব্যবহার করে MySQL ডাটাবেস থেকে ডেটা নিয়ে সেই ডেটা একটি HTML ই-মেইল হিসেবে পাঠানো হচ্ছে।
<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>
এই উদাহরণে আমরা একটি MySQL ডাটাবেস থেকে ডেটা নিয়ে সেই ডেটাকে HTML টেবিল আকারে ই-মেইলে পাঠাবো।
ধরা যাক, আমাদের একটি 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);
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();
}
}
properties.put("mail.smtp.host", "smtp.gmail.com")
এবং অন্যান্য প্রপার্টি সেট করা হয় যেন মেইল সার্ভারের সাথে সঠিকভাবে কানেকশন করা যায়।Session
তৈরি করা হয়েছে যেখানে Gmail SMTP সার্ভার এবং পাসওয়ার্ড অ্যাথেন্টিকেশন ব্যবহৃত হয়েছে।getDatabaseContent()
মেথড ব্যবহার করে MySQL ডাটাবেস থেকে কর্মচারীদের তথ্য (নাম, পদ, এবং বেতন) সংগ্রহ করা হয়েছে। এই তথ্য একটি HTML টেবিল আকারে তৈরি করা হয়েছে।Transport.send(message)
ব্যবহার করে মেইল পাঠানো হয়েছে।getDatabaseContent()
মেথডটি ডাটাবেস থেকে কর্মচারীদের তথ্য সংগ্রহ করে এবং সেই তথ্যকে একটি HTML টেবিলের মধ্যে সন্নিবেশিত করে।MimeBodyPart
এবং MimeMultipart
এর মাধ্যমে HTML আকারে পাঠানো হয়েছে।এই উদাহরণটি দেখিয়েছে কীভাবে JavaMail API এবং JDBC ব্যবহার করে ডাটাবেস সংযুক্ত ই-মেইল পাঠানো যায়। এই পদ্ধতিটি বিভিন্ন ধরনের রিপোর্ট, রিয়েল-টাইম ডেটা অথবা কাস্টম ডেটা পাঠানোর জন্য খুবই কার্যকরী।
Read more