Пакет почты
Обзор
Пакет почты реализует разбор сообщений электронной почты.
В основном, этот пакет следует синтаксису, как указано в RFC 5322 и расширенном RFC 6532. Заметные расхождения:
- Устаревшие форматы адресов не анализируются, включая адреса с встроенной информацией о маршрутизации.
- Полный диапазон пробелов (элемент синтаксиса CFWS) не поддерживается, например, разбиение адресов на строки.
- Нормализация юникода не выполняется.
- Разрешена ведущая строка Отправителя, как в формате mbox (RFC 4155).
Индекс
Примеры
Файлы пакета
message.go
Переменные
var ErrHeaderNotPresent = errors.New("mail: header not in message") функция ParseDate 1.8
func ParseDate(date string) (time.Time, error)
ParseDate парсит строку даты RFC 5322.
тип Address
Address представляет один адрес электронной почты. Такой адрес, как "Barry Gibbs <bg@example.com>", представлен как Address{Name: "Barry Gibbs", Address: "bg@example.com"}.
type Address struct {
Name string // Proper name; may be empty.
Address string // user@domain
}
функция ParseAddress 1.1
func ParseAddress(address string) (*Address, error)
ParseAddress парсит один адрес RFC 5322, например "Barry Gibbs <bg@example.com>"
Пример
Код:
e, err := mail.ParseAddress("Alice <alice@example.com>")
if err != nil {
log.Fatal(err)
}
fmt.Println(e.Name, e.Address)
Вывод:
Alice alice@example.com
функция ParseAddressList 1.1
func ParseAddressList(list string) ([]*Address, error)
ParseAddressList парсит заданную строку как список адресов.
Пример
Код:
const list = "Alice <alice@example.com>, Bob <bob@example.com>, Eve <eve@example.com>"
emails, err := mail.ParseAddressList(list)
if err != nil {
log.Fatal(err)
}
for _, v := range emails {
fmt.Println(v.Name, v.Address)
}
Вывод:
Alice alice@example.com Bob bob@example.com Eve eve@example.com
функция (*Address) String
func (a *Address) String() string
String форматирует адрес как допустимый адрес RFC 5322. Если имя адреса содержит не-ASCII символы, имя будет отображено в соответствии с RFC 2047.
тип AddressParser 1.5
AddressParser — это парсер адресов RFC 5322.
type AddressParser struct {
// WordDecoder optionally specifies a decoder for RFC 2047 encoded-words.
WordDecoder *mime.WordDecoder
}
функция (*AddressParser) Parse 1.5
func (p *AddressParser) Parse(address string) (*Address, error)
Parse парсит один адрес RFC 5322 вида "Gogh Fir <gf@example.com>" или "foo@example.com".
функция (*AddressParser) ParseList 1.5
func (p *AddressParser) ParseList(list string) ([]*Address, error)
ParseList парсит заданную строку как список адресов, разделенных запятыми, вида "Gogh Fir <gf@example.com>" или "foo@example.com".
тип Header
Header представляет пары "ключ-значение" в заголовке сообщения электронной почты.
type Header map[string][]string
функция (Header) AddressList
func (h Header) AddressList(key string) ([]*Address, error)
AddressList парсит указанное поле заголовка как список адресов.
функция (Header) Date
func (h Header) Date() (time.Time, error)
Date парсит поле заголовка Date.
функция (Header) Get
func (h Header) Get(key string) string
Get получает первое значение, связанное с заданным ключом. Оно нечувствительно к регистру; CanonicalMIMEHeaderKey используется для канонизации предоставленного ключа. Если нет значений, связанных с ключом, Get возвращает "". Для доступа к нескольким значениям ключа или для использования неканонических ключей, обратитесь непосредственно к карте.
тип Message
Message представляет разобранное сообщение электронной почты.
type Message struct {
Header Header
Body io.Reader
}
функция ReadMessage
func ReadMessage(r io.Reader) (msg *Message, err error)
ReadMessage считывает сообщение из r. Заголовки анализируются, и тело сообщения будет доступно для чтения из msg.Body.
Пример
Код:
msg := `Date: Mon, 23 Jun 2015 11:40:36 -0400
From: Gopher <from@example.com>
To: Another Gopher <to@example.com>
Subject: Gophers at Gophercon
Message body
`
r := strings.NewReader(msg)
m, err := mail.ReadMessage(r)
if err != nil {
log.Fatal(err)
}
header := m.Header
fmt.Println("Date:", header.Get("Date"))
fmt.Println("From:", header.Get("From"))
fmt.Println("To:", header.Get("To"))
fmt.Println("Subject:", header.Get("Subject"))
body, err := io.ReadAll(m.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s", body)
Вывод:
Date: Mon, 23 Jun 2015 11:40:36 -0400 From: Gopher <from@example.com> To: Another Gopher <to@example.com> Subject: Gophers at Gophercon Message body
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/net/mail/