Adjust SMTP error codes and messages to be aligned with the RFCs

This commit is contained in:
Bernhard Froehlich
2018-12-21 09:06:22 +00:00
parent 66fb86be7a
commit 3d648a2ce7

20
main.go
View File

@@ -45,7 +45,7 @@ func connectionChecker(peer smtpd.Peer) error {
if addr, ok := peer.Addr.(*net.TCPAddr); ok { if addr, ok := peer.Addr.(*net.TCPAddr); ok {
peerIP = net.ParseIP(addr.IP.String()) peerIP = net.ParseIP(addr.IP.String())
} else { } else {
return smtpd.Error{Code: 552, Message: "Denied"} return smtpd.Error{Code: 421, Message: "Denied"}
} }
nets := strings.Split(*allowedNets, " ") nets := strings.Split(*allowedNets, " ")
@@ -58,7 +58,7 @@ func connectionChecker(peer smtpd.Peer) error {
} }
} }
return smtpd.Error{Code: 552, Message: "Denied"} return smtpd.Error{Code: 421, Message: "Denied"}
} }
func senderChecker(peer smtpd.Peer, addr string) error { func senderChecker(peer smtpd.Peer, addr string) error {
@@ -71,7 +71,7 @@ func senderChecker(peer smtpd.Peer, addr string) error {
if re.MatchString(addr) { if re.MatchString(addr) {
return nil return nil
} else { } else {
return smtpd.Error{Code: 552, Message: "Denied"} return smtpd.Error{Code: 451, Message: "Bad sender address"}
} }
} }
@@ -85,7 +85,7 @@ func recipientChecker(peer smtpd.Peer, addr string) error {
if re.MatchString(addr) { if re.MatchString(addr) {
return nil return nil
} else { } else {
return smtpd.Error{Code: 552, Message: "Denied"} return smtpd.Error{Code: 451, Message: "Bad recipient address"}
} }
} }
@@ -93,7 +93,7 @@ func authChecker(peer smtpd.Peer, username string, password string) error {
file, err := os.Open(*allowedUsers) file, err := os.Open(*allowedUsers)
if err != nil { if err != nil {
log.Printf("User file not found %v", err) log.Printf("User file not found %v", err)
return smtpd.Error{Code: 552, Message: "Denied"} return smtpd.Error{Code: 535, Message: "Authentication credentials invalid"}
} }
defer file.Close() defer file.Close()
@@ -110,7 +110,7 @@ func authChecker(peer smtpd.Peer, username string, password string) error {
} }
} }
return smtpd.Error{Code: 552, Message: "Denied"} return smtpd.Error{Code: 535, Message: "Authentication credentials invalid"}
} }
func mailHandler(peer smtpd.Peer, env smtpd.Envelope) error { func mailHandler(peer smtpd.Peer, env smtpd.Envelope) error {
@@ -133,13 +133,19 @@ func mailHandler(peer smtpd.Peer, env smtpd.Envelope) error {
log.Printf("delivering using smarthost %s\n", *remoteHost) log.Printf("delivering using smarthost %s\n", *remoteHost)
return smtp.SendMail( err := smtp.SendMail(
*remoteHost, *remoteHost,
auth, auth,
env.Sender, env.Sender,
env.Recipients, env.Recipients,
env.Data, env.Data,
) )
if err != nil {
log.Printf("delivery failed: %v\n", err);
return smtpd.Error{Code: 554, Message: "Forwarding failed"}
}
return nil
} }
func main() { func main() {