@make_certifier()<EOL>def certify_email(value, required=True):
certify_required(<EOL>value=value,<EOL>required=required,<EOL>)<EOL>certify_string(value, min_length=<NUM_LIT:3>, max_length=<NUM_LIT>)<EOL>try:<EOL><INDENT>certification_result = email_validator.validate_email(<EOL>value,<EOL>check_deliverability=False,<EOL>)<EOL><DEDENT>except email_validator.EmailNotValidError as ex:<EOL><INDENT>six.raise_from(<EOL>CertifierValueError(<EOL>message="<STR_LIT>".format(<EOL>value=value,<EOL>ex=six.u(repr(ex))<EOL>),<EOL>value=value,<EOL>required=required,<EOL>),<EOL>ex<EOL>)<EOL><DEDENT>else:<EOL><INDENT>if certification_result['<STR_LIT:email>'] != value:<EOL><INDENT>raise CertifierValueError(<EOL>message="<STR_LIT>".format(<EOL>value=value, normalized=certification_result['<STR_LIT:email>']),<EOL>value=value,<EOL>required=required,<EOL>)<EOL><DEDENT><DEDENT>
Certifier which verifies that email addresses are well-formed.

Does not check that the address exists.

:param six.string_types value:
    The email address to certify. **Should be normalized!**
:param bool required:
    Whether the value can be `None`. Defaults to True.
:return:
    The certified email address.
:rtype:
    six.string_types
:raises CertifierTypeError:
    The type is invalid
:raises CertifierValueError:
    The valid is invalid