From a3cdc260e196d539af156cbbf2e863e3e96bc2db Mon Sep 17 00:00:00 2001 From: IKEDA Soji Date: Sat, 23 Mar 2024 14:01:37 +0900 Subject: [PATCH] Server: The value of BODY parameter is case-insensitive --- conn.go | 10 ++++++---- server_test.go | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/conn.go b/conn.go index 3651023..9ccb141 100644 --- a/conn.go +++ b/conn.go @@ -355,16 +355,18 @@ func (c *Conn) handleMail(arg string) { } opts.RequireTLS = true case "BODY": - switch value { - case "BINARYMIME": + value = strings.ToUpper(value) + switch BodyType(value) { + case BodyBinaryMIME: if !c.server.EnableBINARYMIME { c.writeResponse(504, EnhancedCode{5, 5, 4}, "BINARYMIME is not implemented") return } c.binarymime = true - case "7BIT", "8BITMIME": + case Body7Bit, Body8BitMIME: + // This space is intentionally left blank default: - c.writeResponse(500, EnhancedCode{5, 5, 4}, "Unknown BODY value") + c.writeResponse(501, EnhancedCode{5, 5, 4}, "Unknown BODY value") return } opts.Body = BodyType(value) diff --git a/server_test.go b/server_test.go index f814407..4e0fc2f 100644 --- a/server_test.go +++ b/server_test.go @@ -468,7 +468,7 @@ func TestServer8BITMIME(t *testing.T) { defer s.Close() defer c.Close() - io.WriteString(c, "MAIL FROM: BODY=8BITMIME\r\n") + io.WriteString(c, "MAIL FROM: BODY=8bitMIME\r\n") scanner.Scan() if !strings.HasPrefix(scanner.Text(), "250 ") { t.Fatal("Invalid MAIL response:", scanner.Text())