账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    如何用Golang从自建的域名邮箱发邮件到QQ邮箱?
    45
    0
    问题如上大标题。我已经知道客户端和服务器之间的SMTP通信过程,但是服务器和服务器之间如何用SMTP通信就不太知道了。这两者的区别主要是在用户登录的时候,前者使用用户名和密码就行了,后者通过MX记录来查看来访IP是是真实的域名所有者(根据我查到的资料是这样的)。但是RFC821和RFC1869上似乎都没有相关内容。这是服务器返回的错误 535 Error: authentication failed相关代码如下package mainimport ( "crypto/tls" "fmt" "net/smtp")// SendEmail 发送邮件func main() { conn, err := tls.Dial("tcp", "smtp.qq.com:465", nil) if err != nil { fmt.Println("ERROR CODE: 1;" + err.Error()) return } c, err := smtp.NewClient(conn, "smtp.qq.com") if err != nil { fmt.Println("ERROR CODE: 2;" + err.Error()) return } err = c.Hello("mail.mydomain.me") if err != nil { fmt.Println("ERROR CODE: 3;" + err.Error()) return } //****************************猜测问题所在 a := smtp.PlainAuth("", "one@mail.mydomain.me", "", "smtp.qq.com") err = c.Auth(a) if err != nil { fmt.Println("ERROR CODE: 4;" + err.Error())//在这里报错! return } //**************************** err = c.Mail("one@mail.mydomain.me") if err != nil { fmt.Println("ERROR CODE: 5;" + err.Error()) return } err = c.Rcpt("17xxxxxx05@qq.com") if err != nil { fmt.Println("ERROR CODE: 6;" + err.Error()) return } w, err := c.Data() if err != nil { fmt.Println("ERROR CODE: 7;" + err.Error()) return } header := make(map[string]string) header["From"] = "mydomain.me" header["TO"] = "17xxxxxx05@qq.com" header["Subject"] = "TEST" header["Content-Type"] = "text/html;chartset=UTF-8" var smtpMsg string for k, v := range header { smtpMsg += k + ":" + v + "\r\n" } // 将正文拼接 smtpMsg += "\r\n" + "body test" _, err = w.Write([]byte(smtpMsg)) if err != nil { fmt.Println("ERROR CODE: 8;" + err.Error()) return } err = w.Close() if err != nil { fmt.Println("ERROR CODE: 9;" + err.Error()) return } err = c.Quit() if err != nil { err = c.Close() if err != nil { fmt.Println("ERROR CODE: 10;" + err.Error()) return } fmt.Println("ERROR CODE: 11;" + err.Error()) return }}我已经设置了相关的DNS解析
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ☆じ兴趣┆酒友┆ 普通会员 1楼

      在Golang中,你可以使用第三方库net/smtp来发送邮件。以下是一个简单的示例,展示了如何使用这个库从自建的域名邮箱发送邮件到QQ邮箱:

      ```go package main

      import ( "net/smtp" "fmt" "strings" )

      func main() { // 自建的域名邮箱 hostname := "yourdomain.com"

      // 邮箱提供商的QQ邮箱
      qq邮箱 = "yourqq邮箱.com"
      
      // 邮件的地址
      // 邮件内容
      body := "邮件内容"
      
      // 创建一个SMTP连接
      

      -smtp := smtp.NewClient("smtp.example.com") SMTPAuth := smtp.PlainAuth("", "yourusername", "yourpassword", "smtp.example.com") SMTP.SetDefaultAuthmode(SMTPAuth)

      // 发送邮件
      

      邮件, err := SMTP.SendMail(hostname, "from@example.com", "to@example.com", strings.NewReader(body), smtp.FromAddress(smtp.AuthAddress())) if err != nil { fmt.Println(err) return }

      fmt.Println("邮件发送成功")
      

      } ```

      请注意,你需要替换上述代码中的yourdomain.comyourusernameyourpasswordsmtp.example.com为你自己的邮箱信息。

      另外,这个示例使用了Golang的net/smtp库来发送邮件,你需要在你的项目中包含这个库。如果你使用的是Debian或者Ubuntu,你可以使用以下命令来安装这个库:

      bash sudo apt-get install net-smtp

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部