def normalize(email_address, resolve=True):
address = utils.parseaddr(email_address)<EOL>local_part, domain_part = address[<NUM_LIT:1>].lower().split('<STR_LIT:@>')<EOL>if domain_part in MICROSOFT_DOMAINS:<EOL><INDENT>if '<STR_LIT:+>' in local_part:<EOL><INDENT>local_part = local_part.split('<STR_LIT:+>')[<NUM_LIT:0>]<EOL><DEDENT><DEDENT>elif _is_gmail(domain_part, resolve):<EOL><INDENT>local_part = local_part.replace('<STR_LIT:.>', '<STR_LIT>').split('<STR_LIT:+>')[<NUM_LIT:0>]<EOL><DEDENT>elif _is_yahoo(domain_part, resolve):<EOL><INDENT>if '<STR_LIT:->' in local_part:<EOL><INDENT>local_part = local_part.split('<STR_LIT:->')[<NUM_LIT:0>]<EOL><DEDENT><DEDENT>elif _is_fastmail(domain_part, resolve):<EOL><INDENT>domain_segments = domain_part.split('<STR_LIT:.>')<EOL>if len(domain_segments) > <NUM_LIT:2>:<EOL><INDENT>local_part = domain_segments[<NUM_LIT:0>]<EOL>domain_part = '<STR_LIT:.>'.join(domain_segments[<NUM_LIT:1>:])<EOL><DEDENT>elif '<STR_LIT:+>' in local_part:<EOL><INDENT>local_part = local_part.split('<STR_LIT:+>')[<NUM_LIT:0>]<EOL><DEDENT><DEDENT>return '<STR_LIT:@>'.join([local_part, domain_part])<EOL>
Return the normalized email address, removing

    :param str email_address: The normalized email address
    :param bool resolve: Resolve the domain
    :rtype: str