白云岛资源网 Design By www.pvray.com
最近看了下go发送smtp邮件,于是总结一下
简单示例
先上一个最简单的代码 (网上搂的代码改了改)
package main import ( "fmt" "net/smtp" ) const ( // 邮件服务器地址 SMTP_MAIL_HOST = "smtp.qq.com" // 端口 SMTP_MAIL_PORT = "587" // 发送邮件用户账号 SMTP_MAIL_USER = "1348581672@qq.com" // 授权密码 SMTP_MAIL_PWD = "xxxx" // 发送邮件昵称 SMTP_MAIL_NICKNAME = "lewis" ) func main() { //声明err, subject,body类型,并为address,auth以及contentType赋值, //subeject是主题,body是邮件内容, address是收件人 var err error var subject, body string address := "lewissunp@outlook.com" auth := smtp.PlainAuth("", SMTP_MAIL_USER, SMTP_MAIL_PWD, SMTP_MAIL_HOST) contentType := "Content-Type: text/html; charset=UTF-8" //要发送的消息,可以直接写在[]bytes里,但是看着太乱,因此使用格式化 s := fmt.Sprintf("To:%s\r\nFrom:%s<%s>\r\nSubject:%s\r\n%s\r\n\r\n%s", address, SMTP_MAIL_NICKNAME, SMTP_MAIL_USER, subject, contentType, body) msg := []byte(s) //邮件服务地址格式是"host:port",因此把addr格式化为这个格式,直接赋值也行。 addr := fmt.Sprintf("%s:%s", SMTP_MAIL_HOST, SMTP_MAIL_PORT) //发送邮件 err = smtp.SendMail(addr, auth, SMTP_MAIL_USER, []string{address}, msg) if err != nil { fmt.Println(err) } else { fmt.Println("send email succeed") } }
收到邮件截图
简要说明
- const中SMTP_MAIL_PWD 是我申请开通qq邮箱的smtp服务时,腾讯发来的密码,并不是qq邮箱的密码。
- 可以看到邮件截图中显示(无主题),邮件也没内容,因为subeject和body我只声明了,但并未赋值,因此这俩为空。
- contentType设为text/html,当然也有其他格式。
- 其余的注释里应该说的比较清楚了
稍加改进
我们来加点常用的功能
- 收件人有多个
- 当然还得设置主题和邮件内容
- 发邮件功能单独封装为一个函数,然后main里调用
package main import ( "fmt" "net/smtp" ) const ( // 邮件服务器地址 SMTP_MAIL_HOST = "smtp.qq.com" // 端口 SMTP_MAIL_PORT = "587" // 发送邮件用户账号 SMTP_MAIL_USER = "1348581672@qq.com" // 授权密码 SMTP_MAIL_PWD = "jhguvicvhrnwgaeh" // 发送邮件昵称 SMTP_MAIL_NICKNAME = "lewis" ) func main() { address := []string{"norton_s@qq.com", "lewissunp@outlook.com"} subject := "test mail" body := `<br>hello!</br> <br>this is a test email, pls ignore it.</br>` SendMail(address, subject, body) } func SendMail(address []string, subject, body string) (err error) { // 认证, content-type设置 auth := smtp.PlainAuth("", SMTP_MAIL_USER, SMTP_MAIL_PWD, SMTP_MAIL_HOST) contentType := "Content-Type: text/html; charset=UTF-8" // 因为收件人,即address有多个,所以需要遍历,挨个发送 for _, to := range address { s := fmt.Sprintf("To:%s\r\nFrom:%s<%s>\r\nSubject:%s\r\n%s\r\n\r\n%s", to, SMTP_MAIL_NICKNAME, SMTP_MAIL_USER, subject, contentType, body) msg := []byte(s) addr := fmt.Sprintf("%s:%s", SMTP_MAIL_HOST, SMTP_MAIL_PORT) err = smtp.SendMail(addr, auth, SMTP_MAIL_USER, []string{to}, msg) if err != nil { return err } } return err }
收到邮件截图
简要说明
- 收件人是两个,都收到了
- subject有了
- body使用了br标签换行,直接在``内化换行试了下不行
- 另外如果发邮件报错:550 Mailbox not found or access denied,百度会发现是:您要发送的收件人短时间内收到大量邮件,为避免受到恶意攻击,暂时禁止向该收件人发信,但其实收件人的地址不存在时也会报这个错误。
白云岛资源网 Design By www.pvray.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
白云岛资源网 Design By www.pvray.com
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。