go语言发送邮件email,并支持附件并直接在正文中展示图片

package utils

import (
	"bytes"
	"errors"
	"fmt"
	"net/smtp"
	"regexp"
	"strings"
)

const (
	addr = "mail-out.sys.xxx.com:25"
)

// IsEmailValid 函数用于判断给定的字符串是否为有效的电子邮件地址
// 参数 email 为待验证的电子邮件地址
// 返回值为 bool 类型,如果电子邮件地址有效则返回 true,否则返回 false
func IsEmailValid(email string) bool {
	// Email regex pattern
	pattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`

	// Compile the regex pattern
	regex := regexp.MustCompile(pattern)

	// Check if the email matches the pattern
	return regex.MatchString(email)
}

// SendMail 使用服务发送邮件
func SendEmail(sender, to, cc, subject, body string, annex []string) error {
	toList := strings.Split(to, ";")
	if len(cc) > 0 {
		toList = append(toList, strings.Split(cc, ";")...)
	}
	for _, v := range toList {
		if !IsEmailValid(v) {
			return errors.New(v + " email format error")
		}
	}
	mime := bytes.NewBuffer(nil)
	//设置邮件
	mime.WriteString(fmt.Sprintf("From: %s\r\nTo: %s\r\nCC: %s\r\nSubject: %s\r\nMIME-Version: 1.0\r\n",
		sender,
		strings.ReplaceAll(to, ";", "\r\n ,"),
		strings.ReplaceAll(cc, ";", "\r\n ,"),
		subject))
	//邮件普通Text正文
	mime.WriteString("Content-Type: multipart/mixed; boundary=boundary\r\n\r\n")

	for a := range annex {
		mime.WriteString("--boundary\r\n")
		mime.WriteString(fmt.Sprintf("Content-ID: <image%d>\r\n", a))
		mime.WriteString(fmt.Sprintf("Content-Type: image/png;name=\"image%d\"\r\n", a))
		mime.WriteString("Content-Transfer-Encoding: base64\r\n")
		mime.WriteString(fmt.Sprintf("Content-Disposition: inline; filename=image%d.png\r\n\r\n", a))
		mime.WriteString(annex[a] + "\r\n")
	}

	mime.WriteString("--boundary\r\n")
	//邮件普通HTML正文
	mime.WriteString("Content-Type: text/html; charset=utf-8\r\n\r\n")
	mime.WriteString(body + "\r\n\r\n")
	//邮件结束
	return smtp.SendMail(addr, nil, sender, toList, mime.Bytes())
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值