3

通常、生のメールは次のようになります

From root@a1.local.tld 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 <ooo@a1.local.tld>; 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: root@a1.local.tld
Subject: ooooooooooooooooooooooo
To: ooo@a1.local.tld
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--

したがって、PYTHON スクリプトをコーディングして

From
To
Subject
Body

これは私が構築するために探しているコードですか、それともより良い方法がありますか?

a='<title>aaa</title><title>aaa2</title><title>aaa3</title>'

import re
a1 = re.findall(r'<(title)>(.*?)<(/title)>', a)
4

5 に答える 5

17

あなたの最終的なコードスニペットが何と関係があるのか​​ よくわかりません-その時点までHTMLについて何も言及していないので、なぜ突然HTMLの解析の例を挙げているのかわかりません(これはあなたがすべきです)とにかく正規表現を使用しないでください)。

いずれにせよ、電子メール メッセージからヘッダーを取得することに関する最初の質問に答えるために、Python にはそれを行うためのコードが標準ライブラリに含まれています。

import email
msg = email.message_from_string(email_string)
msg['from']  # 'root@a1.local.tld'
msg['to']    # 'ooo@a1.local.tld'
于 2013-07-26T03:03:41.590 に答える
14

幸いなことに、Python はこれをより簡単にします: 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')

体はもっとトリッキーです。コールしemail.is_multipart()ます。それが false の場合は、 を呼び出して体を取得できますemail.get_payload()。ただし、true の場合はemail.get_payload()、メッセージのリストが返されるため、それぞれを呼び出す必要がありますget_payload()

if email.is_multipart():
    for part in email.get_payload():
        print part.get_payload()
else:
    print email.get_payload()
于 2013-07-26T03:09:04.590 に答える
2

サンプルメールに「本文」がありません

電子メールモジュールを使用できます:

import email
    msg = email.message_from_string(email_message_as_text)

次に使用します。

print email['To']
print email['From']

... ...など

于 2013-07-26T03:04:06.087 に答える
1

おそらくemail.parserを使用する必要があります

s = """
From root@a1.local.tld 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 <ooo@a1.local.tld>; 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: root@a1.local.tld
Subject: ooooooooooooooooooooooo
To: ooo@a1.local.tld
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)
于 2013-07-26T03:03:50.317 に答える
0

その生のコンテンツをファイルに書き込むことができます

次に、次のようにファイルを読み取ります。

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)

今は次のinfo_listようになります:

['From: root@a1.local.tld', 'Subject: ooooooooooooooooooooooo', 'To: ooo@a1.local.tld']

Body:はあなたの生のコンテンツには見えません

于 2013-07-26T03:03:26.990 に答える