# package mail

`import "net/mail"`

mail包实现了邮件的解析。

本包大部分都遵守RFC 5322规定的语法，值得注意的区别是：

    * 旧格式地址和嵌入远端信息的地址不会被解析
    * 组地址不会被解析
    * 不支持全部的间隔符（CFWS语法元素），如分属两行的地址

## Variables

    var ErrHeaderNotPresent = errors.New("mail: header not in message")

## type Address

    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

    func ParseAddress(address string) (*Address, error)

解析单个的RFC 5322地址，例如"Barry Gibbs <bg@example.com>"。

### func (*Address) String

    func (a *Address) String() string

将a代表的地址表示为合法的RFC 5322地址字符串。如果Name字段包含非ASCII字符将根据RFC 2047转义。

## func ParseAddressList

    func ParseAddressList(list string) ([]*Address, error)

函数将list作为一串邮箱地址并解析返回。

## type Header

    type Header map[string][]string

Header代表邮件头域的多个键值对。

### func (Header) AddressList

    func (h Header) AddressList(key string) ([]*Address, error)

将键key对应的值（字符串）作为邮箱地址列表解析并返回。

### func (Header) Date

    func (h Header) Date() (time.Time, error)

解析头域Date项的值并返回。

### func (Header) Get

    func (h Header) Get(key string) string

返回键key对应的第一个值，如果没有对应值，将返回空字符串。

## type Message

    type Message struct {
        Header Header
        Body   io.Reader
    }

Message代表一个解析后的邮件。

### func ReadMessage

    func ReadMessage(r io.Reader) (msg *Message, err error)

从r读取一个邮件，会解析邮件头域，消息主体可以从r/msg.Body中读取。