import "net/mail"
mail包实现了邮件的解析。
本包大部分都遵守RFC 5322规定的语法,值得注意的区别是:
* 旧格式地址和嵌入远端信息的地址不会被解析 * 组地址不会被解析 * 不支持全部的间隔符(CFWS语法元素),如分属两行的地址
var ErrHeaderNotPresent = errors.New("mail: header not in message")
type Address struct { Name string // 固有名,可以为空 Address string // user@domain }
Address类型表示一个邮箱地址。
例如地址"Barry Gibbs <bg@example.com>"表示为Address{Name: "Barry Gibbs", Address: "bg@example.com"}
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转义。
func ParseAddressList(list string) ([]*Address, error)
函数将list作为一串邮箱地址并解析返回。
type Header map[string][]string
Header代表邮件头域的多个键值对。
func (h Header) AddressList(key string) ([]*Address, error)
将键key对应的值(字符串)作为邮箱地址列表解析并返回。
func (h Header) Date() (time.Time, error)
解析头域Date项的值并返回。
func (h Header) Get(key string) string
返回键key对应的第一个值,如果没有对应值,将返回空字符串。
type Message struct { Header Header Body io.Reader }
Message代表一个解析后的邮件。
func ReadMessage(r io.Reader) (msg *Message, err error)
从r读取一个邮件,会解析邮件头域,消息主体可以从r/msg.Body中读取。