Spec-Zone.ru › Go

Пакет mail

  • import "net/mail"
  • Обзор
  • Указатель
  • Примеры

Обзор

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

В основном этот пакет следует синтаксису, определённому в RFC 5322 и расширенному в RFC 6532. Примечательные отличия:

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

Указатель

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

Примеры

ParseAddress
ParseAddressList
ParseDate
ReadMessage

Файлы пакета

message.go

Переменные

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

func ParseDate 1.8

func ParseDate(date string) (time.Time, error)

ParseDate разбирает строку даты RFC 5322.

Пример

Код:

dateStr := "Wed, 09 Oct 2024 09:55:06 -0700"

t, err := mail.ParseDate(dateStr)
if err != nil {
    log.Fatalf("Failed to parse date: %v", err)
}

fmt.Println(t.Format(time.RFC3339))

Результат:

2024-10-09T09:55:06-07:00

type 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
}

func 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

func 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

func (*Address) String

func (a *Address) String() string

String форматирует адрес в соответствии с RFC 5322. Если имя адреса содержит символы, отличные от ASCII, оно будет представлено согласно RFC 2047.

type AddressParser 1.5

AddressParser — это парсер адресов RFC 5322.

type AddressParser struct {
    // WordDecoder optionally specifies a decoder for RFC 2047 encoded-words.
    WordDecoder *mime.WordDecoder
}

func (*AddressParser) Parse 1.5

func (p *AddressParser) Parse(address string) (*Address, error)

Parse разбирает один адрес RFC 5322 вида "Gogh Fir <gf@example.com>" или "foo@example.com".

func (*AddressParser) ParseList 1.5

func (p *AddressParser) ParseList(list string) ([]*Address, error)

ParseList разбирает указанную строку как список адресов, разделённых запятыми, вида "Gogh Fir <gf@example.com>" или "foo@example.com".

type Header

Header представляет пары «ключ — значение» в заголовке почтового сообщения.

type Header map[string][]string

func (Header) AddressList

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

AddressList разбирает указанное поле заголовка как список адресов.

func (Header) Date

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

Date разбирает поле заголовка Date.

func (Header) Get

func (h Header) Get(key string) string

Get возвращает первое значение, связанное с указанным ключом. Регистр символов не учитывается; для приведения указанного ключа к каноническому виду используется CanonicalMIMEHeaderKey. Если с ключом не связано ни одного значения, Get возвращает "". Чтобы получить несколько значений ключа или использовать неканонические ключи, обратитесь напрямую к карте.

type Message

Message представляет разобранное почтовое сообщение.

type Message struct {
    Header Header
    Body   io.Reader
}

func 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