- if reply := conn.server.VerifyAddress(*address); reply == ReplyOK {
- // Message is addressed to this server. If it's outbound, only support
- // the special send-as addressing.
- if conn.delivery == deliverOutbound {
- if !strings.HasPrefix(address.Address, SendAsAddress) {
- conn.log.Error("internal relay addressing not supported",
- zap.String("address", address.Address))
- conn.reply(ReplyBadMailbox)
- return
- }
- address.Address = strings.TrimPrefix(address.Address, SendAsAddress)
- if DomainForAddress(*address) != DomainForAddressString(conn.authc) {
- conn.log.Error("not authenticated for send-as",
- zap.String("address", address.Address),
- zap.String("authc", conn.authc))
- conn.reply(ReplyBadMailbox)
- return
- }
- if conn.sendAs != nil {
- conn.log.Error("sendAs already specified",
- zap.String("address", address.Address),
- zap.String("sendAs", conn.sendAs.Address))
- conn.reply(ReplyMailboxUnallowed)
- return
- }
- conn.log.Info("doRCPT()",
- zap.String("sendAs", address.Address))
- conn.sendAs = address
- conn.state = stateRecipient
- conn.reply(ReplyOK)
- return
- }
- } else {
- // Message is not addressed to this server, so the delivery must be outbound.
- if conn.delivery == deliverInbound {
- conn.log.Warn("invalid address",
- zap.String("address", address.Address),
- zap.Stringer("reply", reply))
- conn.reply(reply)
- return
- }
+ if reply := conn.server.VerifyAddress(*address); reply != ReplyOK && conn.delivery == deliverInbound {
+ conn.log.Warn("invalid address",
+ zap.String("address", address.Address),
+ zap.Stringer("reply", reply))
+ conn.reply(reply)
+ return