正在显示
1 个修改的文件
包含
77 行增加
和
0 行删除
goemail/email.go
0 → 100644
1 | +package goemail | ||
2 | + | ||
3 | +import ( | ||
4 | + "bytes" | ||
5 | + "encoding/base64" | ||
6 | + "fmt" | ||
7 | + "net/smtp" | ||
8 | + "strings" | ||
9 | + "time" | ||
10 | +) | ||
11 | + | ||
12 | +type EmailHeader struct { | ||
13 | + Key string | ||
14 | + Value string | ||
15 | +} | ||
16 | + | ||
17 | +type EmailMessage struct { | ||
18 | + FromEmail string //发件人邮箱地址 | ||
19 | + Header []EmailHeader //TODO | ||
20 | + Toers []string //邮件接收人,如有多个,则以英文逗号(“,”)隔开,不能为空 | ||
21 | + Subject string //主题 | ||
22 | + BodyContentType string | ||
23 | + Body []byte //内容 | ||
24 | + //TODO Copyers []string //邮件抄送人,如有多个,则以英文逗号(“,”)隔开,不能为空 | ||
25 | + //TODO附加 | ||
26 | +} | ||
27 | + | ||
28 | +func (e *EmailMessage) AddToer(v string) { | ||
29 | + e.Toers = append(e.Toers, v) | ||
30 | +} | ||
31 | + | ||
32 | +func (e *EmailMessage) SetBody(v []byte) { | ||
33 | + e.Body = v | ||
34 | +} | ||
35 | +func (e *EmailMessage) Bytes() []byte { | ||
36 | + buf := bytes.NewBuffer(nil) | ||
37 | + buf.WriteString(fmt.Sprintf("From:%s \r\n", e.FromEmail)) | ||
38 | + t := time.Now().Format(time.RFC1123Z) | ||
39 | + buf.WriteString(fmt.Sprintf("Date:%s \r\n", t)) | ||
40 | + buf.WriteString(fmt.Sprintf("To:%s \r\n", strings.Join(e.Toers, ","))) | ||
41 | + var subject = "=?UTF-8?B?" + base64.StdEncoding.EncodeToString([]byte(e.Subject)) + "?=" | ||
42 | + buf.WriteString("Subject: " + subject + "\r\n") | ||
43 | + buf.WriteString("MIME-Version: 1.0\r\n") | ||
44 | + //TODO 添加header | ||
45 | + boundary := "THIS_IS_BOUNDARY" | ||
46 | + buf.WriteString("Content-Type: multipart/mixed; boundary=" + boundary + "\r\n") | ||
47 | + buf.WriteString("\r\n--" + boundary + "\r\n") | ||
48 | + buf.WriteString(fmt.Sprintf("Content-Type: %s; charset=utf-8\r\n\r\n", e.BodyContentType)) | ||
49 | + buf.Write(e.Body) | ||
50 | + buf.WriteString("\r\n") | ||
51 | + buf.WriteString("--" + boundary + "--") | ||
52 | + //TODO添加附件 | ||
53 | + return buf.Bytes() | ||
54 | +} | ||
55 | + | ||
56 | +// func (e *EmailMessage) To() []string { | ||
57 | +// return e.Toers | ||
58 | +// } | ||
59 | +func NewHtmlEmail() *EmailMessage { | ||
60 | + return nil | ||
61 | +} | ||
62 | + | ||
63 | +func (e *EmailMessage) AddHeader(key string, value string) EmailHeader { | ||
64 | + newHeader := EmailHeader{Key: key, Value: value} | ||
65 | + e.Header = append(e.Header, newHeader) | ||
66 | + return newHeader | ||
67 | +} | ||
68 | + | ||
69 | +// ServerHost string //邮箱服务器地址 | ||
70 | +// ServerPort int //邮箱服务器的端口 | ||
71 | +// FromPasswd string //发件人邮箱密码 | ||
72 | +func NewSmtpAuth(fromEmail string, pwd string, host string) smtp.Auth { | ||
73 | + return smtp.PlainAuth("", fromEmail, pwd, host) | ||
74 | +} | ||
75 | +func Send(addr string, auth smtp.Auth, m *EmailMessage) error { | ||
76 | + return smtp.SendMail(addr, auth, m.FromEmail, m.Toers, m.Bytes()) | ||
77 | +} |
-
请 注册 或 登录 后发表评论