Documentation
¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type EmailAttachment ¶
type EmailAttachment struct {
File multipart.File `json:"-"`
Filename string `json:"filename"`
Size int64 `json:"-"`
ContentType string `json:"type"`
}
EmailAttachment defines information related to an email attachment
type ParsedEmail ¶
type ParsedEmail struct {
// Header values are raw and not pre-processed by SendGrid. They may change depending on the email client. Use carefully
Headers map[string]string
// Please see https://docs.sendgrid.com/for-developers/parsing-email/setting-up-the-inbound-parse-webhook to see the available fields in the email headers
// all fields listed there are available within the headers map except for text which lives in the TextBody field
ParsedValues map[string]string
// Primary email body parsed with \n. A common approach is to Split by the \n to bring every line of the email into a string array
TextBody string
// Envelope expresses the exact email address that the email was addressed to and the exact email address it was from, without extra characters
Envelope struct {
From string `json:"from"`
To []string `json:"to"`
}
// Attachments have been fully parsed to include the filename, size, content type and actual file for uploading or processing
ParsedAttachments map[string]*EmailAttachment
// Raw only
Attachments map[string][]byte
// accessed with text/html and text/plain. text/plain is always parsed to the TextBody field
Body map[string]string
// contains filtered or unexported fields
}
ParsedEmail defines a multipart parsed email Body and Attachments are only populated if the Raw option is checked on the SendGrid inbound configuration and are named for backwards compatability
Example (ParseHeaders) ¶
headers := `
Foo: foo
Bar: baz
`
email := ParsedEmail{
Headers: make(map[string]string),
Body: make(map[string]string),
Attachments: make(map[string][]byte),
rawRequest: nil,
}
email.parseHeaders(headers)
fmt.Println(email.Headers["Foo"])
fmt.Println(email.Headers["Bar"])
Output: foo baz
Example (ParseRawEmail) ¶
rawEmail := `
To: test@example.com
From: example@example.com
Subject: Test Email
Content-Type: multipart/mixed; boundary=TwiLIo
--TwiLIo
Content-Type: text/plain; charset=UTF-8
Hello Twilio SendGrid!
--TwiLIo
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<html><body><strong>Hello Twilio SendGrid!</body></html>
--TwiLIo--
`
email := ParsedEmail{
Headers: make(map[string]string),
Body: make(map[string]string),
Attachments: make(map[string][]byte),
rawRequest: nil,
}
if err := email.parseRawEmail(rawEmail); err != nil {
log.Fatal(err)
}
for key, value := range email.Headers {
fmt.Println(key, value)
}
fmt.Println(email.Body["text/plain; charset=UTF-8"])
Output: To test@example.com From example@example.com Subject Test Email Content-Type multipart/mixed; boundary=TwiLIo Hello Twilio SendGrid!
func Parse ¶
func Parse(request *http.Request) (*ParsedEmail, error)
Parse parses an email using Go's multipart parser and populates the headers, and body This method skips processing the attachment file and is therefore more performant
func ParseWithAttachments ¶
func ParseWithAttachments(request *http.Request) (*ParsedEmail, error)
ParseWithAttachments parses an email using Go's multipart parser and populates the headers, body and processes attachments
func (*ParsedEmail) Validate ¶
func (email *ParsedEmail) Validate() error
Validate validates the DKIM and SPF scores to ensure that the email client and address was not spoofed
Source Files
¶
- inbound.go