diff options
Diffstat (limited to 'vendor/github.com/emersion/go-smtp/backend.go')
-rw-r--r-- | vendor/github.com/emersion/go-smtp/backend.go | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/vendor/github.com/emersion/go-smtp/backend.go b/vendor/github.com/emersion/go-smtp/backend.go new file mode 100644 index 0000000..59cea3a --- /dev/null +++ b/vendor/github.com/emersion/go-smtp/backend.go @@ -0,0 +1,108 @@ +package smtp + +import ( + "io" +) + +var ( + ErrAuthRequired = &SMTPError{ + Code: 502, + EnhancedCode: EnhancedCode{5, 7, 0}, + Message: "Please authenticate first", + } + ErrAuthUnsupported = &SMTPError{ + Code: 502, + EnhancedCode: EnhancedCode{5, 7, 0}, + Message: "Authentication not supported", + } +) + +// A SMTP server backend. +type Backend interface { + NewSession(c *Conn) (Session, error) +} + +type BodyType string + +const ( + Body7Bit BodyType = "7BIT" + Body8BitMIME BodyType = "8BITMIME" + BodyBinaryMIME BodyType = "BINARYMIME" +) + +// MailOptions contains custom arguments that were +// passed as an argument to the MAIL command. +type MailOptions struct { + // Value of BODY= argument, 7BIT, 8BITMIME or BINARYMIME. + Body BodyType + + // Size of the body. Can be 0 if not specified by client. + Size int + + // TLS is required for the message transmission. + // + // The message should be rejected if it can't be transmitted + // with TLS. + RequireTLS bool + + // The message envelope or message header contains UTF-8-encoded strings. + // This flag is set by SMTPUTF8-aware (RFC 6531) client. + UTF8 bool + + // The authorization identity asserted by the message sender in decoded + // form with angle brackets stripped. + // + // nil value indicates missing AUTH, non-nil empty string indicates + // AUTH=<>. + // + // Defined in RFC 4954. + Auth *string +} + +// Session is used by servers to respond to an SMTP client. +// +// The methods are called when the remote client issues the matching command. +type Session interface { + // Discard currently processed message. + Reset() + + // Free all resources associated with session. + Logout() error + + // Authenticate the user using SASL PLAIN. + AuthPlain(username, password string) error + + // Set return path for currently processed message. + Mail(from string, opts *MailOptions) error + // Add recipient for currently processed message. + Rcpt(to string) error + // Set currently processed message contents and send it. + // + // r must be consumed before Data returns. + Data(r io.Reader) error +} + +// LMTPSession is an add-on interface for Session. It can be implemented by +// LMTP servers to provide extra functionality. +type LMTPSession interface { + // LMTPData is the LMTP-specific version of Data method. + // It can be optionally implemented by the backend to provide + // per-recipient status information when it is used over LMTP + // protocol. + // + // LMTPData implementation sets status information using passed + // StatusCollector by calling SetStatus once per each AddRcpt + // call, even if AddRcpt was called multiple times with + // the same argument. SetStatus must not be called after + // LMTPData returns. + // + // Return value of LMTPData itself is used as a status for + // recipients that got no status set before using StatusCollector. + LMTPData(r io.Reader, status StatusCollector) error +} + +// StatusCollector allows a backend to provide per-recipient status +// information. +type StatusCollector interface { + SetStatus(rcptTo string, err error) +} |