گومیل کا تعارف

گومیل گولینگ میں ای میل بھیجنے کے لئے ایک سادہ اور کارآمد پیکیج ہے۔ اس پر مکمل ٹیسٹنگ اور دستاویزات کی گئی ہیں۔

گومیل صرف ایس ایم ٹی پی سرور کا استعمال کرکے ای میل بھیج سکتا ہے۔ البتہ، ای پی آئی، مقامی پوسٹفکس وغیرہ کے استعمال کے طریقے آسانی سے ای میل بھیجنے والے طریقوں کو بھی نافذ کر سکتا ہے۔

اس کی نگرانی کے لیے gopkg.in استعمال ہوتا ہے، لہذا ہر ورژن میں ناہم آہنگ تبدیلیاں نہیں ہوں گی۔

اس کا استعمال گولینگ 1.2 یا اس سے بعد کی ورژن مانگتا ہے۔ گولینگ 1.5 میں بیرونی وابستگیاں نہیں کی جائیں گی۔

گومیل کی خصوصیات

گومیل مندرجہ ذیل خصوصیات کو سپورٹ کرتا ہے:

  • منسلک فائلیں
  • ان لائن تصاویر
  • ایچ ٹی ایم ایل اور ٹیکسٹ ٹیمپلیٹس
  • خود کار خصوصی علامات کو کوڈ کرنا
  • ایس ایس ایل اور ٹی ایل ایس
  • ایک ہی ایس ایم ٹی پی کنکشن کا استعمال کرکے متعدد ای میل بھیجنا

انسٹالیشن

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")

//Bob، Cora، اور 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)
            }
        // ایس ایم پی ٹی سرور سے برقراری بند کریں
        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()
}

## مثال (کوئی تصدیق کی ضرورت نہیں ہے)

مقامی ایس ایم ٹی پی سرور کا استعمال کرکے ای میل بھیجیں۔

```go
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 نہیں)

API یا postfix کا استعمال کرکے ای میلز بھیجیں۔

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 {
    // Implement your email sending function by calling an API or running postfix, etc.
    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 کا استعمال کریں۔
}

لیکن براہ کرم نوٹ کریں کہ یہ غیر محفوظ ہے اور اسے تولیدی ماحول میں استعمال نہیں کیا جانا چاہئے۔