aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/emersion/go-smtp/backend.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/emersion/go-smtp/backend.go')
-rw-r--r--vendor/github.com/emersion/go-smtp/backend.go108
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)
+}