Python: como processar coisas como: de, para, corpo, a partir de uma fonte de E-mail raw w/Python [duplicado]
- a analisar o e-mail com Python 3 respostas
o e-mail cru normalmente parece-se com isto
From [email protected] Thu Jul 25 19:28:59 2013
Received: from a1.local.tld (localhost [127.0.0.1])
by a1.local.tld (8.14.4/8.14.4) with ESMTP id r6Q2SxeQ003866
for <[email protected]>; Thu, 25 Jul 2013 19:28:59 -0700
Received: (from root@localhost)
by a1.local.tld (8.14.4/8.14.4/Submit) id r6Q2Sxbh003865;
Thu, 25 Jul 2013 19:28:59 -0700
From: [email protected]
Subject: ooooooooooooooooooooooo
To: [email protected]
Cc:
X-Originating-IP: 192.168.15.127
X-Mailer: Webmin 1.420
Message-Id: <1374805739.3861@a1>
Date: Thu, 25 Jul 2013 19:28:59 -0700 (PDT)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="bound1374805739"
This is a multi-part message in MIME format.
--bound1374805739
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
ooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooo
--bound1374805739--
Então, se eu quisesse codificar um script PYTHON para obter o
From
To
Subject
Body
Este é o código que estou à procura para construir ou há um método melhor?
a='<title>aaa</title><title>aaa2</title><title>aaa3</title>'
import re
a1 = re.findall(r'<(title)>(.*?)<(/title)>', a)
5 answers
Eu realmente não entendo o que seu excerto de código final tem a ver com qualquer coisa - Você não mencionou nada sobre HTML até esse ponto, então eu não sei por que de repente você estaria dando um exemplo de análise HTML (o que você nunca deveria fazer com um regex de qualquer maneira).
De qualquer forma, para responder à sua pergunta original sobre como obter os cabeçalhos de uma mensagem de E-mail, o Python inclui um código para fazer isso na biblioteca padrão:
import email
msg = email.message_from_string(email_string)
msg['from'] # '[email protected]'
msg['to'] # '[email protected]'
Felizmente o Python torna isto mais simples: http://docs.python.org/2.7/library/email.parser.html#email.parser.Parser
from email.parser import Parser
parser = Parser()
emailText = """PUT THE RAW TEXT OF YOUR EMAIL HERE"""
email = parser.parsestr(emailText)
print email.get('From')
print email.get('To')
print email.get('Subject')
O corpo é mais complicado. Call email.is_multipart()
. Se isso for falso, você pode obter o seu corpo chamando email.get_payload()
. No entanto, se for verdade, email.get_payload()
devolverá uma lista de mensagens, por isso terá de ligar get_payload()
para cada uma delas.
if email.is_multipart():
for part in email.get_payload():
print part.get_payload()
else:
print email.get_payload()
Provavelmente devias usar e-mail.analisador
s = """
From [email protected] Thu Jul 25 19:28:59 2013
Received: from a1.local.tld (localhost [127.0.0.1])
by a1.local.tld (8.14.4/8.14.4) with ESMTP id r6Q2SxeQ003866
for <[email protected]>; Thu, 25 Jul 2013 19:28:59 -0700
Received: (from root@localhost)
by a1.local.tld (8.14.4/8.14.4/Submit) id r6Q2Sxbh003865;
Thu, 25 Jul 2013 19:28:59 -0700
From: [email protected]
Subject: ooooooooooooooooooooooo
To: [email protected]
Cc:
X-Originating-IP: 192.168.15.127
X-Mailer: Webmin 1.420
Message-Id: <1374805739.3861@a1>
Date: Thu, 25 Jul 2013 19:28:59 -0700 (PDT)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="bound1374805739"
This is a multi-part message in MIME format.
--bound1374805739
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
ooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooo
--bound1374805739--
"""
import email.parser
msg = email.parser.Parser().parsestr(s)
help(msg)
"corpo" não está presente no seu email de amostra
Pode usaremail Módulo:
import email
msg = email.message_from_string(email_message_as_text)
Depois utilizar:
print email['To']
print email['From']
... ... etc
Podias escrever esse conteúdo em bruto num ficheiro
Então leia o ficheiro assim:
with open('in.txt', 'r') as file:
raw = file.readlines()
get_list = ['From:','To:','Subject:']
info_list = []
for i in raw:
for word in get_list:
if i.startswith(word):
info_list.append(i)
Agora {[2] } será:
['From: [email protected]', 'Subject: ooooooooooooooooooooooo', 'To: [email protected]']
Não vejo {[3] } no seu conteúdo bruto