m.SetHeader(To, emailInfo.Recipient…) // 切片可以傳遞給不定參數(shù)
這句代碼學(xué)到了函數(shù)參數(shù)還可以這樣傳遞。
main函數(shù)中,接收郵件的流程如下:
//接收郵件log.Println(連接服務(wù)器)
c, err := client.DialTLS(imap.qq.com:993, nil)
check_error(err)
defer c.Logout() // 結(jié)束后退出登錄
if err = c.Login(emailInfo.FromEmail, emailInfo.FromPasswd); err != nil {
log.Fatal(err)
}
log.Println(已登錄)
如果直接讀收件箱,可以這樣寫(通過下標來指定讀取哪幾封郵件):
var mbox *imap.MailboxStatusmbox, err = c.Select(INBOX, false)
check_error(err)
log.Println(Flags for INBOX:, mbox.Flags) // [\\\\Answered \\\\Flagged \\\\Deleted \\\\Draft \\\\Seen]// Get the last4 messages
ifrom := uint32(1)
ito := mbox.Messages
if mbox.Messages > 3 {
//
seqset := new(imap.SeqSet)
seqset.AddRange(ifrom, ito)
下面用一個for循環(huán)從指定位置讀郵件,其中g(shù)o func() {}部分都是啟動一個goroutine子進程(工作線程)去讀取內(nèi)容。
代碼中From和To可能還存在編碼問題,需要解決–從最后的運行結(jié)果也可以看到。
循環(huán)讀取信件body
續(xù) 循環(huán)讀取信件body
上面是讀取信內(nèi)容。
如果需要讀取郵件列表,則可以這樣寫:
列出郵件文件夾
讀寫郵件,其實還是需要去了解郵件協(xié)議。
一封傳統(tǒng)的電子郵件:
From: Tim <tim@example.com>
To: joe Zhang <zhang@example.com>
Subject: Test
Date: Wed, 17 May 2020 12:02:29 -0400
Message-ID: <NDBBIAKOPKHFGPLCODIGIEKBCHAA.tim@example.com>
Hello World.
在結(jié)構(gòu)上,這封信分為三個部分:首先是信件頭,然后是一個空行,最后是信件內(nèi)容。
符合規(guī)范RFC 822。但是協(xié)議規(guī)定導(dǎo)致
1)非英語字符都不能在電子郵件中使用;
2)電子郵件中不能插入二進制文件(如圖片);
3)電子郵件不能有附件
這導(dǎo)致補充協(xié)議 MIME系列誕生。
MIME對傳統(tǒng)電子郵件的擴展,表現(xiàn)在它在信件頭部分添加了幾條語句,主要有三條
第一條是:指明這封信使用了MIME規(guī)范
MIME-Version: 1.0
第二條語句是:它表明傳遞的信息類型和采用的編碼
Content-Type: text/plain; charset=ISO-8859-1
Content-Type表明信息類型,缺省值為 text/plain。它包含了主要類型(primary type)和次要類型(subtype)兩個部分,兩者之間用/分割。主要類型有9種,分別是application、audio、example、image、message、model、multipart、text、video。
經(jīng)常使用的有:
text/plain:純文本,文件擴展名.txttext/html:HTML文本,文件擴展名.htm和.htmlimage/jpeg:jpeg格式的圖片,文件擴展名.jpgimage/gif:GIF格式的圖片,文件擴展名.gifaudio/x-wave:WAVE格式的音頻,文件擴展名.wavaudio/mpeg:MP3格式的音頻,文件擴展名.mp3video/mpeg:MPEG格式的視頻,文件擴展名.mpgapplication/zip:PK-ZIP格式的壓縮文件,文件擴展名.zip
如果信息的主要類型是text,那還須指明編碼類型charset,缺省值是ASCII,也可能ISO-8859-1、UTF-8、GB2312等
MIME規(guī)定了第三條語句:
Content-transfer-encoding: base64
舉個例子:
郵件的源碼:
Date: Wed, 18 Jun 2008 18:07:51 0800 (CST)From: xxx <xxx@163.com>To: yifeng.ruan@gmail.comMessage-ID: <14410503.1073611213783671983.JavaMail.coremail@bj163app54.163.com>Subject: =?gbk?B?xOO6ww==?=MIME-Version: 1.0Content-Type: multipart/alternative;boundary=—-=_Part_287491_22998031.1213783671982——=_Part_287491_22998031.1213783671982Content-Type: text/plain; charset=gbkContent-Transfer-Encoding: base64IAq4 b7dsr 209PQudi55raoo6yyu7XD1Nq12Le9yM66zs341b7Jz7nSz DTprXEtqvO96Osx vE49TaxOO1xLKpv83W0AogIArW0Ln6yr2x6tPvIC0gyO7Su7fltcTN MLnyNXWvgoKtcS12jEy1cXNvMasyb6z/aOst/HU8s7Sw8fXt76/xOO1xM/gudjU8MjOoaPQu9C7us/X96OhtMvNvMas1Nq4vbz wO/D5g==——=_Part_287491_22998031.1213783671982Content-Type: text/html; charset=gbkContent-Transfer-Encoding: quoted-printable<DIV> </DIV><DIV>=B8=F9=BE=DD=B2=BF=B6=D3=D3=D0=B9=D8=B9=E6=B6=A8=A3=AC=B2=BB=B5=C3=D4==DA=B5=D8=B7=BD=C8=CE=BA=CE=CD=F8=D5=BE=C9=CF=B9=D2=CF=E0=D3=A6=B5=C4=B6=AB==CE=F7=A3=AC=C7=EB=C4=E3=D4=DA=C4=E3=B5=C4=B2=A9=BF=CD=D6=D0</DIV><DIV> ……
可以看到這封信的MIME語句是:
MIME-Version: 1.0Content-Type: multipart/alternative;boundary=—-=_Part_287491_22998031.1213783671982
Content-Type: multipart/alternative;表明這封信的內(nèi)容,是純文本和HTML文本的混合。另兩個可能的值是multipart/mixed和multipart/related,分別表示信件內(nèi)容中有二進制內(nèi)容和信件帶有附件。
boundary=—-=_Part_287491_22998031.1213783671982表明不同信件內(nèi)容的分割線是—-=_Part_287491_22998031.1213783671982,它通常是一個很長的隨機字符串。
信件內(nèi)容部分又有兩個子信件頭:
Content-Type: text/plain; charset=gbkContent-Transfer-Encoding: base64
和
Content-Type: text/html; charset=gbkContent-Transfer-Encoding: quoted-printable
它們表明,第一個部分是gbk編碼的純文本,編碼轉(zhuǎn)換格式是base64。第二個部分是gbk編碼的HTML文本,編碼轉(zhuǎn)化格式是quoted-printable。
更多關(guān)于云服務(wù)器,域名注冊,虛擬主機的問題,請訪問西部數(shù)碼官網(wǎng):ps-sw.cn