Spec-Zone.ru › Go

Пакет почты

  • import "net/mail"
  • Обзор
  • Индекс
  • Примеры

Обзор

Пакет почты реализует разбор сообщений электронной почты.

В основном, этот пакет следует синтаксису, как указано в RFC 5322 и расширенном RFC 6532. Заметные расхождения:

  • Устаревшие форматы адресов не анализируются, включая адреса с встроенной информацией о маршрутизации.
  • Полный диапазон пробелов (элемент синтаксиса CFWS) не поддерживается, например, разбиение адресов на строки.
  • Нормализация юникода не выполняется.
  • Разрешена ведущая строка Отправителя, как в формате mbox (RFC 4155).

Индекс

  • Переменные
  • функция ParseDate(date string) (time.Time, error)
  • тип Address
  • функция ParseAddress(address string) (*Address, error)
  • функция ParseAddressList(list string) ([]*Address, error)
  • функция (a *Address) String() string
  • тип AddressParser
  • функция (p *AddressParser) Parse(address string) (*Address, error)
  • функция (p *AddressParser) ParseList(list string) ([]*Address, error)
  • тип Header
  • функция (h Header) AddressList(key string) ([]*Address, error)
  • функция (h Header) Date() (time.Time, error)
  • функция (h Header) Get(key string) string
  • тип Message
  • функция ReadMessage(r io.Reader) (msg *Message, err error)

Примеры

ParseAddress
ParseAddressList
ReadMessage

Файлы пакета

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API