version: 1.10
package mail
import "net/mail"
Overview
Package mail implements parsing of mail messages.
For the most part, this package follows the syntax as specified by RFC 5322 and
extended by RFC 6532. Notable divergences:
* Obsolete address formats are not parsed, including addresses with
embedded route information.
* The full range of spacing (the CFWS syntax element) is not supported,
such as breaking addresses across lines.
* No unicode normalization is performed.
* The special characters ()[]:;@\, are allowed to appear unquoted in names.
Index
- Variables
- func ParseAddressList(list string) ([]*Address, error)
- func ParseDate(date string) (time.Time, error)
- type Address
- type AddressParser
- type Header
- type Message
Examples
Package files
Variables
func ParseAddressList
¶
ParseAddressList parses the given string as a list of addresses.
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)
}
// Output:
// Alice alice@example.com
// Bob bob@example.com
// Eve eve@example.com
func ParseDate
¶
ParseDate parses an RFC 5322 date string.
type Address
¶
Address represents a single mail address. An address such as “Barry Gibbs
bg@example.com“ is represented as Address{Name: “Barry Gibbs”, Address:
“bg@example.com”}.
func ParseAddress
¶
Parses a single RFC 5322 address, e.g. “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)
// Output:
// Alice alice@example.com
func (*Address) String
¶
String formats the address as a valid RFC 5322 address. If the address’s name
contains non-ASCII characters the name will be rendered according to RFC 2047.
type AddressParser
¶
- type AddressParser struct {
- // WordDecoder optionally specifies a decoder for RFC 2047 encoded-words.
- WordDecoder *mime.WordDecoder
- }
An AddressParser is an RFC 5322 address parser.
func (*AddressParser) Parse
¶
- func (p *AddressParser) Parse(address string) (*Address, error)
Parse parses a single RFC 5322 address of the form “Gogh Fir gf@example.com“
or “foo@example.com”.
func (*AddressParser) ParseList
¶
- func (p *AddressParser) ParseList(list string) ([]*Address, error)
ParseList parses the given string as a list of comma-separated addresses of the
form “Gogh Fir gf@example.com“ or “foo@example.com”.
type Header
¶
A Header represents the key-value pairs in a mail message header.
func (Header) AddressList
¶
AddressList parses the named header field as a list of addresses.
func (Header) Date
¶
Date parses the Date header field.
func (Header) Get
¶
Get gets the first value associated with the given key. It is case insensitive;
CanonicalMIMEHeaderKey is used to canonicalize the provided key. If there are no
values associated with the key, Get returns “”. To access multiple values of a
key, or to use non-canonical keys, access the map directly.
type Message
¶
A Message represents a parsed mail message.
func ReadMessage
¶
ReadMessage reads a message from r. The headers are parsed, and the body of the
message will be available for reading from 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 := ioutil.ReadAll(m.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s", body)
// Output:
// 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