电子郵件協議及GO發送QQ郵件_台中搬家公司

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

目錄

  • 一、电子郵件的工作機制
    • 1.1 SMTP
    • 1.2 POP3
    • 1.3 IMAP
  • 二、郵件地址
  • 三、MIME信息
  • 四、使用golang發送qq郵件

一、电子郵件的工作機制

提供电子郵件服務的協議叫做:SMTP(Simple Mail Transfer Protocol)為了能夠高效安全的進行數據的傳輸,SMTP協議底層使用的TCP實現兩端的連接。

早期的电子郵件收發的工作機制如上圖所示。發送端和接收端之間通過SMTP底層的TCP簡歷連接。通過網絡直接將郵件發送到對方的磁盤上。

但是問題也隨之而來:

如果接收方沒有開機,或者開機了但是沒有連接網絡,那麼就不能通過SMTP協議建立連接,這時發送端只能是個隔一段時間后重試,直到接收端開機了,聯網了,發送端才能成功的將郵件發送給接收方。問題很明顯,接收方只要不開機,發送方的郵件就不能發送出去,如果是東方國家和西方國家之間的兩個人各自在各自的白天才開機,那豈不是他們之間的郵件根本不可能發送出去了?

為了解決這個問題,郵件服務器出現了:

這時收發郵件的工作機制就演變成了上圖那樣。發送方 面向 郵件服務器發送郵件,而不管接收方是否開機,是否聯網,接收方通過上線后使用POP3(Post Office Proto-col)從郵件服務器接收郵件。

整個過程中,郵件服務器是不會斷電的。

1.1 SMTP

通過上圖可以看到,SMTP是發送电子郵件時使用的協議。 它底層使用tcp的25號端口。在這個tcp連接上進行控制,應答,以及數據的傳輸。

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

客戶端以文本的方式發送請求,郵件服務器每次回復3位数字作為應答。比如客戶端首次會發送 HELO<domain>表示請求建立連接。正常的話郵件服務器會回復250,表示完成請求命令。

SMTP協議中規定,以’.’最為郵件正文的結束符。當正文前面有一個’.’或者有兩個’.’ 都要進行特殊處理。

SMTP不會校驗發送者,所以我們經常會收到垃圾郵件,據說也會有“POP before SMTP” 和“SMTP認證”機制,來防止冒充發送人。從而減少垃圾郵件的數量。

1.2 POP3

POP服務器也是一台一直處於充電狀態的服務器。

客戶端通過pop3協議從pop服務器上接收發送方發過來的協議,但是在接收之前是需要進行用戶身份驗證的,也就是說,客戶端得將自己的賬號密碼發送到POP服務器,通過驗證后才能取回屬於自己的郵件

POP與SMTP一樣,都是基於TCP連接完成相應的操作的。

1.3 IMAP

IMAP和POP協議一樣都是接收电子郵件時使用的協議。

如果使用IMAP,即使不用將电子郵件下載到本地也可以閱讀。因為IMAP實現了字啊服務端處理MIME類型的數據,所以他能實現當一封电子郵件有10個附件時,它能直接打開其中的某一個。而且在服務端作出已讀/未讀,等狀體的修改。

二、郵件地址

郵件地址通常都是由兩部分組成: 名稱@地址

常見的像 123@qq.com 這種郵件的地址。

123就是名稱,qq.com就是地址。 电子郵件的地址和域名構造相同,後面的com是頂級域名。

現在的电子郵件地址由DNS統一管理。DNS裏面存儲着各個郵件地址,和這個郵件地址作為發送地址時所對應的郵件服務器的域名信息。我們把這種映射關係稱為MX記錄。因為方才說了,對現在的郵件發送機制來說,發送者是將郵件發送到郵件服務器上。那通過查詢DNS中的MX記錄,就能知道xxx@qq.com. xxx@163.com 這種不同的郵件後綴所對應的郵件服務器的域名,通過域名進一步找到這個機器。

三、MIME信息

最初的很長一段時間里,郵件只能發送文本信息。後台能發送的數據類型已經被拓展到了MIME。可以發送諸如gif, video,png,jpg,jpeg,text/plain 等等類型的數據。具體發送啥樣的信息,通過Content-Type定義。

四、使用golang發送qq郵件

實例代碼如下:

package mail

import (
	"strconv"
)
import "gopkg.in/gomail.v2"

func SendMail(mailTo []string, subject string, body string) error {
  
	mailConn := map[string]string{
		"user": "6464xxxx8@qq.com", // 郵件發送者的地址
		"pass": "trsxxxxxxxxxxcd",  // qq郵箱填授權碼,百度一下獲取方式。
		"host": "smtp.qq.com", // 發送將郵件發送給騰訊的smtp郵件服務器
		"port": "465",   // 發送郵件使用的端口
	}
	port, _ := strconv.Atoi(mailConn["port"])
  
	m := gomail.NewMessage()
	m.SetHeader("From", m.FormatAddress(mailConn["user"], "自動化成績查詢"))
	m.SetHeader("To", mailTo...)    //發送給多個用戶
	m.SetHeader("Subject", subject) //設置郵件主題
	 m.SetBody("text/html", body)    //設置郵件正文
  
	d := gomail.NewDialer(mailConn["host"], port, mailConn["user"], mailConn["pass"])
	err := d.DialAndSend(m)
	return err
}

	/*
	發送郵件
	stuEmail:學生的郵箱
	subject:標題
	body:發送的內容
  */
func DoSendMail(stuEmail , subject, body string) (e error) {
	mailTo := []string{stuEmail}
	err := SendMail(mailTo, subject, body)
	if err != nil {
		e = err
		return e
	}
	return nil
}

//func main() {
//	//定義收件人
//	mailTo := []string{
//		"2693xxxx8@qq.com",
//		"196xxxxx30@qq.com",
//	}
//	//郵件主題為"Hello"
//	subject := "Hi 出成績了"
//	// 郵件正文
//	body := "請查收您的新成績"
//
//	err := SendMail(mailTo, subject, body)
//	if err != nil {
//		log.Println(err)
//		fmt.Println("send fail")
//		return
//	}
//	fmt.Println("send successfully")
//}

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

您可能也會喜歡…