...

パッケージ mail

import "net/mail"
概要
目次

概要 ▾

mail パッケージは,メールメッセージのパースを実装します。

ほとんどの部分で,このパッケージは RFC 5322 で規定され, RFC 6532 で拡張された構文に従います。 注目すべき相違点:

* 古い経路形式は解析されません。
* 行間でアドレスを区切るなど,スペースの全範囲 (CFWS 構文要素) はサポートされていません。
* Unicode 正規化は行われません。
* 特殊文字 ()[]:;@\ は,名前に引用符を付けずに表示することができます。

変数

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

func ParseDate 1.8

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

ParseDate は RFC 5322 の日付文字列を解析します。

type Address

アドレスは 1 つのメールアドレスを表します。 "Barry Gibbs <bg@example.com>" のようなアドレスは, Address{Name: "Barry Gibbs", Address: "bg@example.com"} として表されます。

type Address struct {
    Name    string // 適切な名前。空かもしれません。
    Address string // user@domain
}

func ParseAddress 1.1

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

ParseAddress は, 1 つの 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

文字列は,アドレスを有効な RFC 5322 アドレスとしてフォーマットします。 アドレスの名前に非 ASCII 文字が含まれている場合,名前は RFC 2047 に従って表示されます。

type AddressParser 1.5

AddressParser は RFC 5322 アドレスパーサーです。

type AddressParser struct {
    // WordDecoder は,オプションで RFC 2047 encoded-word のデコーダを指定します。
    WordDecoder *mime.WordDecoder
}

func (*AddressParser) Parse 1.5

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

Parse は, "Gogh Fir <gf@example.com>" または "foo@example.com" の形式の 1 つの RFC 5322 アドレスを解析します。

func (*AddressParser) ParseList 1.5

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

ParseList は,与えられた文字列を "Gogh Fir <gf@example.com>" または "foo@example.com" の形式のカンマ区切りアドレスのリストとして解析します。

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 := ioutil.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