1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- // Package emailer for send email messages text or html formats
- package emailer
- import (
- "encoding/base64"
- "fmt"
- "net/smtp"
- "strings"
- "time"
- )
- // encode header of email message
- func mailEncodeHeader(str string) string {
- return "=?UTF-8?B?" + base64.StdEncoding.EncodeToString([]byte(str)) + "?="
- }
- // encode header email field
- func mailEncodeEmail(email string) string {
- return mailEncodeHeader(email) + " <" + email + ">"
- }
- // join encoded emails (receivers) for header field "To"
- func mailJoinReceivers(receivers []string) string {
- arr := make([]string, len(receivers))
- for i, v := range receivers {
- arr[i] = mailEncodeEmail(v)
- }
- return strings.Join(arr, ",")
- }
- // SendEmail send email message with text/plain mime type
- func SendEmail(subject, message string, receivers []string, userName, userPassword, host, identity string, port int16) (err error) {
- auth := smtp.PlainAuth(identity, userName, userPassword, host)
- msg := []byte("To: " + mailJoinReceivers(receivers) + "\r\n" +
- "Date:" + time.Now().Format("Mon 2 Jan 2006 15:04:05 -0700") + "\r\n" +
- "From: " + mailEncodeEmail(userName) + "\r\n" +
- "Subject: " + mailEncodeHeader(subject) + "\r\n" +
- "Content-Type: text/plain; charset=utf-8\r\n" +
- "\r\n" + message + "\r\n")
- return smtp.SendMail(fmt.Sprintf("%v:%v", host, port), auth, userName, receivers, msg)
- }
- // SendEmailHTML send email message with text/html mime type
- func SendEmailHTML(subject, message string, receivers []string, userName, userPassword, host, identity string, port int16) (err error) {
- auth := smtp.PlainAuth(identity, userName, userPassword, host)
- msg := []byte("To: " + mailJoinReceivers(receivers) + "\r\n" +
- "Date:" + time.Now().Format("Mon 2 Jan 2006 15:04:05 -0700") + "\r\n" +
- "From: " + mailEncodeEmail(userName) + "\r\n" +
- "Subject: " + mailEncodeHeader(subject) + "\r\n" +
- "Content-Type: text/html; charset=utf-8\r\n" +
- "\r\n" + message + "\r\n")
- return smtp.SendMail(fmt.Sprintf("%v:%v", host, port), auth, userName, receivers, msg)
- }
|