Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "crypto/tls"
  5. "fmt"
  6. "log"
  7. "net/smtp"
  8. "strings"
  9. )
  10.  
  11. type Mail struct {
  12. Sender string
  13. To []string
  14. Cc []string
  15. Bcc []string
  16. Subject string
  17. Body string
  18. }
  19.  
  20. type SmtpServer struct {
  21. Host string
  22. Port string
  23. TlsConfig *tls.Config
  24. }
  25.  
  26. func (s *SmtpServer) ServerName() string {
  27. return s.Host + ":" + s.Port
  28. }
  29.  
  30. func (mail *Mail) BuildMessage() string {
  31. header := ""
  32. header += fmt.Sprintf("From: %s\r\n", mail.Sender)
  33. if len(mail.To) > 0 {
  34. header += fmt.Sprintf("To: %s\r\n", strings.Join(mail.To, ";"))
  35. }
  36. if len(mail.Cc) > 0 {
  37. header += fmt.Sprintf("Cc: %s\r\n", strings.Join(mail.Cc, ";"))
  38. }
  39.  
  40. header += fmt.Sprintf("Subject: %s\r\n", mail.Subject)
  41. header += "\r\n" + mail.Body
  42.  
  43. return header
  44. }
  45.  
  46. func main() {
  47. mail := Mail{}
  48. mail.Sender = "abc@gmail.com"
  49. mail.To = []string{"def@yahoo.com", "xyz@outlook.com"}
  50. mail.Cc = []string{"mnp@gmail.com"}
  51. mail.Bcc = []string{"a69@outlook.com"}
  52. mail.Subject = "I am Harry Potter!!"
  53. mail.Body = "Harry Potter and threat to Israel\n\nGood editing!!"
  54.  
  55. messageBody := mail.BuildMessage()
  56.  
  57. smtpServer := SmtpServer{Host: "smtp.gmail.com", Port: "465"}
  58. smtpServer.TlsConfig = &tls.Config{
  59. InsecureSkipVerify: true,
  60. ServerName: smtpServer.Host,
  61. }
  62.  
  63. auth := smtp.PlainAuth("", mail.Sender, "password", smtpServer.Host)
  64.  
  65. conn, err := tls.Dial("tcp", smtpServer.ServerName(), smtpServer.TlsConfig)
  66. if err != nil {
  67. log.Panic(err)
  68. }
  69.  
  70. client, err := smtp.NewClient(conn, smtpServer.Host)
  71. if err != nil {
  72. log.Panic(err)
  73. }
  74.  
  75. // step 1: Use Auth
  76. if err = client.Auth(auth); err != nil {
  77. log.Panic(err)
  78. }
  79.  
  80. // step 2: add all from and to
  81. if err = client.Mail(mail.Sender); err != nil {
  82. log.Panic(err)
  83. }
  84. receivers := append(mail.To, mail.Cc...)
  85. receivers = append(receivers, mail.Bcc...)
  86. for _, k := range receivers {
  87. log.Println("sending to: ", k)
  88. if err = client.Rcpt(k); err != nil {
  89. log.Panic(err)
  90. }
  91. }
  92.  
  93. // Data
  94. w, err := client.Data()
  95. if err != nil {
  96. log.Panic(err)
  97. }
  98.  
  99. _, err = w.Write([]byte(messageBody))
  100. if err != nil {
  101. log.Panic(err)
  102. }
  103.  
  104. err = w.Close()
  105. if err != nil {
  106. log.Panic(err)
  107. }
  108.  
  109. client.Quit()
  110.  
  111. log.Println("Mail sent successfully")
  112.  
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement