GO通过SMTP协议发送邮件

打印 上一主题 下一主题

主题 1034|帖子 1034|积分 3102

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
什么是SMTP协议

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是用于发送邮件的协议。当一个邮件服务器需要发送邮件给另一个邮件服务器时,它会使用SMTP协议与目的服务器建立连接,并传输邮件内容。SMTP协议的通讯过程大致如下:
1. 建立连接:发送服务器与目的服务器通过TCP/IP协议建立连接。默认环境下,SMTP服务器使用TCP端口25。
2. 握手和身份验证:发送服务器与目的服务器举行握手,确认两边预备好举行通讯。握手过程中,发送服务器大概会提供身份验证信息,以确保身份的合法性。
3. 发送邮件:发送服务器将邮件的源地点、目的地点、邮件内容等信息通过SMTP协议传输给目的服务器。通常环境下,邮件内容会颠末编码和压缩,以减少传输的数据量。
4. 吸取邮件:目的服务器吸取到发送服务器传输的邮件后,会举行存储和处理,包括将邮件存储到适当的邮箱中,并关照邮件的吸取方。
5. 断开连接:邮件传输完成后,发送服务器与目的服务器断开连接。

GO通过SMTP协议发送邮件

可以直接使用GO的"net/smtp"包来发送邮件
  1. type EmailInfo struct {
  2.         From        string   // 发件人邮箱
  3.         FromAlias   string   // 发件人别名
  4.         Password    string   // 发件人邮箱密码
  5.         Host        string   // 邮件服务ip
  6.         Port        int      // 邮件服务port
  7.         To          []string // 收件人邮箱
  8.         Cc          []string // 抄送邮箱
  9.         Bcc         []string // 密送邮箱
  10.         Subject     string   // 邮件主题
  11.         Content     string   // 邮件内容
  12.         ContentType string   // 邮件内容类型,html/string
  13. }
  14. // smtp发送邮件
  15. func SmtpSend(email EmailInfo) error {
  16.         // 认证信息
  17.         auth := smtp.PlainAuth("", email.From, email.Password, email.Host)
  18.         addr := fmt.Sprintf("%s:%d", email.Host, email.Port)
  19.         // 配置邮件内容类型,默认text/plain
  20.         contentType := "Content-Type: text/plain; charset=UTF-8"
  21.         if email.ContentType == "html" {
  22.                 contentType = "Content-Type: text/html; charset=UTF-8"
  23.         }
  24.         msg := "To: " + strings.Join(email.To, ",") + "\r\n" +
  25.                 "From: " + email.FromAlias + "<" + email.From + ">\r\n" +
  26.                 "Subject: " + email.Subject + "\r\n" +
  27.                 "" + contentType + "\r\n\r\n" +
  28.                 "" + email.Content
  29.         if err := smtp.SendMail(addr, auth, email.From, email.To, []byte(msg)); err != nil {
  30.                 fmt.Println("send failed:", err.Error())
  31.                 return err
  32.         }
  33.         return nil
  34. }
  35. func mail() {
  36.     // 发送邮件信息
  37.         data := EmailInfo{
  38.                 From:      "xxx", // 你的邮箱
  39.                 FromAlias: "xxx, // 你的发件人别名
  40.                 Password:  "xxx", // 你的邮箱密码
  41.                 Host:      "smtp.qiye.163.com", // 网易企业邮箱,网上可查,如果你的邮箱是qq或者其他的,百度发信域名可以找到
  42.                 Port:      25,
  43.                 To:        []string{"xxx@qq.com"},
  44.                 Cc:        []string{"xxx@qq.com"},
  45.                 Subject:   "邮件主题",
  46.                 Content:   `你的邮件内容`,
  47.         }
  48.         if err := SmtpSend(testData); err != nil {
  49.                 fmt.Println("smtp send failed:", err.Error())
  50.                 return
  51.         }
  52.         fmt.Println("send success")
  53. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表