背景:job执行作业需要同步一些数据,每天需要拉取最新的数据,并发送给负责人
1 自动生成文件 .txt .xls (不用管)
2 写一个能发邮件的接口
3 能做到发送给多个用户
4 能够支持发送多个文件
我用的是网易邮箱
前提:需要开启smtp服务,然后它会给你一个授权码
使用邮箱发送邮件的时候,需要使用授权码,而不是密码
参考文章:Golang 使用gomail包发送邮件
将问题划分为小问题,逐个击破
1.能发送邮件
2.能发送本地文件
3.能发送多个文件
4.多个用户
5.错误处理,完善
能发送邮件
我在网上找到了很好的例子,写的很优美,目测就是能执行的
能发送本地文件
能发送多个文件
参考文章:go使用gomail发送带附件邮件
go 发送邮件 (发送多人,多文件)
package main
import (
"flag"
"fmt"
"gopkg.in/gomail.v2"
"os"
"strings"
)
const (
// 邮件服务器地址
MAIL_HOST = "smtp.163.com"
// 端口
MAIL_PORT = 25
// 发送邮件用户账号
MAIL_USER = "xxxxxxx@163.com"
// 授权密码
MAIL_PWD = "STWMZIxPEPCxxEDTZHJxx"
)
var to *string = flag.String("to", "", "to")
var sub *string = flag.String("sub", "", "subject")
var bd *string = flag.String("bd", "", "body")
var file *string = flag.String("file", "", "i want to send ...")
/*
title 使用gomail发送邮件
@param []string mailAddress 收件人邮箱
@param string subject 邮件主题
@param string body 邮件内容
@param string attaches 附件内容
@return error
*/
func SendGoMail(mailAddress []string, subject string, body string,attaches []string) error{
m := gomail.NewMessage()
nickname := "gomail"
m.SetHeader("From",nickname + "<" + MAIL_USER + ">")
// 发送给多个用户
m.SetHeader("To", mailAddress...)
// 设置邮件主题
m.SetHeader("Subject", subject)
// 设置邮件正文
m.SetBody("text/html", body)
for _,file := range attaches {
_,err := os.Stat(file)
if err != nil {
fmt.Println("Error:",file,"does not exist")
}else{
fmt.Println("uploading",file,"...")
m.Attach(file)
}
}
d := gomail.NewDialer(MAIL_HOST, MAIL_PORT, MAIL_USER, MAIL_PWD)
// 发送邮件
err := d.DialAndSend(m)
return err
}
func main() {
flag.Parse()
if (to != nil) && (file != nil) {
//字符串分割, 使用字符分割出to,file
tos := strings.Split(*to, ";")
files := strings.Split(*file, ";")
err := SendGoMail(tos, *sub, *bd, files)
if err != nil {
fmt.Printf("请求异常,请检查请求参数!")
return
}
}
}
版权声明:本文为weixin_43319452原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。