前段时间在学习GOlang的时候写了一个用于发送SMTP邮件的代码;
但是用那段代码如果发送的是HTML内容的邮件;并且邮件标题是中文的话;收到的邮件就会显示乱码;
所以这次重新换了一种办法来实现发送HTML格式的邮件;
import (
"encoding/base64"
"fmt"
"github.com/opesun/goquery"
"net/mail"
"net/smtp"
)
func SendToEvernote(user, password, host, to, subject, body string) error {
/*
*发送邮件到Evernote
*/
b64 := base64.NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
from := mail.Address{user, user}
toMail := mail.Address{to, to}
header := make(map[string]string)
header["From"] = from.String()
header["To"] = toMail.String()
header["Subject"] = fmt.Sprintf("=?UTF-8?B?%s?=", b64.EncodeToString([]byte(subject)))
header["MIME-Version"] = "1.0"
header["Content-Type"] = "text/html; charset=UTF-8"
header["Content-Transfer-Encoding"] = "base64"
message := ""
for k, v := range header {
message += fmt.Sprintf("%s: %s\r\n", k, v)
}
message += "\r\n" + b64.EncodeToString([]byte(body))
auth := smtp.PlainAuth("", user, password, host)
err := smtp.SendMail(
host+":25",
auth,
user,
[]string{toMail.Address},
[]byte(message),
)
if err != nil {
panic(err)
}
return err
}
func main() {
var url = "http://www.zhihu.com/question/24859069"
p, error := goquery.ParseUrl(url)
if error != nil {
panic(error)
}
subject := p.Find("title").Text()
body := p.Html()
host := "smtp.126.com"
email := "huaisha1224@126.com"
password := "*******"
toEmail := "279478776@qq.com"
fmt.Println("send email")
err := SendToEvernote(email, password, host, toEmail, subject, body)
if err != nil {
fmt.Println("send mail error!")
fmt.Println(err)
} else {
fmt.Println("send mail success!")
}
}
这里用goquery来获取URL里面的titel和HTML内容用于发送邮件
var url = "http://www.zhihu.com/question/24859069"
p, error := goquery.ParseUrl(url)
if error != nil {
panic(error)
}
subject := p.Find("title").Text()
body := p.Html()
上面的代码完成之后在cmd下运行go run smtp.go
即可开始发送邮件了