func (self *mailHandler) Perform() error { if 0 == len(self.message.To) { return nil } close := func() { if len(self.closers) > 0 { for _, closer := range self.closers { closer.Close() } self.closers = nil } } defer close() var auth smtp.Auth = nil if "" != self.password { switch self.auth_type { case "": if 0 != len(self.password) { if 0 == len(self.user) { self.user = toMailString(&self.message.From) if 0 == len(self.user) { return errors.New("user is missing.") } } auth = smtp.PlainAuth(self.identity, self.user, self.password, self.host) } case "plain", "PLAIN": if 0 == len(self.user) { self.user = toMailString(&self.message.From) if 0 == len(self.user) { return errors.New("user is missing.") } } if 0 == len(self.host) { self.host = self.smtp_server } auth = smtp.PlainAuth(self.identity, self.user, self.password, self.host) case "cram-md5", "CRAM-MD5": auth = smtp.CRAMMD5Auth(self.user, self.password) default: return errors.New("unsupported auth type - " + self.auth_type) } } if e := self.message.Send(self.smtp_server, auth); nil != e { return e } close() for _, nm := range self.remove_files { if e := os.Remove(nm); nil != e { log.Println("[warn] [mail] remove file - '"+nm+"',", e) } } return nil }
func TestMailMessageTextAndHtml(t *testing.T) { if "" == *default_smtp_server { t.Skip("please set 'test.mail_to', 'mail.from' and 'mail.smtp_server'") return } msg := &MailMessage{ From: mail.Address{ Name: "发件人的名字", Address: *default_mail_address}, // if From.Address is empty, Config.DefaultFrom will be used To: []*mail.Address{&mail.Address{ Name: "收件人的名字", Address: *test_mail_to}}, Subject: "这是一个 增 消息", ContentText: "这是一个Text消息", ContentHtml: `<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test</title> </head> <body> 这是一个 Html 消息 </body> </html> `, Attachments: []Attachment{ {Name: "中文名的附件.txt", Content: strings.NewReader("aaaaaoooo")}, }} // bs, e := msg.Bytes() // if nil != e { // t.Error(e) // return // } // t.Log(string(bs)) if e := msg.Send(*default_smtp_server, smtp.PlainAuth(*default_mail_auth_identity, *default_mail_address, *default_mail_auth_password, *default_mail_auth_host)); nil != e { t.Error(e) } }