গোমেইল এর পরিচিতি
গোমেইল হল গোল্যাংগে ইমেইল পাঠানোর সহজ এবং দক্ষ প্যাকেজ। এটি ভালো করে পরীক্ষিত এবং ডকুমেন্ট করা হয়েছে।
গোমেইল শুধুমাত্র SMTP সার্ভার ব্যবহারে ইমেইল পাঠাতে পারে। তবে, এর API টি বহুল সহজভাবে লোকাল পোস্টফিক্স, API ব্যবহার করে ইমেইল পাঠানোর মেথড বা ধরন পরিবর্তন করতে পারে।
এটি gopkg.in ব্যবহার করে ভার্সন নিয়ন্ত্রণের জন্য, সেখানে প্রতিটি ভার্সনে অসামঞ্জস্যকর পরিবর্তন থাকবে না।
এটি Go 1.2 বা তার পরের সংস্করণ ব্যবহার করা প্রয়োজন রাখে। Go 1.5 তে, বাইরের নির্ভরণা ব্যবহার করা হবে না।
গোমেইল এর বৈশিষ্ট্য
গোমেইল নিম্নলিখিত বৈশিষ্ট্যসমূহ সমর্থন করে:
- সংযুক্তি
- ইনলাইন ছবি
- 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")
// বব, কোরা, এবং ডানকে ইমেইল পাঠানো
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)
}
// সর্বশেষ 30 সেকেন্ডে কোনও ইমেইল পাঠানো না হলে, SMTP সার্ভারের সাথে সংযোগ বন্ধ করুন
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 নয়)
API বা পোস্টফিক্সের মাধ্যমে ইমেইল পাঠান।
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 কল বা postfix চালানো দ্বারা সম্পাদন করুন।
fmt.Println("From:", from)
fmt.Println("To:", to)
return nil
})
if err := gomail.Send(s, m); err != nil {
panic(err)
}
প্রায়শই জিজ্ঞাসা করা প্রশ্ন
x509: অজানা অধিকারের দ্বারা স্থাপিত সনদনামা
আপনি এই ত্রুটি সম্পর্কে অভিজ্ঞ হন, এটি মানে এমন যে জোর করে Gomail চালিত ক্লায়েন্টটি এসএমটিপি সার্ভার দ্বারা ব্যবহৃত সনদনামাকে অবৈধ মনে করে। প্রতিকারঃ আপনি সার্ভারের সনদনামা শ্রেণী এবং হোস্টনেম এর যাচাই বাইরে ঘিরে যে কোনও পারিক্ষা অবগত করতে পারেন এবং 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 ব্যবহার করুন ইমেইল পাঠানোর জন্য।
}
তবে, দয়া করে মনে রাখবেন এটি অনিরাপত্তা এবং প্রোডাকশন পরিবেশে ব্যবহার করা উচিত নয়।