Go - 使用gomail發(fā)送郵件

在實際項目中,可能會遇到發(fā)送郵件的需求,所以就試著實現(xiàn)了一下??赡苣壳耙策€沒有實際遇到此需求,不過也可以先動手實現(xiàn)一下,也許此需求正在路上。

1、安裝 gomail 包:

go get -v gopkg.in/gomail.v2

2、完整代碼:
package main

import (
    "fmt"
    "gopkg.in/gomail.v2"
    "mime"
)

/*
go郵件發(fā)送
*/

func SendMail(mailTo []string, subject string, body string) error {
    // 設(shè)置郵箱主體
    mailConn := map[string]string{
        "user": "xxx@qq.com",  //發(fā)送人郵箱(郵箱以自己的為準)
        "pass": "xxx",         //發(fā)送人郵箱的密碼,現(xiàn)在可能會需要郵箱 開啟授權(quán)密碼后在pass填寫授權(quán)碼
        "host": "smtp.qq.com", //郵箱服務(wù)器(此時用的是qq郵箱)
    }

    m := gomail.NewMessage(
        //發(fā)送文本時設(shè)置編碼,防止亂碼。 如果txt文本設(shè)置了之后還是亂碼,那可以將原txt文本在保存時
        //就選擇utf-8格式保存
        gomail.SetEncoding(gomail.Base64),
    )
    m.SetHeader("From", m.FormatAddress(mailConn["user"], "LLL")) // 添加別名
    m.SetHeader("To", mailTo...)                                  // 發(fā)送給用戶(可以多個)
    m.SetHeader("Subject", subject)                               // 設(shè)置郵件主題
    m.SetBody("text/html", body)                                  // 設(shè)置郵件正文

    //一個文件(加入發(fā)送一個 txt 文件):/tmp/foo.txt,我需要將這個文件以郵件附件的方式進行發(fā)送,同時指定附件名為:附件.txt
    //同時解決了文件名亂碼問題
    name := "附件.txt"
    m.Attach("E:/GoCode/src/goMail/gomail.txt",
        gomail.Rename(name), //重命名
        gomail.SetHeader(map[string][]string{
            "Content-Disposition": []string{
                fmt.Sprintf(`attachment; filename="%s"`, mime.QEncoding.Encode("UTF-8", name)),
            },
        }),
    )

    /*
        創(chuàng)建SMTP客戶端,連接到遠程的郵件服務(wù)器,需要指定服務(wù)器地址、端口號、用戶名、密碼,如果端口號為465的話,
        自動開啟SSL,這個時候需要指定TLSConfig
    */
    d := gomail.NewDialer(mailConn["host"], 465, mailConn["user"], mailConn["pass"]) // 設(shè)置郵件正文
    //d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
    err := d.DialAndSend(m)
    return err
}

func main() {
    // 郵件接收方
    mailTo := []string{
        //可以是多個接收人
        "xxx@163.com",
        "xxx@qq.com",
    }

    subject := "Hello World!" // 郵件主題
    body := "測試發(fā)送郵件"          // 郵件正文

    err := SendMail(mailTo, subject, body)
    if err != nil {
        fmt.Println("Send fail! - ", err)
        return
    }
    fmt.Println("Send successfully!")
}

參考自:http://m.itdecent.cn/p/ab63ee725888

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容