Abhilash Raj <raj.abhila...@gmail.com> added the comment:

It is actually parsed correctly and serialized back when you try to convert it 
to a string representation:

from email.parser import BytesFeedParser
import email.policy

def main():
    eml_string = 'From: Nobody <""@example.org>'
    parser = BytesFeedParser(policy = email.policy.default)
    parser.feed(eml_string.encode())
    msg = parser.close()
    print(msg.get('From').addresses[0].addr_spec)
    print(repr(msg.get('From')._parse_tree))
    print(msg.as_string())

Running this gives me:


@example.org
AddressList([Address([Mailbox([NameAddr([DisplayName([Atom([ValueTerminal('Nobody'),
 CFWSList([WhiteSpaceTerminal(' ')])])]), AngleAddr([ValueTerminal('<'), 
AddrSpec([LocalPart([QuotedString([BareQuotedString([ValueTerminal('')])])]), 
ValueTerminal('@'), Domain([DotAtom([DotAtomText([ValueTerminal('example'), 
ValueTerminal('.'), ValueTerminal('org')])])])]), ValueTerminal('>')])])])])])
From: Nobody <""@example.org>


Notice the : 
AddrSpec([LocalPart([QuotedString([BareQuotedString([ValueTerminal('')])])])

print() converts the addr-spec into a string, which omits the quotes. This is 
true for any non-none string too:


he...@example.org
AddressList([Address([Mailbox([NameAddr([DisplayName([Atom([ValueTerminal('Nobody'),
 CFWSList([WhiteSpaceTerminal(' ')])])]), AngleAddr([ValueTerminal('<'), 
AddrSpec([LocalPart([QuotedString([BareQuotedString([ValueTerminal('hello')])])]),
 ValueTerminal('@'), Domain([DotAtom([DotAtomText([ValueTerminal('example'), 
ValueTerminal('.'), ValueTerminal('org')])])])]), ValueTerminal('>')])])])])])
From: Nobody <"hello"@example.org>


If you prefer the string representation of the header's parsed value, you can 
try:

    print(msg.get('From').fold(policy=email.policy.default))

Which prints:

    From: Nobody <""@example.org>

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue38232>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to