Validating HTML Emails with Nokogiri, Tidy, and validator.w3.org
# We're validating the HTML generated by the Devise mailer
user = User.new email: '[email protected]'
mail = Devise.mailer.confirmation_instructions(user, self).deliver
html = mail.html_part.body.to_s
Validate with tidy:
File.open('/tmp/html-validation.html', 'w') { |f| f << html }
unless system "tidy -errors -q -f /tmp/validation-errors.txt /tmp/html-validation.html"
fail "Validation failed:\n #{File.read('/tmp/validation-errors.txt')}"
end
Remember to install tidy first:
$ sudo apt-get install tidy
Validate with Nokogiri is not so fun or accurate:
# Validate XML
doc = Nokogiri.XML(html)
doc.errors
# Validate against a schema, if you want
xsd = Nokogiri::XML::Schema(open('http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd'))
xsd.validate(doc)
For validation with w3.org, see this script