2015-11-03 4 views
2

Le module email de Python est idéal pour analyser les en-têtes. Toutefois, l'en-tête To: peut avoir plusieurs destinataires, et il peut y avoir plusieurs en-têtes To:. Alors, comment puis-je séparer chacune des adresses e-mail? Je ne peux pas diviser sur la virgule, puisque la virgule peut être citée. Y a-t-il un moyen de faire cela?Comment extraire plusieurs adresses e-mail à partir d'un en-tête de courrier RFC 2822 en python?

Code de démonstration:

msg="""To: [email protected], "User Two" <[email protected]", "Three, User <[email protected]>        
From: [email protected]                          
Subject: This is a subject                          

This is the message.                            
""" 

import email 

msg822 = email.message_from_string(msg) 
for to in msg822.get_all("To"): 
    print("To:",to) 

Sortie courant:

$ python x.py 
To: [email protected], "User Two" <[email protected]", "Three, User <[email protected]> 
$ 
+0

Quelle sortie voulez-vous? –

+1

Probablement vous devriez aller avec 'shlex' & Co .. MDA diviser les lignes d'adresses par des guillemets (non cotés) – user3159253

+1

liés: https://docs.python.org/2/library/email.util.html#email.utils. getaddresses –

Répondre

1

passe tous les To lignes par email.utils.getaddresses():

msg="""To: [email protected], John Doe <[email protected]>, "Public, John Q." <[email protected]> 
From: [email protected] 
Subject: This is a subject 

This is the message. 
""" 

import email 

msg822 = email.message_from_string(msg) 
for to in email.utils.getaddresses(msg822.get_all("To", [])): 
    print("To:",to) 

Notez que je réécris votre ligne To. Je crois que votre exemple n'était pas un format valide.

Référence: https://docs.python.org/2/library/email.util.html#email.utils.getaddresses

+1

Parfait. J'ai lu les docs, mais je ne pouvais pas trouver ce que je cherchais. Merci! – vy32