net/mail

mail包实现了邮件的解析

RFC 5322

几个常用的功能

  • 将邮件字符串转换成邮件结构体
  • 将邮件结构体转换成RFC 5322 规定的字符串形式
  • 将一连串字符串邮件格式转换为邮件结构体数组
  • 读取邮件获取邮件的header和body
  • 读取邮件header的相关数据

下面我们看对应的方法实现

邮件地址结构

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

将邮件字符串转换成邮件结构体

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

例如地址"Barry Gibbs bg@example.com"表示为Address{Name: "Barry Gibbs", Address: "bg@example.com"}


将邮件结构体转换成RFC 5322 规定的字符串形式

func (a *Address) String() string

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


将一连串字符串邮件格式转换为邮件结构体数组

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

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


读取邮件获取邮件的header和body

type Message struct {
    Header Header
    Body   io.Reader
}

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

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

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

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

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

将键值key对应的值作为邮件地址列表解析并返回

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

获取邮件的时间

func (h Header) Get(key string) string

获取邮件对应的key值

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 也许重庆的十八梯是我早应该来的地方。这里很拥挤,这里都是弄堂,陈旧、破烂,很多墙上画着大大的红圈,里面赫然醒目的拆...
    onlyamouth阅读 2,600评论 0 2
  • 我这辈子 一事无成 除了,拥有你
    无解人阅读 1,076评论 0 0
  • 此次去西安,是和儿子的最后一次旅游。试了无数次,终究话不投机冷心冷肺。 儿子大了,放他走。如果对别人的孩子不可能说...
    石默默阅读 3,244评论 0 0
  • 反复上色还是有问题,继续努力! 看了很多资料,貌似觉得马可7100油性颜色发灰的不只有我自己,探索的路还很长,GO...
    宝木苏阅读 2,435评论 3 6

友情链接更多精彩内容