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

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

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

ابدأ الدورة

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



في تطوير الويب الحديث، يظل إرسال رسائل البريد الإلكتروني إحدى المهام الرئيسية للإشعارات والتسجيلات واستعادة كلمات المرور والنشرات البريدية. تقدم لغة Go (Golang) عدة طرق فعالة للتكامل مع خوادم SMTP. في هذه المقالة، سنشرح المكتبة القياسية net/smtp، والمكتبة الخارجية الشهيرة gomail، والمكتبة المتقدمة go-smtp. ستتعلم كيفية إرسال رسائل نصية بسيطة ورسائل HTML، وإضافة المرفقات، وتكوين الاتصال الآمن.



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



حزمة net/smtp مدمجة في Go ولا تتطلب تثبيتًا إضافيًا. توفر وظائف أساسية للاتصال بخادم SMTP والمصادقة وإرسال الرسائل. ومع ذلك، للعمل مع المتطلبات الحديثة (HTML، المرفقات، SSL/TLS) ستحتاج إلى كتابة المزيد من الكود.



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



package main

import ( "fmt" "net/smtp")

func main() { // إعدادات خادم SMTP (مثال لـ Gmail) smtpHost := "smtp.gmail.com" smtpPort := "587" from := "your_email@gmail.com" password := "your_app_password" to := []string{"recipient@example.com"}

// الموضوع ونص الرسالة (أبسط تنسيق) subject := "Subject: رسالة اختبار من Go" body := "مرحبًا! هذه الرسالة تم إرسالها باستخدام net/smtp." msg := []byte(subject + "" + 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("تم إرسال الرسالة بنجاح!")}


هام: بالنسبة لـ Gmail، يجب استخدام كلمة مرور التطبيق (وليس كلمة المرور الرئيسية) والسماح بالوصول للتطبيقات غير الموثوقة. بالنسبة للخدمات الأخرى (Yandex، Mail.ru) قد تختلف المعلمات.



إرسال رسالة HTML عبر net/smtp



لإرسال رسالة HTML، يجب تحديد العنوان Content-Type بشكل صريح:



package main

import ( "fmt" "net/smtp")

func main() { smtpHost := "smtp.gmail.com" smtpPort := "587" from := "your_email@gmail.com" password := "your_app_password" to := []string{"recipient@example.com"}

// تكوين عناوين MIME headers := make(map[string]string) headers["From"] = from headers["To"] = "recipient@example.com" headers["Subject"] = "رسالة HTML من Go" headers["MIME-Version"] = "1.0" headers["Content-Type"] = "text/html; charset=\\"UTF-8\\""

// تجميع الرسالة message := "" for k, v := range headers { message += fmt.Sprintf("%s: %s\\r", k, v) } message += "\\r" + "<h1>مرحبًا!</h1><p>هذه رسالة <b>HTML</b>.</p>"

auth := smtp.PlainAuth("", from, password, smtpHost) err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, []byte(message)) if err != nil { fmt.Println("خطأ:", err) }}


عيب net/smtp هو عدم دعم المرفقات والبنية المعقدة متعددة المكونات للرسالة. لمثل هذه المهام، من الأفضل استخدام مكتبات متخصصة.



2. مكتبة gomail



Gomail هي واحدة من أشهر المكتبات الخارجية لإرسال البريد الإلكتروني بلغة Go. توفر واجهة برمجة تطبيقات (API) سهلة الاستخدام، ودعم HTML، والمرفقات، وتضمين الصور، و SSL/TLS، والعناوين القابلة للتخصيص.



التثبيت



go get gopkg.in/mail.v2


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



package main

import ( "crypto/tls" "fmt" gomail "gopkg.in/mail.v2")

func main() { m := gomail.NewMessage(

توصيات