@@ -231,16 +231,20 @@ mod tests {
231231 use super :: * ;
232232
233233 #[ test]
234- fn user_email_validation ( ) {
234+ fn invalid_user_emails ( ) {
235235 let invalid_emails = [
236236 "invalid" ,
237+ "invalid@@example.com" ,
237238 "invalid@invalid@example.com" ,
238239 "user@example-.com" ,
239240 "user@[127.0.0.1]" ,
240241 "user@[::1]" ,
241242 "more-than-64-characters-in-the-local-part-is-toooooooooooooo-long@example.com" ,
242243 "more-than-254-characters-total-is-tooo-long@example.example.example.example.example.example.example.example.example.example.example.example.example.example.example.example.example.example.example.example.example.example.example.example.example.example.com" ,
243244 "user with spaces@example.com" ,
245+ ".leading-dot@example.com" ,
246+ "trailing-dot.@example.com" ,
247+ "adjacent..dots@example.com" ,
244248 "\" \" @example.com" ,
245249 "\" user-with\n line-break\" @example.com" ,
246250 "\" user-with-unbalanced\" quotes\" @example.com" ,
@@ -267,27 +271,33 @@ mod tests {
267271 ] ;
268272
269273 for email in invalid_emails {
270- email
271- . parse :: < UserEmail > ( )
272- . expect_err ( "user email should be invalid" ) ;
274+ assert ! (
275+ email. parse:: <UserEmail >( ) . is_err( ) ,
276+ "user email {email:?} should be invalid" ,
277+ ) ;
273278 }
274279 }
275280
276281 #[ test]
277- fn weird_user_emails_allowed ( ) {
282+ fn valid_user_emails ( ) {
278283 let valid_emails = [
279284 "user-of-a-mail-server-on-a-tld@com" ,
280285 "64-characters-in-the-local-part-is-fiiiiiiiiiiiiiiiiiiiiiiiiiine@example.com" ,
281286 "\" unnecessarily.quoted.user\" @example.com" ,
287+ "\" quoted @ sign\" @example.com" ,
282288 "\" quoted user with unnecessary \\ escapes\" @example.com" ,
283289 "\" quoted user with unnecessary\\ escapes on special characters\" @example.com" ,
284290 "\" quoted user with spaces and \\ \" escapes\" @example.com" ,
291+ // While not allowed by RFC 5321 or RFC 5322, the below forms are allowed with the
292+ // SMTPUTF8 extension specified by RFC 6531.
293+ "non-ASCII-in-user-📂🌱@example.com" ,
294+ "non-ASCII-in-domain@📂🌱.example.com" ,
285295 ] ;
286296
287297 for email in valid_emails {
288298 email
289299 . parse :: < UserEmail > ( )
290- . expect ( "user email should be valid" ) ;
300+ . unwrap_or_else ( |error| panic ! ( "user email {email:?} should be valid: {error}" ) ) ;
291301 }
292302 }
293303
0 commit comments