إرسال البريد الإلكتروني بلغة Go (Golang): المكتبات وأمثلة الكود

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

إرسال البريد الإلكتروني بلغة Go (Golang): المكتبات وأمثلة الكود



يُعد إرسال رسائل البريد الإلكتروني إحدى المهام الأساسية لأي تطبيق ويب: تسجيل المستخدمين، إعادة تعيين كلمة المرور، الإشعارات والنشرات البريدية. في لغة Go (Golang)، توجد أدوات قياسية للعمل مع SMTP، بالإضافة إلى مكتبات خارجية قوية تُبسّط إرسال الرسائل بقوالب HTML والمرفقات ودعم خدمات البريد المختلفة. في هذه المقالة، سنستعرض بالتفصيل كيفية إرسال البريد الإلكتروني بلغة Go، ونتناول المكتبات الشائعة مع أمثلة عملية للكود.



المكتبة القياسية net/smtp



حزمة net/smtp مضمنة في المكتبة القياسية للغة Go وتوفر مجموعة أدنى من الوظائف لإرسال الرسائل عبر خادم SMTP. وهي مناسبة للرسائل النصية البسيطة، ولكنها تتطلب تشكيل الرؤوس ونص الرسالة يدويًا وفقًا لمعيار RFC 5322.



مثال لإرسال رسالة نصية بسيطة:



package main

import ( "fmt" "net/smtp")

func main() { // بيانات الاتصال بخادم SMTP smtpHost := "smtp.example.com" smtpPort := "587" from := "sender@example.com" password := "your_password" to := []string{"recipient@example.com"}

// تشكيل نص الرسالة (مع الرؤوس إلزاميًا) subject := "Subject: مرحبًا من Go!" mime := "MIME-version: 1.0;Content-Type: text/plain; charset=\\"UTF-8\\";

" body := "هذه رسالة اختبارية أُرسلت باستخدام Go." msg := []byte(subject + mime + body)

// المصادقة auth := smtp.PlainAuth("", from, password, smtpHost)

// الإرسال err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, msg) if err != nil { fmt.Println("خطأ في الإرسال:", err) return } fmt.Println("تم إرسال الرسالة بنجاح!")}


قيود net/smtp:

  • لا يدعم المرفقات دون ترميز Base64 يدويًا.
  • يتطلب تنسيق رؤوس MIME يدويًا.
  • غير مناسب لإرسال رسائل HTML مع الصور.


مكتبة gomail/v2



إحدى أشهر المكتبات الخارجية لإرسال البريد الإلكتروني بلغة Go هي gomail (الحزمة gopkg.in/mail.v2). توفر واجهة برمجة تطبيقات سهلة للعمل مع الرسائل: دعم المرفقات، وأجزاء HTML والنص، وإعداد اتصال SMTP، بالإضافة إلى إمكانية الإرسال عبر SSL/TLS.



التثبيت:

go get gopkg.in/mail.v2


مثال لإرسال رسالة HTML مع مرفق:



package main

import ( "fmt" "gopkg.in/mail.v2")

func main() { m := mail.NewMessage() m.SetHeader("From", "sender@example.com") m.SetHeader("To", "recipient@example.com") m.SetHeader("Subject", "رسالة HTML مع مرفق")

// أجزاء بديلة: نص وHTML m.SetBody("text/plain", "إذا كنت ترى هذا النص، فإن عميلك لا يدعم HTML.") m.AddAlternative("text/html", "<h1>مرحبًا!</h1><p>هذه نسخة HTML من الرسالة.</p>")

// إضافة مرفق m.Attach("/path/to/file.pdf")

// إعداد عميل SMTP d := mail.NewDialer("smtp.example.com", 587, "sender@example.com", "your_password") d.StartTLSPolicy = mail.MandatoryStartTLS

if err := d.DialAndSend(m); err != nil { fmt.Println("خطأ:", err) return } fmt.Println("تم إرسال الرسالة!")}


مزايا gomail:

  • واجهة برمجة تطبيقات بسيطة وبديهية.
  • تشكيل تلقائي لرؤوس MIME.
  • دعم المرفقات والصور المضمنة (CID).
  • العمل مع SSL/TLS وStartTLS.


مكتبة go-smtp (emersion/go-smtp)



مكتبة go-smtp من emersion هي بديل منخفض المستوى يمنح تحكمًا كاملاً في اتصال SMTP. وهي مفيدة إذا كنت

توصيات