Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "crypto/tls"
- "fmt"
- "log"
- "net/smtp"
- "strings"
- )
- type Mail struct {
- Sender string
- To []string
- Cc []string
- Bcc []string
- Subject string
- Body string
- }
- type SmtpServer struct {
- Host string
- Port string
- TlsConfig *tls.Config
- }
- func (s *SmtpServer) ServerName() string {
- return s.Host + ":" + s.Port
- }
- func (mail *Mail) BuildMessage() string {
- header := ""
- header += fmt.Sprintf("From: %s\r\n", mail.Sender)
- if len(mail.To) > 0 {
- header += fmt.Sprintf("To: %s\r\n", strings.Join(mail.To, ";"))
- }
- if len(mail.Cc) > 0 {
- header += fmt.Sprintf("Cc: %s\r\n", strings.Join(mail.Cc, ";"))
- }
- header += fmt.Sprintf("Subject: %s\r\n", mail.Subject)
- header += "\r\n" + mail.Body
- return header
- }
- func main() {
- mail := Mail{}
- mail.Sender = "abc@gmail.com"
- mail.To = []string{"def@yahoo.com", "xyz@outlook.com"}
- mail.Cc = []string{"mnp@gmail.com"}
- mail.Bcc = []string{"a69@outlook.com"}
- mail.Subject = "I am Harry Potter!!"
- mail.Body = "Harry Potter and threat to Israel\n\nGood editing!!"
- messageBody := mail.BuildMessage()
- smtpServer := SmtpServer{Host: "smtp.gmail.com", Port: "465"}
- smtpServer.TlsConfig = &tls.Config{
- InsecureSkipVerify: true,
- ServerName: smtpServer.Host,
- }
- auth := smtp.PlainAuth("", mail.Sender, "password", smtpServer.Host)
- conn, err := tls.Dial("tcp", smtpServer.ServerName(), smtpServer.TlsConfig)
- if err != nil {
- log.Panic(err)
- }
- client, err := smtp.NewClient(conn, smtpServer.Host)
- if err != nil {
- log.Panic(err)
- }
- // step 1: Use Auth
- if err = client.Auth(auth); err != nil {
- log.Panic(err)
- }
- // step 2: add all from and to
- if err = client.Mail(mail.Sender); err != nil {
- log.Panic(err)
- }
- receivers := append(mail.To, mail.Cc...)
- receivers = append(receivers, mail.Bcc...)
- for _, k := range receivers {
- log.Println("sending to: ", k)
- if err = client.Rcpt(k); err != nil {
- log.Panic(err)
- }
- }
- // Data
- w, err := client.Data()
- if err != nil {
- log.Panic(err)
- }
- _, err = w.Write([]byte(messageBody))
- if err != nil {
- log.Panic(err)
- }
- err = w.Close()
- if err != nil {
- log.Panic(err)
- }
- client.Quit()
- log.Println("Mail sent successfully")
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement