golang邮件转发 (golang发送邮件)

golang接收邮件,golang发送1万条消息

大致分为两步:

一、登录邮件推送控制台,绑定并验证域名,然后查询您的域名配置信息。

二、登录您的域名注册商网站,将您查询的域名配置记录值逐条添加域名解析。

绑定域名及查询域名配置信息

先登录阿里云控制台,点击邮件推送

golang接收邮件,golang发送1万条消息

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

golang接收邮件,golang发送1万条消息

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

golang接收邮件,golang发送1万条消息

然后点击配置

golang接收邮件,golang发送1万条消息

进入域名配置页面

golang接收邮件,golang发送1万条消息

设置域名解析

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

golang接收邮件,golang发送1万条消息

验证域名配置

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

golang接收邮件,golang发送1万条消息

新建发信地址

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

golang接收邮件,golang发送1万条消息

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

golang接收邮件,golang发送1万条消息

设置SMTP密码

golang接收邮件,golang发送1万条消息

golang接收邮件,golang发送1万条消息

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中文社区学习、交流。