Skip to content

Latest commit

 

History

History
43 lines (41 loc) · 1.55 KB

20211003_send_email_in_go.md

File metadata and controls

43 lines (41 loc) · 1.55 KB

Gưi email trong Go

Mặc dù mình có tạm message với các headers cho To, CC, BCC nhưng đối với function smtp.SendMail, nếu mình sử dụng to thay cho rcpts nội dung email vẫn có đủ To, CC, BCC và email chỉ được gửi đến những địa chỉ email có trong biến to chứ không gửi đến những người có trong biến ccbcc

func SendEmailMessage(to, cc, bcc, body, subject string) bool {
	port := Getenv("SMTP_PORT", "587")
	smtpServerHost := Getenv("SMTP_SERVER", "smtp.gmail.com")
	senderEmail := Getenv("SMTP_USERNAME", "")
	senderPassword := Getenv("SMTP_PASSWORD", "")
​
	if smtpServerHost == "" || senderEmail == "" || senderPassword == "" {
		log.Println("Error: sender info is required")
		return false
	}
​
	headers := "From: " + senderEmail
	headers = headers + "\nTo: " + to + ";"
	rcpts := to
	if len(cc) > 0 {
		headers += "\nCc: " + cc + ";"
		rcpts += "," + cc
	}
	if len(bcc) > 0 {
		headers += "\nBcc: " + bcc + ";"
		rcpts += "," + bcc
	}
	headers = strings.ReplaceAll(headers, ",", ";")
​
	smtpServer := smtpServerHost + ":" + port
	mime := "Content-Type: text/html; charset=UTF-8"
	body = string(markdown.ToHTML([]byte(body), nil, nil))
	msg := []byte(headers + "\nSubject: " + subject + "\n" + mime + "\n" + body + "\n")
	auth := smtp.PlainAuth("", senderEmail, senderPassword, smtpServerHost)
	err := smtp.SendMail(smtpServer, auth, senderEmail, strings.Split(rcpts, ","), msg)
​
	if err != nil {
		log.Printf("Error:  %v", err)
		return false
	}
	return true
}