1.首先安裝依賴包
安裝依賴包: go get github.com/go-gomail/gomail go get github.com/tealeg/xlsx
2.創建main.go
package main
import (
"testing"
"time"
"github.com/tealeg/xlsx" //插件
"log"
"fmt"
)
func main() {
serverHost := "smtp.qq.com"
serverPort := 465
fromEmail := "[email protected]"//發送者郵箱
fromPasswd := "hzt...j"// 授權碼
//myToers :="[email protected]"// "[email protected], [email protected]" 逗號隔開 接收者郵箱
myCCers := "" //"[email protected]" 抄送
subject := "這是主題"
body := `這是正文<br>
<h3>這是標題</h3>
Hello <a href = "www.baidu.com">主頁</a><br>`
//t.Logf("init email.\n")
//InitEmail(myEmail)
//SendEmail(subject, body)
// TimeSettle(subject,body,myEmail)
TimeSettle(subject,body,serverHost,fromEmail,fromPasswd,myCCers,serverPort)
}
func TimeSettle(subject,body,serverHost,fromEmail,fromPasswd,myCCers string,serverPort int) {
//var myT string
d := time.Duration(time.Minute)
t := time.NewTicker(d)
defer t.Stop()
for {
currentTime := time.Now()
if currentTime.Minute() == 17 { // 每個小時中的第17分鐘
// t.Logf("init email.\n")
// InitEmail(myEmail)
// SendEmail(subject, body)
// time.Sleep(time.Minute)
//讀取文件中的郵箱
excelFileName := "C:/Users/huanggang/Desktop/fool.xlsx" //excel文件路徑
fmt.Println(excelFileName)
xlFile, err := xlsx.OpenFile(excelFileName)
if err != nil {
log.Panic(err)
}
for _, sheet := range xlFile.Sheets {
for _, row := range sheet.Rows {
for _, cell := range row.Cells {
//fmt.Printf("%s\n", cell.String())
//讀取出內容後調用發郵件的代碼即可
//fmt.Println("1")
myToers :=cell.String()//append(myT,cell.String()):=cell.String()
// 結構體賦值
myEmail := &EmailParam {
ServerHost: serverHost,
ServerPort: serverPort,
FromEmail: fromEmail,
FromPasswd: fromPasswd,
Toers: myToers,
CCers: myCCers,
}
// 發送郵件
InitEmail(myEmail)
SendEmail(subject, body)
//TimeSettle(subject,body,myEmail)
}
}
}
}
<-t.C
}
}
3.創建goemail.go
package goemail
import (
"strings"
"github.com/go-gomail/gomail" //插件
)
type EmailParam struct {
// ServerHost 郵箱服務器地址,如騰訊企業郵箱爲smtp.exmail.qq.com
ServerHost string
// ServerPort 郵箱服務器端口,如騰訊企業郵箱爲465
ServerPort int
// FromEmail 發件人郵箱地址
FromEmail string
// FromPasswd 發件人郵箱密碼(注意,這裏是明文形式),TODO:如果設置成密文?
FromPasswd string
// Toers 接收者郵件,如有多個,則以英文逗號(“,”)隔開,不能爲空
Toers string
// CCers 抄送者郵件,如有多個,則以英文逗號(“,”)隔開,可以爲空
CCers string
}
// 全局變量,因爲發件人賬號、密碼,需要在發送時才指定
// 注意,由於是小寫,外面的包無法使用
var serverHost, fromEmail, fromPasswd string
var serverPort int
var m *gomail.Message
func InitEmail(ep *EmailParam) {
toers := []string{}
serverHost = ep.ServerHost
serverPort = ep.ServerPort
fromEmail = ep.FromEmail
fromPasswd = ep.FromPasswd
m = gomail.NewMessage()
if len(ep.Toers) == 0 {
return
}
for _, tmp := range strings.Split(ep.Toers, ",") {
toers = append(toers, strings.TrimSpace(tmp))
}
// 收件人可以有多個,故用此方式
m.SetHeader("To", toers...)
//抄送列表
if len(ep.CCers) != 0 {
for _, tmp := range strings.Split(ep.CCers, ",") {
toers = append(toers, strings.TrimSpace(tmp))
}
m.SetHeader("Cc", toers...)
}
// 發件人
// 第三個參數爲發件人別名,如"李大錘",可以爲空(此時則爲郵箱名稱)
m.SetAddressHeader("From", fromEmail, "")
}
// SendEmail body支持html格式字符串
func SendEmail(subject, body string) {
// 主題
m.SetHeader("Subject", subject)
// 正文
m.SetBody("text/html", body)
d := gomail.NewPlainDialer(serverHost, serverPort, fromEmail, fromPasswd)
// 發送
err := d.DialAndSend(m)
if err != nil {
panic(err)
}
}