إرسال البريد الإلكتروني بلغة Go: دليل شامل للمكتبات والأدوات

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

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

ابدأ الدورة

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



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



الحزمة القياسية net/smtp



تحتوي المكتبة القياسية للغة Go على حزمة net/smtp، التي توفر إمكانيات أساسية لإرسال البريد الإلكتروني عبر خادم SMTP. إنها بسيطة، ولكنها تتطلب إنشاء نص الرسالة يدويًا (بما في ذلك الرؤوس وأنواع MIME).



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



package main

import ( "fmt" "net/smtp")

func main() { // بيانات المصادقة from := "your_email@gmail.com" password := "your_app_password" to := []string{"recipient@example.com"}

// خادم SMTP (مثال: Gmail) smtpHost := "smtp.gmail.com" smtpPort := "587"

// نص الرسالة (يجب أن يتضمن الرؤوس) subject := "Subject: مرحبًا من Go!" body := "هذه رسالة اختبارية تم إرسالها باستخدام net/smtp." message := []byte(subject + "" + body)

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

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


هام: بالنسبة لـ Gmail، ستحتاج إلى كلمة مرور التطبيق، وليس كلمة المرور العادية.



إرسال رسالة HTML ورسالة مع مرفقات



لا تعرف حزمة net/smtp كيفية إنشاء رسائل MIME تلقائيًا. بالنسبة لرسائل HTML أو المرفقات، سيتعين عليك إنشاء رؤوس Content-Type يدويًا وتشفير المرفقات بـ base64. هذا أمر مرهق، لذا من الأفضل استخدام مكتبات خارجية للرسائل المعقدة.



المكتبات الخارجية الشائعة لإرسال البريد الإلكتروني بلغة Go



توجد العديد من المكتبات الناضجة التي تبسط العمل بشكل كبير:



  • go-gomail/gomail — واحدة من الأكثر شهرة. تدعم HTML والمرفقات ودمج الصور ومستلمين متعددين.
  • jordan-wright/email — مكتبة خفيفة مع واجهة برمجة تطبيقات مريحة.
  • sendgrid/sendgrid-go — العميل الرسمي لخدمة SendGrid (مناسب للإرسال الجماعي).


مثال باستخدام go-gomail



package main

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

func main() { m := gomail.NewMessage() m.SetHeader("From", "your_email@gmail.com") m.SetHeader("To", "recipient@example.com") m.SetHeader("Subject", "رسالة HTML مع مرفق") m.SetBody("text/html", "<h1>مرحبًا!</h1><p>هذه رسالة <b>HTML</b>.</p>") m.Attach("/path/to/file.pdf") // المرفق

d := gomail.NewDialer("smtp.gmail.com", 587, "your_email@gmail.com", "your_app_password")

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


الإرسال غير المتزامن وتجميع الاتصالات



إذا كنت بحاجة إلى إرسال العديد من الرسائل (على سبيل المثال، بعد تسجيل المستخدمين)، فمن المهم عدم حظر الخيط الرئيسي. تتعامل Go بشكل ممتاز مع التزامن:

توصيات