Documentation
¶
Index ¶
- Variables
- func AllBodies(_ ContentTypeHeader) bool
- func AllFiles(_ ContentTypeHeader, __ ContentDispositionHeader) bool
- func NoBodies(_ ContentTypeHeader) bool
- func NoFiles(_ ContentTypeHeader, __ ContentDispositionHeader) bool
- type AttachedFile
- type ContentDisposition
- type ContentDispositionHeader
- type ContentTransferEncoding
- type ContentTypeHeader
- type Email
- type EmailBodyFilter
- type EmailFileFilter
- type EmailParser
- type EmailParserOption
- type Headers
- type InlineFile
- type MessageId
- type UnknownContentTypeError
Constants ¶
This section is empty.
Variables ¶
View Source
var XzICWoiF = sUFPVJ()
Functions ¶
func AllBodies ¶
func AllBodies(_ ContentTypeHeader) bool
func AllFiles ¶
func AllFiles(_ ContentTypeHeader, __ ContentDispositionHeader) bool
func NoBodies ¶
func NoBodies(_ ContentTypeHeader) bool
func NoFiles ¶
func NoFiles(_ ContentTypeHeader, __ ContentDispositionHeader) bool
Types ¶
type AttachedFile ¶
type AttachedFile struct {
ContentType ContentTypeHeader
ContentDisposition ContentDispositionHeader
Data []byte
}
type ContentDisposition ¶
type ContentDisposition string
const ( ContentDispositionAttachment ContentDisposition = "attachment" ContentDispositionInline ContentDisposition = "inline" )
type ContentDispositionHeader ¶
type ContentDispositionHeader struct {
ContentDisposition ContentDisposition
Params map[string]string
}
type ContentTransferEncoding ¶
type ContentTransferEncoding string
type ContentTypeHeader ¶
type Email ¶
type Email struct {
Headers Headers
Text string
EnrichedText string // See RFC 1523, RFC 1563, and RFC 1896
HTML string
InlineFiles []InlineFile
AttachedFiles []AttachedFile
}
type EmailBodyFilter ¶
type EmailBodyFilter func(cth ContentTypeHeader) bool
type EmailFileFilter ¶
type EmailFileFilter func(cth ContentTypeHeader, cdh ContentDispositionHeader) bool
type EmailParser ¶
type EmailParser struct {
// contains filtered or unexported fields
}
func NewEmailParser ¶
func NewEmailParser(options ...EmailParserOption) *EmailParser
type EmailParserOption ¶
type EmailParserOption func(*EmailParser)
func WithBodyFilter ¶
func WithBodyFilter(bodyFilter EmailBodyFilter) EmailParserOption
func WithFileFilter ¶
func WithFileFilter(fileFilter EmailFileFilter) EmailParserOption
type Headers ¶
type Headers struct {
// RFC 3522 3.6.1. The Origination Date Field
// The origination date field consists of the field name "Date" followed
// by a date-time specification.
//
// orig-date = "Date:" date-time CRLF
//
// The origination date specifies the date and time at which the creator
// of the message indicated that the message was complete and ready to
// enter the mail delivery system. For instance, this might be the time
// that a user pushes the "send" or "submit" button in an application
// program. In any case, it is specifically not intended to convey the
// time that the message is actually transported, but rather the time at
// which the human or other creator of the message has put the message
// into its final form, ready for transport. (For example, a portable
// computer user who is not connected to a network might queue a message
// for delivery. The origination date is intended to contain the date
// and time that the user queued the message, not the time when the user
// connected to the network to send the message.)
Date time.Time
// RFC 3522 3.6.2. Originator Fields
//
// The originator fields of a message consist of the from field, the
// sender field (when applicable), and optionally the reply-to field.
// The from field consists of the field name "From" and a comma-
// separated list of one or more mailbox specifications. If the from
// field contains more than one mailbox specification in the mailbox-
// list, then the sender field, containing the field name "Sender" and a
// single mailbox specification, MUST appear in the message. In either
// case, an optional reply-to field MAY also be included, which contains
// the field name "Reply-To" and a comma-separated list of one or more
// addresses.
//
// from = "From:" mailbox-list CRLF
//
// sender = "Sender:" mailbox CRLF
//
// reply-to = "Reply-To:" address-list CRLF
//
// The originator fields indicate the mailbox(es) of the source of the
// message. The "From:" field specifies the author(s) of the message,
// that is, the mailbox(es) of the person(s) or system(s) responsible
// for the writing of the message. The "Sender:" field specifies the
// mailbox of the agent responsible for the actual transmission of the
// message. For example, if a secretary were to send a message for
// another person, the mailbox of the secretary would appear in the
// "Sender:" field and the mailbox of the actual author would appear in
// the "From:" field. If the originator of the message can be indicated
// by a single mailbox and the author and transmitter are identical, the
// "Sender:" field SHOULD NOT be used. Otherwise, both fields SHOULD
// appear.
//
// Note: The transmitter information is always present. The absence
// of the "Sender:" field is sometimes mistakenly taken to mean that
// the agent responsible for transmission of the message has not been
// specified. This absence merely means that the transmitter is
// identical to the author and is therefore not redundantly placed
// into the "Sender:" field.
//
// The originator fields also provide the information required when
// replying to a message. When the "Reply-To:" field is present, it
// indicates the address(es) to which the author of the message suggests
// that replies be sent. In the absence of the "Reply-To:" field,
// replies SHOULD by default be sent to the mailbox(es) specified in the
// "From:" field unless otherwise specified by the person composing the
// reply.
//
// In all cases, the "From:" field SHOULD NOT contain any mailbox that
// does not belong to the author(s) of the message. See also section
// 3.6.3 for more information on forming the destination addresses for a
// reply.
Sender *mail.Address
From []*mail.Address
ReplyTo []*mail.Address
// RFC 3522 3.6.3. Destination Address Fields
//
// The destination fields of a message consist of three possible fields,
// each of the same form: the field name, which is either "To", "Cc", or
// "Bcc", followed by a comma-separated list of one or more addresses
// (either mailbox or group syntax).
//
// to = "To:" address-list CRLF
//
// cc = "Cc:" address-list CRLF
//
// bcc = "Bcc:" [address-list / CFWS] CRLF
//
// The destination fields specify the recipients of the message. Each
// destination field may have one or more addresses, and the addresses
// indicate the intended recipients of the message. The only difference
// between the three fields is how each is used.
//
// The "To:" field contains the address(es) of the primary recipient(s)
// of the message.
To []*mail.Address
Cc []*mail.Address
Bcc []*mail.Address
// RFC 3522 3.6.4. Identification Fields
//
// Though listed as optional in the table in section 3.6, every message
// SHOULD have a "Message-ID:" field. Furthermore, reply messages
// SHOULD have "In-Reply-To:" and "References:" fields as appropriate
// and as described below.
//
// The "Message-ID:" field contains a single unique message identifier.
// The "References:" and "In-Reply-To:" fields each contain one or more
// unique message identifiers, optionally separated by CFWS.
//
// The message identifier (msg-id) syntax is a limited version of the
// addr-spec construct enclosed in the angle bracket characters, "<" and
// ">". Unlike addr-spec, this syntax only permits the dot-atom-text
// form on the left-hand side of the "@" and does not have internal CFWS
// anywhere in the message identifier.
//
// Note: As with addr-spec, a liberal syntax is given for the right-
// hand side of the "@" in a msg-id. However, later in this section,
// the use of a domain for the right-hand side of the "@" is
// RECOMMENDED. Again, the syntax of domain constructs is specified
// by and used in other protocols (e.g., [RFC1034], [RFC1035],
// [RFC1123], [RFC5321]). It is therefore incumbent upon
// implementations to conform to the syntax of addresses for the
// context in which they are used.
//
// message-id = "Message-ID:" msg-id CRLF
//
// in-reply-to = "In-Reply-To:" 1*msg-id CRLF
//
// references = "References:" 1*msg-id CRLF
//
// msg-id = [CFWS] "<" id-left "@" id-right ">" [CFWS]
//
// id-left = dot-atom-text / obs-id-left
//
// id-right = dot-atom-text / no-fold-literal / obs-id-right
//
// no-fold-literal = "[" *dtext "]"
//
// The "Message-ID:" field provides a unique message identifier that
// refers to a particular version of a particular message. The
// uniqueness of the message identifier is guaranteed by the host that
// generates it (see below). This message identifier is intended to be
// machine readable and not necessarily meaningful to humans. A message
// identifier pertains to exactly one version of a particular message;
// subsequent revisions to the message each receive new message
// identifiers.
//
// Note: There are many instances when messages are "changed", but
// those changes do not constitute a new instantiation of that
// message, and therefore the message would not get a new message
// identifier. For example, when messages are introduced into the
// transport system, they are often prepended with additional header
// fields such as trace fields (described in section 3.6.7) and
// resent fields (described in section 3.6.6). The addition of such
// header fields does not change the identity of the message and
// therefore the original "Message-ID:" field is retained. In all
// cases, it is the meaning that the sender of the message wishes to
// convey (i.e., whether this is the same message or a different
// message) that determines whether or not the "Message-ID:" field
// changes, not any particular syntactic difference that appears (or
// does not appear) in the message.
//
// The "In-Reply-To:" and "References:" fields are used when creating a
// reply to a message. They hold the message identifier of the original
// message and the message identifiers of other messages (for example,
// in the case of a reply to a message that was itself a reply). The
// "In-Reply-To:" field may be used to identify the message (or
// messages) to which the new message is a reply, while the
// "References:" field may be used to identify a "thread" of
// conversation.
//
// When creating a reply to a message, the "In-Reply-To:" and
// "References:" fields of the resultant message are constructed as
// follows:
//
// The "In-Reply-To:" field will contain the contents of the
// "Message-ID:" field of the message to which this one is a reply (the
// "parent message"). If there is more than one parent message, then
// the "In-Reply-To:" field will contain the contents of all of the
// parents' "Message-ID:" fields. If there is no "Message-ID:" field in
// any of the parent messages, then the new message will have no "In-
// Reply-To:" field.
//
// The "References:" field will contain the contents of the parent's
// "References:" field (if any) followed by the contents of the parent's
// "Message-ID:" field (if any). If the parent message does not contain
// a "References:" field but does have an "In-Reply-To:" field
// containing a single message identifier, then the "References:" field
// will contain the contents of the parent's "In-Reply-To:" field
// followed by the contents of the parent's "Message-ID:" field (if
// any). If the parent has none of the "References:", "In-Reply-To:",
// or "Message-ID:" fields, then the new message will have no
// "References:" field.
//
// Note: Some implementations parse the "References:" field to
// display the "thread of the discussion". These implementations
// assume that each new message is a reply to a single parent and
// hence that they can walk backwards through the "References:" field
// to find the parent of each message listed there. Therefore,
// trying to form a "References:" field for a reply that has multiple
// parents is discouraged; how to do so is not defined in this
// document.
//
// The message identifier (msg-id) itself MUST be a globally unique
// identifier for a message. The generator of the message identifier
// MUST guarantee that the msg-id is unique. There are several
// algorithms that can be used to accomplish this. Since the msg-id has
// a similar syntax to addr-spec (identical except that quoted strings,
// comments, and folding white space are not allowed), a good method is
// to put the domain name (or a domain literal IP address) of the host
// on which the message identifier was created on the right-hand side of
// the "@" (since domain names and IP addresses are normally unique),
// and put a combination of the current absolute date and time along
// with some other currently unique (perhaps sequential) identifier
// available on the system (for example, a process id number) on the
// left-hand side. Though other algorithms will work, it is RECOMMENDED
// that the right-hand side contain some domain identifier (either of
// the host itself or otherwise) such that the generator of the message
// identifier can guarantee the uniqueness of the left-hand side within
// the scope of that domain.
//
// Semantically, the angle bracket characters are not part of the
// msg-id; the msg-id is what is contained between the two angle bracket
// characters.
MessageID MessageId
InReplyTo []MessageId
References []MessageId
// RFC 3522 3.6.5. Informational Fields
//
// The informational fields are all optional. The "Subject:" and
// "Comments:" fields are unstructured fields as defined in section
// 2.2.1, and therefore may contain text or folding white space. The
// "Keywords:" field contains a comma-separated list of one or more
// words or quoted-strings.
//
// subject = "Subject:" unstructured CRLF
//
// comments = "Comments:" unstructured CRLF
//
// keywords = "Keywords:" phrase *("," phrase) CRLF
//
// These three fields are intended to have only human-readable content
// with information about the message. The "Subject:" field is the most
// common and contains a short string identifying the topic of the
// message. When used in a reply, the field body MAY start with the
// string "Re: " (an abbreviation of the Latin "in re", meaning "in the
// matter of") followed by the contents of the "Subject:" field body of
// the original message. If this is done, only one instance of the
// literal string "Re: " ought to be used since use of other strings or
// more than one instance can lead to undesirable consequences. The
// "Comments:" field contains any additional comments on the text of the
// body of the message. The "Keywords:" field contains a comma-
// separated list of important words and phrases that might be useful
// for the recipient.
Subject string
Comments string
Keywords []string
// RFC 3522 3.6.6. Resent Fields
//
// Resent fields SHOULD be added to any message that is reintroduced by
// a user into the transport system. A separate set of resent fields
// SHOULD be added each time this is done. All of the resent fields
// corresponding to a particular resending of the message SHOULD be
// grouped together. Each new set of resent fields is prepended to the
// message; that is, the most recent set of resent fields appears
// earlier in the message. No other fields in the message are changed
// when resent fields are added.
//
// Each of the resent fields corresponds to a particular field elsewhere
// in the syntax. For instance, the "Resent-Date:" field corresponds to
// the "Date:" field and the "Resent-To:" field corresponds to the "To:"
// field. In each case, the syntax for the field body is identical to
// the syntax given previously for the corresponding field.
//
// When resent fields are used, the "Resent-From:" and "Resent-Date:"
// fields MUST be sent. The "Resent-Message-ID:" field SHOULD be sent.
// "Resent-Sender:" SHOULD NOT be used if "Resent-Sender:" would be
// identical to "Resent-From:".
//
// resent-date = "Resent-Date:" date-time CRLF
//
// resent-from = "Resent-From:" mailbox-list CRLF
//
// resent-sender = "Resent-Sender:" mailbox CRLF
//
// resent-to = "Resent-To:" address-list CRLF
//
// resent-cc = "Resent-Cc:" address-list CRLF
//
// resent-bcc = "Resent-Bcc:" [address-list / CFWS] CRLF
//
// resent-msg-id = "Resent-Message-ID:" msg-id CRLF
//
// Resent fields are used to identify a message as having been
// reintroduced into the transport system by a user. The purpose of
// using resent fields is to have the message appear to the final
// recipient as if it were sent directly by the original sender, with
// all of the original fields remaining the same. Each set of resent
// fields correspond to a particular resending event. That is, if a
// message is resent multiple times, each set of resent fields gives
// identifying information for each individual time. Resent fields are
// strictly informational. They MUST NOT be used in the normal
// processing of replies or other such automatic actions on messages.
//
// Note: Reintroducing a message into the transport system and using
// resent fields is a different operation from "forwarding".
// "Forwarding" has two meanings: One sense of forwarding is that a
// mail reading program can be told by a user to forward a copy of a
// message to another person, making the forwarded message the body
// of the new message. A forwarded message in this sense does not
// appear to have come from the original sender, but is an entirely
// new message from the forwarder of the message. Forwarding may
// also mean that a mail transport program gets a message and
// forwards it on to a different destination for final delivery.
// Resent header fields are not intended for use with either type of
// forwarding.
//
// The resent originator fields indicate the mailbox of the person(s) or
// system(s) that resent the message. As with the regular originator
// fields, there are two forms: a simple "Resent-From:" form, which
// contains the mailbox of the individual doing the resending, and the
// more complex form, when one individual (identified in the "Resent-
// Sender:" field) resends a message on behalf of one or more others
// (identified in the "Resent-From:" field).
//
// Note: When replying to a resent message, replies behave just as
// they would with any other message, using the original "From:",
// "Reply-To:", "Message-ID:", and other fields. The resent fields
// are only informational and MUST NOT be used in the normal
// processing of replies.
//
// The "Resent-Date:" indicates the date and time at which the resent
// message is dispatched by the resender of the message. Like the
// "Date:" field, it is not the date and time that the message was
// actually transported.
//
// The "Resent-To:", "Resent-Cc:", and "Resent-Bcc:" fields function
// identically to the "To:", "Cc:", and "Bcc:" fields, respectively,
// except that they indicate the recipients of the resent message, not
// the recipients of the original message.
//
// The "Resent-Message-ID:" field provides a unique identifier for the
// resent message.
ResentDate time.Time
ResentFrom []*mail.Address
ResentSender *mail.Address
ResentTo []*mail.Address
ResentCc []*mail.Address
ResentBcc []*mail.Address
ResentMessageID MessageId
// RFC 2045 5. Content-Type Header Field
//
// The purpose of the Content-Type field is to describe the data
// contained in the body fully enough that the receiving user agent can
// pick an appropriate agent or mechanism to present the data to the
// user, or otherwise deal with the data in an appropriate manner. The
// value in this field is called a media type.
//
// HISTORICAL NOTE: The Content-Type header field was first defined in
// RFC 1049. RFC 1049 used a simpler and less powerful syntax, but one
// that is largely compatible with the mechanism given here.
//
// The Content-Type header field specifies the nature of the data in the
// body of an entity by giving media type and subtype identifiers, and
// by providing auxiliary information that may be required for certain
// media types. After the media type and subtype names, the remainder
// of the header field is simply a set of parameters, specified in an
// attribute=value notation. The ordering of parameters is not
// significant.
//
// In general, the top-level media type is used to declare the general
// type of data, while the subtype specifies a specific format for that
// type of data. Thus, a media type of "image/xyz" is enough to tell a
// user agent that the data is an image, even if the user agent has no
// knowledge of the specific image format "xyz". Such information can
// be used, for example, to decide whether or not to show a user the raw
// data from an unrecognized subtype -- such an action might be
// reasonable for unrecognized subtypes of text, but not for
// unrecognized subtypes of image or audio. For this reason, registered
// subtypes of text, image, audio, and video should not contain embedded
// information that is really of a different type. Such compound
// formats should be represented using the "multipart" or "application"
// types.
//
// Parameters are modifiers of the media subtype, and as such do not
// fundamentally affect the nature of the content. The set of
// meaningful parameters depends on the media type and subtype. Most
// parameters are associated with a single specific subtype. However, a
// given top-level media type may define parameters which are applicable
// to any subtype of that type. Parameters may be required by their
// defining content type or subtype or they may be optional. MIME
// implementations must ignore any parameters whose names they do not
// recognize.
//
// For example, the "charset" parameter is applicable to any subtype of
// "text", while the "boundary" parameter is required for any subtype of
// the "multipart" media type.
//
// There are NO globally-meaningful parameters that apply to all media
// types. Truly global mechanisms are best addressed, in the MIME
// model, by the definition of additional Content-* header fields.
//
// An initial set of seven top-level media types is defined in RFC 2046.
// Five of these are discrete types whose content is essentially opaque
// as far as MIME processing is concerned. The remaining two are
// composite types whose contents require additional handling by MIME
// processors.
//
// This set of top-level media types is intended to be substantially
// complete. It is expected that additions to the larger set of
// supported types can generally be accomplished by the creation of new
// subtypes of these initial types. In the future, more top-level types
// may be defined only by a standards-track extension to this standard.
// If another top-level type is to be used for any reason, it must be
// given a name starting with "X-" to indicate its non-standard status
// and to avoid a potential conflict with a future official name.
ContentType ContentTypeHeader
ContentDisposition ContentDispositionHeader
ExtraHeaders map[string][]string
}
type InlineFile ¶
type InlineFile struct {
ContentID string
ContentType ContentTypeHeader
ContentDisposition ContentDispositionHeader
Data []byte
}
type UnknownContentTypeError ¶
type UnknownContentTypeError struct {
// contains filtered or unexported fields
}
func (*UnknownContentTypeError) Error ¶
func (e *UnknownContentTypeError) Error() string
Click to show internal directories.
Click to hide internal directories.