diff --git a/backend.go b/backend.go index d61f3f6..c2909da 100644 --- a/backend.go +++ b/backend.go @@ -42,7 +42,7 @@ type MailOptions struct { Body BodyType // Size of the body. Can be 0 if not specified by client. - Size int + Size int64 // TLS is required for the message transmission. // diff --git a/client.go b/client.go index 66ff78f..7a99a10 100644 --- a/client.go +++ b/client.go @@ -384,7 +384,7 @@ func (c *Client) Mail(from string, opts *MailOptions) error { cmdStr += " BODY=8BITMIME" } if _, ok := c.ext["SIZE"]; ok && opts != nil && opts.Size != 0 { - cmdStr += " SIZE=" + strconv.Itoa(opts.Size) + cmdStr += fmt.Sprintf(" SIZE=%v", opts.Size) } if opts != nil && opts.RequireTLS { if _, ok := c.ext["REQUIRETLS"]; ok { diff --git a/conn.go b/conn.go index 46662e1..0225876 100644 --- a/conn.go +++ b/conn.go @@ -37,7 +37,7 @@ type Conn struct { bdatPipe *io.PipeWriter bdatStatus *statusCollector // used for BDAT on LMTP dataResult chan error - bytesReceived int // counts total size of chunks when BDAT is used + bytesReceived int64 // counts total size of chunks when BDAT is used fromReceived bool recipients []string @@ -321,12 +321,12 @@ func (c *Conn) handleMail(arg string) { return } - if c.server.MaxMessageBytes > 0 && int(size) > c.server.MaxMessageBytes { + if c.server.MaxMessageBytes > 0 && size > c.server.MaxMessageBytes { c.writeResponse(552, EnhancedCode{5, 3, 4}, "Max message size exceeded") return } - opts.Size = int(size) + opts.Size = size case "SMTPUTF8": if !c.server.EnableSMTPUTF8 { c.writeResponse(504, EnhancedCode{5, 5, 4}, "SMTPUTF8 is not implemented") @@ -676,7 +676,7 @@ func (c *Conn) handleBdat(arg string) { return } - if c.server.MaxMessageBytes != 0 && c.bytesReceived+int(size) > c.server.MaxMessageBytes { + if c.server.MaxMessageBytes != 0 && c.bytesReceived+int64(size) > c.server.MaxMessageBytes { c.writeResponse(552, EnhancedCode{5, 3, 4}, "Max message size exceeded") // Discard chunk itself without passing it to backend. @@ -746,7 +746,7 @@ func (c *Conn) handleBdat(arg string) { return } - c.bytesReceived += int(size) + c.bytesReceived += int64(size) if last { c.lineLimitReader.LineLimit = c.server.MaxLineLength diff --git a/server.go b/server.go index 0e63cc7..a278fe2 100644 --- a/server.go +++ b/server.go @@ -40,7 +40,7 @@ type Server struct { Domain string MaxRecipients int - MaxMessageBytes int + MaxMessageBytes int64 MaxLineLength int AllowInsecureAuth bool Debug io.Writer