如何在Golang中发送电子邮件
简介
net/smtp
是一个内置的GO软件包,并实现了SMTP协议。它提供了一种通过SMTP服务器发送邮件的简单方法。我们将探索内置的NET/SMTP软件包和Gomail软件包以发送电子邮件。
先决条件
- 对Golang的基本理解
- GO版本1.10或更高版本。
发送电子邮件/SMTP
发送电子邮件 导入软件包
package main
import (
"fmt"
"net/smtp"
)
发送电子邮件
package main
import (
"fmt"
"net/smtp"
"os"
)
// Main function
func main() {
// from is sender's email address
from := os.Getenv("MAIL")
password := os.Getenv("PASSWD")
// toList is a list of email addresses that email is to be sent
toList := []string{"example@gmail.com"}
// host is address of server that the sender's email address belongs,
// in this case it's gmail.
host := "smtp.gmail.com"
// It's the default port of smtp server
port := "587"
// This is the message to send in the mail
msg := "Hello World!"
// We can't send strings directly in mail,
// strings need to be converted into slice bytes
body := []byte(msg)
// PlainAuth uses the given username and password to
// authenticate to host and act as identity.
auth := smtp.PlainAuth("", from, password, host)
// SendMail uses TLS connection to send the mail
// The email is sent to all address in the toList,
// the body should be of type bytes, not strings
// This returns an error if any occurred.
err := smtp.SendMail(host+":"+port, auth, from, toList, body)
// handling the errors
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println("Successfully sent email!")
}
发送带有Gomail的电子邮件
导入软件包
package main
import (
"crypto/tls"
"fmt"
gomail "gopkg.in/mail.v2"
)
发送电子邮件
package main
import (
"crypto/tls"
"fmt"
gomail "gopkg.in/mail.v2"
)
func main() {
m := gomail.NewMessage()
m.SetHeader("From", "youremail@gmail.com")
m.SetHeader("To", "recipient@example.com")
m.SetHeader("Subject", "Sending Email with Goalang")
// Set the email body. You can set plain text or html with text/html
m.SetBody("text/plain", "Hello World!")
// Settings for SMTP server
d := gomail.NewDialer("smtp.gmail.com", 587, "youremail@gmail.com", "yourpassword")
// This is only needed when the SSL/TLS certificate is not valid on the server.
// In production this should be set to false.
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
if err := d.DialAndSend(m); err != nil {
fmt.Println(err)
panic(err)
}
return
}
常见问题和决议
错误:无效登录:535-5.7.8不接受用户名和密码。
该错误的潜在解决方案可能是使Gmail服务能够在第三方应用程序中使用它。要解决此错误,只需在Gmail帐户中登录,并使用此链接
eTimedout错误
检查您的防火墙设置。超时通常会在您尝试在服务器上或计算机上打开端口的连接。
tls错误
检查您的防病毒设置。防病毒通常会弄乱电子邮件端口。 Node.js可能无法识别您的防病毒所使用的MITM证书。
最新的节点版本仅允许TLS版本1.2及更高版本,有些服务器仍可能使用TLS 1.1或更低。检查node.js文档如何获得应用程序的正确TLS支持。
结论
gmail效果很好,要么根本不起作用。切换到诸如Mayazy之类的替代电子邮件服务提供商可能更容易,而不是解决Gmail问题。使用Gmail作为生产服务器也不推荐,您应该选择电子邮件提供商来管理您的电子邮件。
Configuring and setting up Mailazy很容易,无缝,电子邮件可以在几分钟内成为sent!