diff --git a/smtp/commands.go b/smtp/commands.go index eb427a8..3933770 100644 --- a/smtp/commands.go +++ b/smtp/commands.go @@ -67,7 +67,9 @@ func Helo(smtp_session *SMTPSession, message string) (bool, error) { func Ehlo(smtp_session *SMTPSession, message string) (bool, error) { err := smtp_session.Write( fmt.Sprintf( - "250 %v is shy" + "\r\n", + "250-%v is shy" + "\r\n" + + "250-8BITMIME" + "\r\n" + + "250 SMTPUTF8" + "\r\n", smtp_session.GetHost(), ), ) diff --git a/smtp/parsers.go b/smtp/parsers.go index c090ac7..ed122f8 100644 --- a/smtp/parsers.go +++ b/smtp/parsers.go @@ -25,10 +25,15 @@ import ( var ReversePath = regexp.MustCompile(fmt.Sprintf("(?:%v)|<>", path)) var ForwardPath = regexp.MustCompile(path) -var Domain = regexp.MustCompile("\\w+@(\\w+(?:\\.\\w+)*)") +var Domain = regexp.MustCompile(fmt.Sprintf(".+@(%v)", domain)) // https://datatracker.ietf.org/doc/html/rfc5321#page-41 // Is this...legal, m'lord? (no, but ¯\_(ツ)_/¯) // ... // Ok fine. TODO. Happy now? -var path = "<(?:.*:)?(\\w+@\\w+(?:\\.\\w+)*)>" +var path = fmt.Sprintf("<(?:.*:)?(.+@%v)", domain) +var domain = fmt.Sprintf("%v(?:.%v)*", sub_domain, sub_domain) +var sub_domain = fmt.Sprintf("%v(?:%v)?", let_dig, let_str) +var let_str = fmt.Sprintf("%v*%v", let_dig_und, let_dig) +var let_dig = fmt.Sprintf("[\\pL\\d]") +var let_dig_und = fmt.Sprintf("[\\pL\\d\\-]")