Go實現發送電子郵件

目錄

前言

獲取授權碼

使用Go原生smtp包發送郵件

所需導入包

身份、發送者和密碼

stmp域名和端口

接收者切片

發送者名稱

標題和正文

生成授權

指定上下文類型

拼接發送消息和url

發送郵件

發送郵件實測

使用第三方包----gomail

gomail簡單介紹

獲取gomail

生成gomail message

設置發件人信息

設置收件人信息

設置抄送者信息

設置密送者信息

設置郵件主題

書寫正文內容

添加附件

設置撥號器

🚀發送郵件~


前言

Go原生包net/smtp可以實現基本的發送郵件功能。Go的第三方包gomail可以實現更多的發送功能。下面來一一介紹。

 

獲取授權碼

部分郵箱(例如QQ郵箱)發送郵件時,使用的不是密碼,而是授權碼。授權碼的獲取方式(以QQ郵箱爲例)如下:

獲取QQ郵箱的授權碼

 

使用Go原生smtp包發送郵件

所需導入包

需要使用 net/smtp 包

import (
    "net/smtp"
)

 

身份、發送者和密碼

identity := ""
sender := "[email protected]"
pwd := "lzffxekpzhuazsfeagb2"

⚠️發送者sender必須是合法有效的郵箱。有些郵箱發送時需要的是授權碼,而非密碼。因此需要將pwd的值替換爲授權碼。

 

stmp域名和端口

host :="smtp.qq.com"
port := "25"

使用QQ郵箱作爲發送者郵箱時,域名和端口如上配置。

 

接收者切片

可以一次性發送給多個用戶:

sendTo:=[]string{"[email protected]", "[email protected]"}

 

發送者名稱

senderName := "TCatTime"

定義郵件發送者的名字。

 

標題和正文

title := "have a nice day"
body := "test8.0"

定義郵件的標題和正文內容。

 

生成授權

調用smtp包中的PlainAuth函數,生成授權。

auth := smtp.PlainAuth(identity, sender, pwd, host)

 

指定上下文類型

content_type := "Content-Type: text/html; charset=UTF-8"

 

拼接發送消息和url

msg := []byte("To: " + strings.Join(sendTo, ",",) + "\nFrom: " + senderName +
		"<" + sender + ">\nSubject: " + title + "\n" + content_type + "\n" + body + "\n")

url := host + ":" + port

 

發送郵件

err := smtp.SendMail(url, auth, sender, sendTo, msg)
if err != nil {
	fmt.Printf("\n\nsend mail error: %v", err)
	return
}
fmt.Println("\n\nsend mail success!")

 

發送郵件實測

 

使用第三方包----gomail

gomail簡單介紹

gomail框架對go原生的smtp包做了一層封裝,使用更直觀、簡便。且gomail可以更方便的發送帶有附件的郵件、添加抄送者等。

 

獲取gomail

1、使用go-get獲取

github.com/go-gomail/gomail

2、使用go-mod獲取

進入項目目錄下

go mod tidy

 

生成gomail message

m := gomail.NewMessage()

 

設置發件人信息

m.SetAddressHeader("From", "[email protected]", "發件人")

 

設置收件人信息

m.SetHeader("To",
	m.FormatAddress("[email protected]", "收件人"))

 

設置抄送者信息

m.SetHeader("Cc",
	m.FormatAddress("[email protected]", "收件人1"),
	m.FormatAddress("[email protected]", "收件人2"))

 

設置密送者信息

m.SetHeader("Bcc",
	m.FormatAddress("[email protected]", "收件人1"),
	m.FormatAddress("[email protected]", "收件人2"))

 

設置郵件主題

m.SetHeader("Subject", "go-mail測試")

SetHeader方法的第一個參數表示郵件標題(Subject),第二個參數表示郵件主題(go-mail測試)。

 

書寫正文內容

m.SetBody("Content-Type: text/html; charset=UTF-8", "go-mail")

SetBody()方法的第一個參數表示正文內容的類型和默認的編碼格式。第二個參數是正文內容。

 

添加附件

m.Attach("/Users/root/Desktop/demo.docx")

使用Attach()方法添加一個附件到郵件中。附件的路徑爲服務器端的絕對路徑。

 

設置撥號器

發送郵件的最後一項準備工作是設置撥號器。使用NewDialer()函數生成一個撥號器。將郵件服務器、端口、發送者郵箱、密碼(或授權碼)依次傳入NewDialer()函數中。以QQ郵箱爲例:

d := gomail.NewDialer("smtp.qq.com", 25, "[email protected]", "lzfxkkpzuasfeagz")

 

🚀發送郵件~

最後一步,發送!

err := d.DialAndSend(m)
if err != nil {
    fmt.Println("send mail error:", err.Error())
    return
}

fmt.Println("Send mail finished!")

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章