From 587b6ad4acdb7acda294c5aa0eb86baaa80e44c6 Mon Sep 17 00:00:00 2001 From: Christian Joergensen Date: Mon, 14 Jul 2014 20:44:14 +0200 Subject: [PATCH] Examples. --- example_test.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ protocol.go | 2 +- smtpd.go | 2 +- 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 example_test.go diff --git a/example_test.go b/example_test.go new file mode 100644 index 0000000..4e784d3 --- /dev/null +++ b/example_test.go @@ -0,0 +1,48 @@ +package smtpd + +import ( + "bitbucket.org/chrj/smtpd" + "errors" + "net" + "net/smtp" + "strings" +) + +func ExampleServer() { + + // No-op server. Accepts and discards + server := &smtpd.Server{} + server.serve() + + // Relay server. Accepts only from single IP address and forwards using the Gmail smtp + server := &smtpd.Server{ + + Addr: "0.0.0.0:10025", + + HeloChecker: func(peer smtpd.Peer) error { + if !strings.HasPrefix(peer.Addr.String(), "42.42.42.42:") { + return errors.New("Denied") + } + return nil + }, + + Handler: func(peer smtpd.Peer, env smtpd.Envelope) error { + return smtp.SendMail( + "smtp.gmail.com:587", + smtp.PlainAuth( + "", + "username@gmail.com", + "password", + "smtp.gmail.com", + ), + env.Sender, + env.Recipients, + env.Data, + ) + }, + + } + + server.serve() + +} diff --git a/protocol.go b/protocol.go index 370a811..359aa98 100644 --- a/protocol.go +++ b/protocol.go @@ -343,7 +343,7 @@ func (session *session) handleAUTH(cmd command) { return } - username = string(parts[0]) + username = string(parts[1]) password = string(parts[2]) case "LOGIN": diff --git a/smtpd.go b/smtpd.go index 6d8fed3..ef463df 100644 --- a/smtpd.go +++ b/smtpd.go @@ -1,4 +1,4 @@ -// Package smtpd implements a SMTP server with support for STARTTLS, authentication and restrictions on the different stages of the SMTP session. +// Package smtpd implements a SMTP server with support for STARTTLS, authentication (PLAIN/LOGIN) and optional restrictions on the different stages of the SMTP session. package smtpd import (