這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
net/mail包實現瞭解析郵件訊息的功能
本包大部分都遵守RFC 5322規定的文法,值得注意的區別是:
舊格式地址和嵌入遠端資訊的地址不會被解析
組地址不會被解析
不支援全部的間隔符(CFWS文法元素),如分屬兩行的地址
函數:
func ParseAddressList(list string) ([]*Address, error)//該函數將給定的字元形式表示的地址list解析成標準的地址清單。
type Address //該結構體代表一個獨立的mail地址,一個地址:"Barry Gibbs <bg@example.com>"經過位址解析後會變成Address{Name: "Barry Gibbs", Address: "bg@example.com"}。
type Address struct { Name string // Proper name; may be empty. Address string // user@domain}
func ParseAddress(address string) (*Address, error) //解析一個獨立的RFC 5322地址,地址形如:“Barry Gibbs <bg@example.com>”
func (a *Address) String() string //將a代表的地址表示為合法的RFC 5322地址字串。如果Name欄位包含非ASCII字元將根據RFC 2047轉義。
type Header //Header代表在一個郵件訊息頭部的key-value對。
type Header map[string][]string
func (h Header) AddressList(key string) ([]*Address, error)//將鍵key對應的值(字串)作為郵箱地址清單解析並返回
func (h Header) Date() (time.Time, error)//擷取header中Date的值
func (h Header) Get(key string) string//返回在header中指定分配給指定key的第一個值。如果該key沒有值的話,返回“”
type Message//表示一個解析後的郵件訊息
type Message struct { Header Header Body io.Reader}
func ReadMessage(r io.Reader) (msg *Message, err error) //從r讀取一個郵件,會解析郵件標頭域,訊息主體可以從r/msg.Body中讀取。
舉例說明用法。
參考:http://golang.org/pkg/net/mail/