JavaMail (Jakarta Mail) في Java: دليل شامل مع أمثلة
JavaMail (المعروفة الآن باسم Jakarta Mail) هي مكتبة Java قياسية لإرسال واستقبال ومعالجة البريد الإلكتروني. توفر واجهة برمجة تطبيقات (API) قوية ومرنة للعمل مع بروتوكولات SMTP وPOP3 وIMAP، مما يسمح للمطورين بدمج وظائف البريد في تطبيقاتهم. المكتبة جزء من منصة Jakarta EE (سابقاً Java EE) وتدعمها بنشاط مؤسسة Eclipse Foundation.
لماذا تحتاج JavaMail؟ في التطوير الحديث، تحتاج أي تطبيق مؤسسي تقريباً إلى إرسال إشعارات، تأكيدات تسجيل، إعادة تعيين كلمة المرور، أو إرسال تقارير. تتيح لك JavaMail القيام بذلك برمجياً دون الحاجة إلى خدمات خارجية أو عمليات يدوية. تدعم المكتبة أنواع MIME، المرفقات، رسائل HTML، الإرسال متعدد الخيوط، والتشفير (SSL/TLS).
تشمل الإمكانيات الرئيسية: إرسال الرسائل عبر خادم SMTP (Gmail، Yandex، خادم خاص)، قراءة البريد عبر POP3/IMAP، العمل مع المرفقات (صور، PDF، ملفات مضغوطة)، دعم الرسائل متعددة الأجزاء (multipart)، إدارة العلامات (مقروء، محذوف)، والإعداد الكامل للاتصال عبر Properties.
التثبيت
يتم توزيع JavaMail (Jakarta Mail) عبر Maven Central. للاستخدام، أضف التبعية إلى ملف pom.xml (Maven) أو build.gradle (Gradle).
Maven
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
لـ Jakarta Mail (الإصدار الجديد، بدءاً من Jakarta EE 9):
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>jakarta.mail</artifactId>
<version>2.0.1</version>
</dependency>
Gradle
implementation 'com.sun.mail:javax.mail:1.6.2'
// أو لـ Jakarta Mail:
implementation 'com.sun.mail:jakarta.mail:2.0.1'
إذا كنت تستخدم Java 9+ والنظام المعياري، أضف إلى module-info.java:
requires java.mail;
بداية سريعة — مثال عملي بسيط
إرسال رسالة نصية بسيطة عبر خادم SMTP لـ Gmail (يتطلب تفعيل "الوصول إلى التطبيقات الأقل أماناً" أو استخدام كلمة مرور التطبيق).
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class QuickStart {
public static void main(String[] args) {
// إعدادات SMTP
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
// المصادقة
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("your-email@gmail.com", "your-password");
}
});
try {
// إنشاء الرسالة
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("رسالة اختبار من Java");
message.setText("مرحباً! هذه رسالة اختبارية.");
// الإرسال
Transport.send(message);
System.out.println("تم إرسال الرسالة بنجاح!");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}