Fix TLS connection in relayMessageToHost. v2.0.0-beta.2
authorRobert Sesek <rsesek@bluestatic.org>
Sat, 6 Jun 2020 19:15:51 +0000 (15:15 -0400)
committerRobert Sesek <rsesek@bluestatic.org>
Sat, 6 Jun 2020 19:15:51 +0000 (15:15 -0400)
The host had the port joined, which caused the cert verification to fail.

smtp/relay.go
smtp/relay_test.go

index ae90fe5be01bf6d7b3c66e1f00b6bef663b01ed8..713eee9806766d81da94e7b9797e9740ee8fa20f 100644 (file)
@@ -30,16 +30,16 @@ func RelayMessage(server Server, env Envelope, log *zap.Logger) {
                        deliverRelayFailure(server, env, log, rcptTo.Address, "failed to lookup MX records", err)
                        return
                }
-               host := mx[0].Host + ":25"
-               relayMessageToHost(server, env, sendLog, rcptTo.Address, host)
+               relayMessageToHost(server, env, sendLog, rcptTo.Address, mx[0].Host, "25")
        }
 }
 
-func relayMessageToHost(server Server, env Envelope, log *zap.Logger, to, host string) {
+func relayMessageToHost(server Server, env Envelope, log *zap.Logger, to, host, port string) {
        from := env.MailFrom.Address
-       log = log.With(zap.String("host", host))
+       hostPort := net.JoinHostPort(host, port)
+       log = log.With(zap.String("host", hostPort))
 
-       c, err := smtp.Dial(host)
+       c, err := smtp.Dial(hostPort)
        if err != nil {
                // TODO - retry, or look at other MX records
                deliverRelayFailure(server, env, log, to, "failed to dial host", err)
index 1934173d3d1e740cf224bd6e2618d5b3ed3c218e..175eea56326c59f96406145b88843afed8f68add 100644 (file)
@@ -44,7 +44,8 @@ func TestRelayRoundTrip(t *testing.T) {
                ID:       "ididid",
        }
 
-       relayMessageToHost(s, env, zap.NewNop(), env.RcptTo[0].Address, l.Addr().String())
+       host, port, _ := net.SplitHostPort(l.Addr().String())
+       relayMessageToHost(s, env, zap.NewNop(), env.RcptTo[0].Address, host, port)
 
        if len(s.messages) != 1 {
                t.Errorf("Expected 1 message to be delivered, got %d", len(s.messages))