IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    用Go实现发送HTML的邮件

    Sam发表于 2014-09-11 08:18:15
    love 0

    GO实现发送HTML的邮件

    前段时间在学习GOlang的时候写了一个用于发送SMTP邮件的代码;

    但是用那段代码如果发送的是HTML内容的邮件;并且邮件标题是中文的话;收到的邮件就会显示乱码;

    所以这次重新换了一种办法来实现发送HTML格式的邮件;

    用到的Go库

    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
    }
    

    编写main()函数

    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即可开始发送邮件了

    你可能也会喜欢这些文字

    • 用Go实现发送邮件用Go实现发送邮件
    • Golang实现将IP地址转换为十进制Golang实现将IP地址转换为十进制
    • Golang获取本地计算机的MAC地址Golang获取本地计算机的MAC地址
    • Python Tkinter 之EntryPython Tkinter 之Entry
    • VPS上安装ShadowSocksVPS上安装ShadowSocks


沪ICP备19023445号-2号
友情链接