Net::SMTPSyntaxError with invalid email address that passed validation
Problem
Error: "Net::SMTPSyntaxError: 501 Invalid command or cannot parse to address" when a user issued a PUT request to /profile/emails/:email_id/resend_confirmation_instructions. See the Sentry report.
Backtrace
Net::SMTPSyntaxError: 501 Invalid command or cannot parse to address
net/smtp.rb:969:in `check_response'
raise res.exception_class, res.message
net/smtp.rb:937:in `getok'
check_response res
net/smtp.rb:865:in `rcptto'
getok("RCPT TO:<#{to_addr}>")
net/smtp.rb:846:in `block in rcptto_list'
rcptto addr
net/smtp.rb:844:in `each'
to_addrs.flatten.each do |addr|
...
(161 additional frame(s) were not displayed)
Net::SMTPSyntaxError: 501 Invalid command or cannot parse to address
Proposal
Validate Email#email with the valid_email gem (instead of DeviseEmailValidator).
Out of scope
Validating other email attributes with the valid_email gem (instead of DeviseEmailValidator) is out of scope. If tightening validation on Email#email is successful, then DeviseEmailValidator can be replaced in a follow-on issue.
Technical notes
Use of Devise.email_regexp for validating emails was introduced in gitlab-foss!2771 (merged)
Edited by Dan Jensen