github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/net/mail/message.go (about) 1 // Copyright 2011 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 /* 6 パッケージメールは、メールメッセージの解析を実装しています。 7 8 このパッケージは、ほとんどの部分でRFC 5322によって指定され、 9 RFC 6532によって拡張された構文に従います。 10 注目すべき相違点: 11 - 廃止されたアドレス形式は解析されません。これには、 12 組み込みのルート情報を持つアドレスが含まれます。 13 - アドレスを複数の行に分割するなど、スペーシングの全範囲(CFWS構文要素)は 14 サポートされていません。 15 - Unicodeの正規化は行われません。 16 - mbox形式(RFC 4155)のように、先頭のFrom行が許可されます。 17 */ 18 package mail 19 20 import ( 21 "github.com/shogo82148/std/errors" 22 "github.com/shogo82148/std/io" 23 "github.com/shogo82148/std/mime" 24 "github.com/shogo82148/std/time" 25 ) 26 27 // メッセージは解析されたメールメッセージを表します。 28 type Message struct { 29 Header Header 30 Body io.Reader 31 } 32 33 // ReadMessageはrからメッセージを読み取ります。 34 // ヘッダーが解析され、メッセージの本文はmsg.Bodyから読み取れるようになります。 35 func ReadMessage(r io.Reader) (msg *Message, err error) 36 37 // ParseDateはRFC 5322形式の日付文字列を解析します。 38 func ParseDate(date string) (time.Time, error) 39 40 // Headerはメールメッセージヘッダー内のキーと値のペアを表します。 41 type Header map[string][]string 42 43 // Getは指定されたキーに関連付けられた最初の値を取得します。 44 // 大文字と小文字の区別はなく、CanonicalMIMEHeaderKeyが使用されます。 45 // キーに関連付けられた値がない場合、Getは "" を返します。 46 // キーの複数の値にアクセスする場合や、正準形でないキーを使用する場合は、 47 // マップに直接アクセスしてください。 48 func (h Header) Get(key string) string 49 50 var ErrHeaderNotPresent = errors.New("mail: header not in message") 51 52 // Date ヘッダーフィールドをパースします。 53 func (h Header) Date() (time.Time, error) 54 55 // AddressListは指定されたヘッダーフィールドをアドレスのリストとして解析します。 56 func (h Header) AddressList(key string) ([]*Address, error) 57 58 // Addressは1つのメールアドレスを表します。 59 // "Barry Gibbs <bg@example.com>"のようなアドレスは、 60 // Address{Name: "Barry Gibbs", Address: "bg@example.com"}として表されます。 61 type Address struct { 62 Name string 63 Address string 64 } 65 66 // ParseAddressは単一のRFC 5322アドレスを解析します。例:「Barry Gibbs <bg@example.com>」 67 func ParseAddress(address string) (*Address, error) 68 69 // ParseAddressListは与えられた文字列をアドレスのリストとして解析します。 70 func ParseAddressList(list string) ([]*Address, error) 71 72 // AddressParserはRFC 5322形式のアドレスパーサーです。 73 type AddressParser struct { 74 // WordDecoderはRFC 2047でエンコードされた単語のデコーダをオプションで指定します。 75 WordDecoder *mime.WordDecoder 76 } 77 78 // Parseは" Gogh Fir <gf@example.com>"または"foo@example.com"という形式の単一のRFC 5322アドレスを解析します。 79 func (p *AddressParser) Parse(address string) (*Address, error) 80 81 // ParseListは与えられた文字列をコンマで区切られたアドレスのリストとして解析します。 82 // 形式は「Gogh Fir <gf@example.com>」または「foo@example.com」です。 83 func (p *AddressParser) ParseList(list string) ([]*Address, error) 84 85 // Stringはアドレスを有効なRFC 5322形式のアドレスとしてフォーマットします。 86 // アドレスの名前に非ASCIIの文字が含まれている場合、名前はRFC 2047に従って表示されます。 87 func (a *Address) String() string