mail

package
v1.23.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 14, 2024 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

mailパッケージは、メールメッセージの解析を実装しています。

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

  • 廃止されたアドレス形式は解析されません。これには、 組み込みのルート情報を持つアドレスが含まれます。
  • アドレスを複数の行に分割するなど、スペーシングの全範囲(CFWS構文要素)は サポートされていません。
  • Unicodeの正規化は行われません。
  • mbox形式(RFC 4155)のように、先頭のFrom行が許可されます。

Index

Examples

Constants

This section is empty.

Variables

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

Functions

func ParseDate added in v1.8.0

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

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

Types

type Address

type Address struct {
	Name    string
	Address string
}

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

func ParseAddress added in v1.1.0

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

ParseAddressは単一のRFC 5322アドレスを解析します。例:「Barry Gibbs <bg@example.com>」

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/net/mail"
)

func main() {
	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 ParseAddressList added in v1.1.0

func ParseAddressList(list string) ([]*Address, error)

ParseAddressListは与えられた文字列をアドレスのリストとして解析します。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/net/mail"
)

func main() {
	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 (*Address) String

func (a *Address) String() string

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

type AddressParser added in v1.5.0

type AddressParser struct {
	// WordDecoderはRFC 2047でエンコードされた単語のデコーダをオプションで指定します。
	WordDecoder *mime.WordDecoder
}

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

func (*AddressParser) Parse added in v1.5.0

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

Parseは" Gogh Fir <gf@example.com>"または"foo@example.com"という形式の単一のRFC 5322アドレスを解析します。

func (*AddressParser) ParseList added in v1.5.0

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

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

type Header map[string][]string

Headerはメールメッセージヘッダー内のキーと値のペアを表します。

func (Header) AddressList

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

AddressListは指定されたヘッダーフィールドをアドレスのリストとして解析します。

func (Header) Date

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

Date ヘッダーフィールドをパースします。

func (Header) Get

func (h Header) Get(key string) string

Getは指定されたキーに関連付けられた最初の値を取得します。 大文字と小文字の区別はなく、CanonicalMIMEHeaderKeyが使用されます。 キーに関連付けられた値がない場合、Getは "" を返します。 キーの複数の値にアクセスする場合や、正準形でないキーを使用する場合は、 マップに直接アクセスしてください。

type Message

type Message struct {
	Header Header
	Body   io.Reader
}

メッセージは解析されたメールメッセージを表します。

func ReadMessage

func ReadMessage(r io.Reader) (msg *Message, err error)

ReadMessageはrからメッセージを読み取ります。 ヘッダーが解析され、メッセージの本文はmsg.Bodyから読み取れるようになります。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/io"
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/net/mail"
	"github.com/shogo82148/std/strings"
)

func main() {
	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)

}
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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL