package mail

import "net/mail"

mail包实现了邮件的解析。

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

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

Index

Variables

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

type Address

type Address struct {
    Name    string // 固有名,可以为空
    Address string // user@domain
}

Address类型表示一个邮箱地址。

例如地址"Barry Gibbs <[email protected]>"表示为Address{Name: "Barry Gibbs", Address: "[email protected]"}

func ParseAddress

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

解析单个的RFC 5322地址,例如"Barry Gibbs <[email protected]>"。

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中读取。