Documentation ¶
Overview ¶
Package dsn meant to work with Delivery Status Notification (DSN) per rfc3464: https://datatracker.ietf.org/doc/html/rfc3464
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IsFailed ¶
func IsFailed(n textproto.MIMEHeader) bool
IsFailed returns true if Action field is "failed", meaning message could not be delivered to the recipient.
Types ¶
type DeliveryStatus ¶
type DeliveryStatus struct { // RecipientDSN is Delivery Status Notification per message. MessageDSNs []textproto.MIMEHeader // RecipientDSN is Delivery Status Notification per recipient. RecipientDSNs []textproto.MIMEHeader }
DeliveryStatus provides a machine-readable description of the condition(s) that caused the report to be generated.
type Explanation ¶
type Explanation struct { // Text is a text/plain part of the explanation. Text string // HTML is a text/html part of the explanation. HTML string }
Explanation contains a human-readable description of the condition(s) that caused the report to be generated. Where a description of the error is desired in several languages or several media, a multipart/alternative construct MAY be used.
type Report ¶
type Report struct { // Explanation contains a human-readable description of the condition(s) that caused the report to be generated. Explanation Explanation // DeliveryStatus provides a machine-readable description of the condition(s) that caused the report to be generated. DeliveryStatus DeliveryStatus // OriginalMessage is optional original message or its portion. OriginalMessage []byte }
Report represents delivery status report as per https://datatracker.ietf.org/doc/html/rfc6522. It is container of the MIME type multipart/report and contains 3 parts.
func ParseReport ¶
ParseReport parses p as a "container" for delivery status report (per rfc6522) if p is "multipart/report". Otherwise returns nil.
Example ¶
ExampleParseReport shows how to parse message as Delivery Status Notification (DSN).
package main import ( "fmt" "os" enmime "github.com/AntonSeregin/enmimebuilder" "github.com/AntonSeregin/enmimebuilder/dsn" ) func main() { f, err := os.Open("testdata/simple_dsn.raw") if err != nil { fmt.Println(err) return } defer f.Close() env, err := enmime.ReadEnvelope(f) if err != nil { fmt.Print(err) return } rep, err := dsn.ParseReport(env.Root) if err != nil { fmt.Print(err) return } fmt.Printf("Original message: %s", rep.OriginalMessage) fmt.Printf("Failed?: %t\n", dsn.IsFailed(rep.DeliveryStatus.RecipientDSNs[0])) fmt.Printf("Why?: %s", rep.Explanation.Text) }
Output: Original message: [original message goes here] Failed?: true Why?: [human-readable explanation goes here]