
大致分为两步:
一、登录邮件推送控制台,绑定并验证域名,然后查询您的域名配置信息。
二、登录您的域名注册商网站,将您查询的域名配置记录值逐条添加域名解析。
绑定域名及查询域名配置信息
先登录阿里云控制台,点击邮件推送

点击发信域名,再点击新建域名

再弹出框中填写域名,点击确定, 这里以domain.com域名作为示例,请自行修改为自己的真实域名。

然后点击配置

进入域名配置页面

设置域名解析
按域名配置页面中的相关配置,增加域名解析。一共要增加两个TXT记录、一个MX记录、一个CNAME记录。如下图所示:

验证域名配置
回到发信域名页面,点击验证

新建发信地址
点击发信地址,再点击新建发信地址

然后,发信域名选择刚刚验证通过的域名,如domain.com。账号随便填,如support。回信地址不填。 发信类型选触发邮件

设置SMTP密码


Golang发送邮件
package main
import (
"crypto/tls"
"fmt"
"log"
"net"
"net/smtp"
)
// SendMail 发送邮件
func SendMail(host string, port int, email, password, emailFrom, toEmail, subject, content string) error {
headers := make(map[string]string)
headers["From"] = emailFrom + "<" + email + ">"
headers["To"] = toEmail
headers["Subject"] = subject
headers["Content-Type"] = "text/html; charset=UTF-8"
message := ""
for key, value := range headers {
message += fmt.Sprintf("%s: %s\r\n", key, value)
}
message += "\r\n" + content
auth := smtp.PlainAuth("", email, password, host)
err := sendMailUsingTLS(
fmt.Sprintf("%s:%d", host, port),
auth,
email,
[]string{toEmail},
message,
)
return err
}
//参考net/smtp的func SendMail()
//使用net.Dial连接tls(ssl)端口时, smtp.NewClient()会卡住且不提示err
//len(to) > 1 时, to[1]开始提示是密送
func sendMailUsingTLS(addr string, auth smtp.Auth, from string,
to []string, message string) error {
client, err := createSMTPClient(addr)
if err != nil {
fmt.Println(err.Error())
return err
}
defer client.Close()
if auth != nil {
if ok, _ := client.Extension("AUTH"); ok {
if err := client.Auth(auth); err != nil {
log.Println(err.Error())
return err
}
}
}
if err := client.Mail(from); err != nil {
return err
}
for _, addr := range to {
if err := client.Rcpt(addr); err != nil {
return err
}
}
writeCloser, err := client.Data()
if err != nil {
return err
}
_, err = writeCloser.Write([]byte(message))
if err != nil {
return err
}
err = writeCloser.Close()
if err != nil {
return err
}
return client.Quit()
}
func createSMTPClient(addr string) (*smtp.Client, error) {
conn, err := tls.Dial("tcp", addr, nil)
if err != nil {
fmt.Println(err.Error())
return nil, err
}
host, _, _ := net.SplitHostPort(addr)
return smtp.NewClient(conn, host)
}
func main() {
host := "smtpdm.aliyun.com" // smtp邮箱域名
port := 465
email := "support@domain.com" // 域名邮箱账号,即刚刚设置的发信地址
password := "xxxxxxxx" // SMTP密码
emailFrom := "domain" // 邮件来源
toEmail := "abc@163.com" // 收件人
subject := "你好" // 邮件标题
content := "邮件内容" // 邮件正文
SendMail(host, port, email, password, emailFrom, toEmail, subject, content)
}
本文由shen100原创,Golang中文社区首发,现同步到头条。欢迎转载, 请在正文中标明原文链接及作者,谢谢。也欢迎来Golang中文社区学习、交流。