مقدمة في Gomail
Gomail هو حزمة بسيطة وفعالة لإرسال البريد الإلكتروني في Golang. وقد تم اختبارها ووثقت بشكل كامل.
Gomail يمكنها فقط إرسال البريد الإلكتروني باستخدام خوادم SMTP. ومع ذلك ، فإن واجهة برمجة التطبيقات (API) مرنة ويمكنها بسهولة تنفيذ أساليب مثل استخدام محلي لـ Postfix ، APIs ، وما إلى ذلك لإرسال الرسائل البريدية.
يستخدم gomail.in لمراقبة الإصدار ، لذلك لن يكون هناك تغييرات غير متوافقة داخل كل إصدار.
يتطلب استخدام Go 1.2 أو الإصدار الأحدث. في Go 1.5، لن يتم استخدام التبعيات الخارجية.
ميزات Gomail
Gomail تدعم الميزات التالية:
- المرفقات
- الصور الداخلية
- النماذج الـ HTML والنصية
- الترميز التلقائي للحروف الخاصة
- SSL و TLS
- إرسال رسائل البريد الإلكتروني المتعددة باستخدام نفس الاتصال بـ SMTP
التثبيت
go get gopkg.in/gomail.v2
مثال
m := gomail.NewMessage()
m.SetHeader("From", "[email protected]")
m.SetHeader("To", "[email protected]", "[email protected]")
m.SetAddressHeader("Cc", "[email protected]", "Dan")
m.SetHeader("Subject", "Hello!")
m.SetBody("text/html", "Hello <b>Bob</b> and <i>Cora</i>!")
m.Attach("/home/Alex/lolcat.jpg")
d := gomail.NewDialer("smtp.example.com", 587, "user", "123456")
// Send an email to Bob, Cora, and Dan.
if err := d.DialAndSend(m); err != nil {
panic(err)
}
مثال (مشغل)
مشغل يستمع إلى قناة ويُرسل جميع الرسائل المستلمة.
ch := make(chan *gomail.Message)
go func() {
d := gomail.NewDialer("smtp.example.com", 587, "user", "123456")
var s gomail.SendCloser
var err error
open := false
for {
select {
case m, ok := <-ch:
if !ok {
return
}
if !open {
if s, err = d.Dial(); err != nil {
panic(err)
}
open = true
}
if err := gomail.Send(s, m); err != nil {
log.Print(err)
}
// قم بإغلاق الاتصال بخادم SMTP إذا لم يتم إرسال بريد إلكتروني في الـ 30 ثانية الأخيرة.
case <-time.After(30 * time.Second):
if open {
if err := s.Close(); err != nil {
panic(err)
}
open = false
}
}
}
}()
// إرسال رسائل البريد الإلكتروني باستخدام هذه القناة في برنامجك.
// قم بإغلاق القناة لإيقاف مشغل البريد الإلكتروني.
close(ch)
مثال (اشتراك بالبريد الإلكتروني)
إرسال الاشتراكات المخصصة بفعالية إلى مجموعة من المستلمين.
// قائمة المستلمين.
var list []struct {
Name string
Address string
}
d := gomail.NewDialer("smtp.example.com", 587, "user", "123456")
s, err := d.Dial()
if err != nil {
panic(err)
}
m := gomail.NewMessage()
for _, r := range list {
m.SetHeader("From", "[email protected]")
m.SetAddressHeader("To", r.Address, r.Name)
m.SetHeader("Subject", "Newsletter #1")
m.SetBody("text/html", fmt.Sprintf("Hello %s!", r.Name))
if err := gomail.Send(s, m); err != nil {
log.Printf("Could not send email to %q: %v", r.Address, err)
}
m.Reset()
}
مثال (بدون مصادقة)
إرسال رسائل بريد إلكتروني باستخدام خادم SMTP محلي.
m := gomail.NewMessage()
m.SetHeader("From", "[email protected]")
m.SetHeader("To", "[email protected]")
m.SetHeader("Subject", "Hello!")
m.SetBody("text/plain", "Hello!")
d := gomail.Dialer{Host: "localhost", Port: 587}
if err := d.DialAndSend(m); err != nil {
panic(err)
}
المثال (بدون SMTP)
إرسال البريد الإلكتروني باستخدام واجهة برمجة التطبيقات أو بوستفيكس.
m := gomail.NewMessage()
m.SetHeader("From", "[email protected]")
m.SetHeader("To", "[email protected]")
m.SetHeader("Subject", "Hello!")
m.SetBody("text/plain", "Hello!")
s := gomail.SendFunc(func(from string, to []string, msg io.WriterTo) error {
// قم بتنفيذ وظيفة إرسال البريد الإلكتروني الخاصة بك عن طريق استدعاء API أو تشغيل بوستفيكس، إلخ.
fmt.Println("From:", from)
fmt.Println("To:", to)
return nil
})
if err := gomail.Send(s, m); err != nil {
panic(err)
}
الأسئلة الشائعة
x509: الشهادة موقعة من سلطة غير معروفة
إذا واجهت هذا الخطأ، فهذا يعني أن العميل الذي يقوم بتشغيل Gomail يعتبر الشهادة المستخدمة من قبل خادم SMTP غير صالحة. كحل بديل، يمكنك تجاوز التحقق من صحة سلسلة شهادة الخادم واسم المضيف عن طريق استخدام SetTLSConfig:
package main
import (
"crypto/tls"
"gopkg.in/gomail.v2"
)
func main() {
d := gomail.NewDialer("smtp.example.com", 587, "user", "123456")
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
// استخدم d لإرسال البريد الإلكتروني.
}
ومع ذلك، يرجى ملاحظة أن هذا غير آمن ويجب تجنب استخدامه في بيئة الإنتاج.