إرسال البريد الإلكتروني في Kotlin: نظرة عامة على المكتبات وأمثلة عملية
Kotlin هي لغة برمجة حديثة تُستخدم بنشاط لإنشاء تطبيقات الخادم، الواجهة الخلفية، والخدمات المصغرة. القدرة على إرسال رسائل البريد الإلكتروني برمجيًا هي إحدى الوظائف الرئيسية للعديد من المشاريع: الإشعارات، تأكيدات التسجيل، النشرات البريدية. في هذه المقالة، سنشرح كيفية تنظيم إرسال البريد الإلكتروني في Kotlin، وما هي المكتبات التي يجب استخدامها وكيفية إعداد اتصال SMTP.
الطرق الرئيسية لإرسال البريد الإلكتروني في Kotlin
نظرًا لأن Kotlin يعمل على JVM، يمكنك استخدام أي مكتبات Java. الطريقة الأكثر شيوعًا والمجربة هي JavaMail (Jakarta Mail). البديل هو Ktor Client (جزء من إطار عمل Ktor)، والذي يمكنه العمل مع SMTP مباشرة. سننظر في كلا النهجين.
1. إرسال البريد الإلكتروني باستخدام Jakarta Mail (JavaMail)
Jakarta Mail (المعروفة سابقًا باسم JavaMail) هي مكتبة قياسية للعمل مع البريد الإلكتروني في نظام Java البيئي. إنها مناسبة تمامًا لـ Kotlin لأنها متوافقة تمامًا مع JVM. ستحتاج إلى إضافة التبعية في ملف build.gradle.kts:
dependencies { implementation("com.sun.mail:jakarta.mail:2.0.1")}بعد إضافة المكتبة، يمكنك كتابة دالة إرسال بسيطة:
import jakarta.mail.*import jakarta.mail.internet.InternetAddressimport jakarta.mail.internet.MimeMessageimport java.util.*
fun sendEmail( host: String, port: Int, username: String, password: String, from: String, to: String, subject: String, body: String) { val props = Properties().apply { put("mail.smtp.host", host) put("mail.smtp.port", port.toString()) put("mail.smtp.auth", "true") put("mail.smtp.starttls.enable", "true") }
val session = Session.getInstance(props, object : Authenticator() { override fun getPasswordAuthentication(): PasswordAuthentication { return PasswordAuthentication(username, password) } })
try { val message = MimeMessage(session).apply { setFrom(InternetAddress(from)) setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)) setSubject(subject) setText(body) } Transport.send(message) println("تم إرسال البريد الإلكتروني بنجاح إلى $to") } catch (e: MessagingException) { println("خطأ في الإرسال: ${e.message}") }}استدعاء الدالة:
fun main() { sendEmail( host = "smtp.gmail.com", port = 587, username = "youremail@gmail.com", password = "your-app-password", from = "youremail@gmail.com", to = "recipient@example.com", subject = "مرحبًا من Kotlin!", body = "هذه رسالة اختبارية تم إرسالها عبر Kotlin و Jakarta Mail." )}2. إرسال البريد الإلكتروني مع المرفقات (Jakarta Mail)
لإرسال بريد إلكتروني مع ملف، تحتاج إلى استخدام MimeBodyPart و MimeMultipart:
import jakarta.mail.internet.MimeBodyPartimport jakarta.mail.internet.MimeMultipartimport java.io.File
fun sendEmailWithAttachment( session: Session, from: String, to: String, subject: String, body: String, attachmentPath: String) { val message = MimeMessage(session).apply { setFrom(InternetAddress(from)) setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)) setSubject(subject) }
// الجزء النصي val textPart = MimeBodyPart().apply { setText(body) }
// المرفق val attachmentPart = MimeBodyPart().apply { attachFile(File(attachmentPath)) }
// تجميع multipart val multipart = MimeMultipart().apply { addBodyPart(textPart)