mail

优质
小牛编辑
138浏览
2023-12-01

import "net/mail"

mail包实现了邮件的解析。

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

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

  • Variables
  • type Address
  • func ParseAddressList(list string) ([]*Address, error)
  • type Header
  • type Message
  • 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中读取。