go 发送邮件 (支持发送多人、多文件)

背景: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版权协议,转载请附上原文出处链接和本声明。