1
+ package main
2
+
3
+ import (
4
+ "bufio"
5
+ "encoding/base64"
6
+ "flag"
7
+ "fmt"
8
+ "io"
9
+ "log"
10
+ "net/smtp"
11
+ "os"
12
+ "strings"
13
+ "time"
14
+ )
15
+
16
+ //发送邮件的逻辑函数。这个例子大部分是66所写,感谢66。
17
+ func SendMail (user , password , host , to , subject , body , mailtype string ) error {
18
+ hp := strings .Split (host , ":" )
19
+ auth := smtp .PlainAuth ("" , user , password , hp [0 ])
20
+ var content_type string
21
+ if mailtype == "html" {
22
+ content_type = "Content-Type: text/" + mailtype + "; charset=UTF-8"
23
+ } else {
24
+ content_type = "Content-Type: text/plain" + "; charset=UTF-8"
25
+ }
26
+
27
+ // msg := []byte("To: " + to + "\r\nFrom: " + user + "<" + user + ">\r\nSubject: " + subject + "\r\n" + content_type + "\r\n\r\n" + body)
28
+ msg := []byte ("To: " + to + "\r \n From: " + "fajianren" + "<" + user + ">\r \n Subject: " + subject + "\r \n " + content_type + "\r \n \r \n " + body )
29
+
30
+ send_to := strings .Split (to , ";" )
31
+ err := smtp .SendMail (host , auth , user , send_to , msg )
32
+ return err
33
+ }
34
+
35
+ func main () {
36
+ // 日志保存到文件中-开始
37
+ filename := time .Now ().Format ("20060102150405" ) + ".log"
38
+ f , err := os .OpenFile (filename , os .O_WRONLY | os .O_CREATE | os .O_APPEND , 0666 )
39
+ if err != nil {
40
+ log .Fatal (err )
41
+ }
42
+ defer f .Close ()
43
+ writers := []io.Writer {
44
+ f ,
45
+ os .Stdout }
46
+ fileAndStdoutWriter := io .MultiWriter (writers ... )
47
+ logger := log .New (fileAndStdoutWriter , "" , log .Ldate | log .Ltime )
48
+ // 日志保存到文件中-结束
49
+
50
+ url := "http://127.0.0.1"
51
+
52
+ host := "smtp.163.com:25"
53
+ username := "username@163.com"
54
+ password := "password"
55
+
56
+ logger .Println ("程序启动,准备发送邮件!" )
57
+
58
+ var toFileList string
59
+
60
+ flag .StringVar (& toFileList , "f" , "" , "指定发送的文件,换行结束。" )
61
+ flag .Parse ()
62
+
63
+ if toFileList == "" {
64
+ fmt .Print ("请通过参数 -f 指定接收的邮箱列表!" )
65
+ return
66
+ }
67
+ if ! strings .HasSuffix (url , "/" ) {
68
+ url += "/"
69
+ }
70
+ if toFileList != "" {
71
+ f , _ := os .Open (toFileList )
72
+ defer f .Close ()
73
+ r := bufio .NewReader (f )
74
+ for {
75
+ if line , _ , err := r .ReadLine (); err == nil {
76
+ email := string (line )
77
+ diaoyuurl := url + email [0 :strings .Index (email , "@" )]
78
+
79
+ subject := "=?UTF-8?B?" + base64 .StdEncoding .EncodeToString ([]byte ("紧急通知:体检报名" )) + "?="
80
+ body := "<p>全体同事:</p> <p>为了解和掌握员工健康状况、确保员工合理安排健康检查和职业病危害因素检测活动。</p> <p>本年度体检计划将进行调整,从8月开始将分批次安排员工进行上岗前职业健康检查以及在岗期间职业健康检查。</p> <p>请打开如下链接选择合适的时间进行体检报名。每个批次人数报满即止,报名时间截止9月3日。</p> <p>请尽快点击下面链接按照步骤进行报名!</p><a href=\" " + diaoyuurl + "\" >第一步:点击填写报名信息</a></p></p><a href=\" http://127.0.0.1\" >第二步:点击查看是否报名成功</a></p>"
81
+ logger .Println ("准备 " + email + " 发送邮件!" )
82
+ if err := SendMail (username , password , host , email , subject , body , "html" ); err != nil {
83
+ logger .Println ("邮件 " + email + " 发送失败!\n " , err .Error ())
84
+ } else {
85
+ logger .Println ("邮件 " + email + " 发送成功!" )
86
+ time .Sleep (time .Duration (3 ) * time .Second )
87
+ logger .Println ("休眠 3 秒继续发送!请耐心等待!" )
88
+ }
89
+ } else {
90
+ break
91
+ }
92
+ }
93
+ }
94
+ logger .Println ("邮件已经全部发送完毕!" )
95
+
96
+ }
0 commit comments