smtp alternatives and similar packages
Based on the "Email" category.
Alternatively, view smtp alternatives based on common mentions on social networks and blogs.
-
go-simple-mail
Golang package for send email. Support keep alive connection, TLS and SSL. Easy for bulk SMTP. -
Mailchain
Using Mailchain, blockchain users can now send and receive rich-media HTML messages with attachments via a blockchain address. -
truemail-go
๐ Configurable Golang ๐จ email validator/verifier. Verify email via Regex, DNS, SMTP and even more. Be sure that email address valid and exists. -
go-mail
:incoming_envelope: Simple email interface across multiple service providers (ses, postmark, mandrill, smtp)
InfluxDB - Purpose built for real-time analytics at any scale.
Do you think we are missing an alternative of smtp or a related project?
Popular Comparisons
README
MailHog SMTP Protocol
github.com/mailhog/smtp
implements an SMTP server state machine.
It attempts to encapsulate as much of the SMTP protocol (plus its extensions) as possible without compromising configurability or requiring specific backend implementations.
proto := NewProtocol()
reply := proto.Start()
reply = proto.ProcessCommand("EHLO localhost")
// ...
See MailHog-Server and MailHog-MTA for example implementations.
Commands and replies
Interaction with the state machine is via:
- the
Parse
function - the
ProcessCommand
andProcessData
functions
You can mix the use of all three functions as necessary.
Parse
Parse
should be used on a raw text stream. It looks for an end of line (\r\n
), and if found, processes a single command. Any unprocessed data is returned.
If any unprocessed data is returned, Parse
should be
called again to process then next command.
text := "EHLO localhost\r\nMAIL FROM:<test>\r\nDATA\r\nTest\r\n.\r\n"
var reply *smtp.Reply
for {
text, reply = proto.Parse(text)
if len(text) == 0 {
break
}
}
ProcessCommand and ProcessData
ProcessCommand
should be used for an already parsed command (i.e., a complete
SMTP "line" excluding the line ending).
ProcessData
should be used if the protocol is in DATA
state.
reply = proto.ProcessCommand("EHLO localhost")
reply = proto.ProcessCommand("MAIL FROM:<test>")
reply = proto.ProcessCommand("DATA")
reply = proto.ProcessData("Test\r\n.\r\n")
Hooks
The state machine provides hooks to manipulate its behaviour.
Hook | Description |
---|---|
LogHandler | Called for every log message |
MessageReceivedHandler | Called for each message received |
ValidateSenderHandler | Called after MAIL FROM |
ValidateRecipientHandler | Called after RCPT TO |
ValidateAuthenticationHandler | Called after AUTH |
SMTPVerbFilter | Called for every SMTP command processed |
TLSHandler | Callback mashup called after STARTTLS |
GetAuthenticationMechanismsHandler | Called for each EHLO command |
Behaviour flags
The state machine also exports variables to control its behaviour:
Variable | Description |
---|---|
RejectBrokenRCPTSyntax | Reject non-conforming RCPT syntax |
RejectBrokenMAILSyntax | Reject non-conforming MAIL syntax |
RequireTLS | Require STARTTLS before other commands |
MaximumRecipients | Maximum recipients per message |
MaximumLineLength | Maximum length of SMTP line |
Licence
Copyright ยฉโ 2014-2015, Ian Kent (http://iankent.uk)
Released under MIT license, see [LICENSE](LICENSE.md) for details.
*Note that all licence references and agreements mentioned in the smtp README section above
are relevant to that project's source code only.