package mailx import ( "bytes" "encoding/base64" "fmt" "net/smtp" "os" "path" "strings" "time" ) // 邮件发送的封装 // 1. 支持文本 // 2. 支持文件 type Mailx struct { user string password string host string port string auth smtp.Auth } type Attachment struct { Name string ContentType string WithFile bool } type Message struct { Form string To []string Cc []string Bcc []string Subject string Body string // ContentType string ReplyTo string Attachment []Attachment } func NewMailx(user, password, host, port string) *Mailx { m := &Mailx{ user: user, password: password, host: host, port: port, } m.auth = smtp.PlainAuth("", user, password, host) return m } func (m *Mailx) Send(message Message) error { // .Auth() buffer := bytes.NewBuffer(nil) boundary := "YunBoundaryYun" Header := make(map[string]string) // Header["From"] = "BOP<" + message.Form + ">" Header["From"] = m.user if len(message.To) > 0 { str := "" for _, val := range message.To { name := "" s := strings.Split(val, "@") if len(s) > 0 { name = s[0] } str = str + "," + name + "<" + val + ">" } Header["To"] = strings.Trim(str, ",") // Header["To"] = strings.Join(message.To, ",") } if len(message.Cc) > 0 { str := "" for _, val := range message.Cc { name := "" s := strings.Split(val, "@") if len(s) > 0 { name = s[0] } str = str + "," + name + "<" + val + ">" } Header["Cc"] = strings.Trim(str, ",") // Header["Cc"] = strings.Join(message.Cc, ",") } if len(message.Bcc) > 0 { str := "" for _, val := range message.Bcc { name := "" s := strings.Split(val, "@") if len(s) > 0 { name = s[0] } str = str + "," + name + "<" + val + ">" } Header["Bcc"] = strings.Trim(str, ",") // Header["Bcc"] = strings.Join(message.Bcc, ",") } Header["Subject"] = message.Subject Header["Content-Type"] = "multipart/mixed; charset=UTF-8; boundary=" + boundary Header["Date"] = time.Now().String() Header["Reply-To"] = message.ReplyTo Header["X-Priority"] = "3" m.writeHeader(buffer, Header) body := "--" + boundary + "\r\n" // body += "Content-Type: text/plain; charset=UTF-8 \r\n" body += "Content-Type: text/html;charset=utf-8\r\n" body += "Content-Transfer-Encoding:quoted-printable\r\n\r\n" // body += "