1

IMAPから未読メッセージを取得しようとしています。電子メールのコンテンツを解析しようとすると、が表示されますlen(email_message.keys()) == 0。私が決して得ないようFromに、ToそしてSubject

印刷された電子メール(email.message_from_string(email_str)):

From nobody Fri Sep 14 13:42:50 2012

1 (RFC822 {1015}
Return-Path: <sender@domain.com>
X-Original-To: recepient@domain.com
Delivered-To: recepient@domain.com
Received: from ec2.....amazonaws.com (unknown [IP])
    (Authenticated sender: sender@domain.com)
    by domain.com (Postfix) with ESMTPA id EACD436CF
    for <recepient@domain.com>; Fri, 14 Sep 2012 12:47:54 +0000 (UTC)
DKIM-Signature: ....
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
From: sender@domain.com
To: recepient@domain.com
Subject: welcome

Dear recipient,

Welcome.

Best,
Robot

そしてここにコードがあります:

def fetch_new_emails(host, port, user, password):
  conn = imaplib.IMAP4(host=host, port=port)

  try:
    (retcode, capabilities) = conn.login(user, password)
    conn.select(readonly=1) # Select inbox or default namespace
    (retcode, messages) = conn.search(None, '(UNSEEN)')
    results = []
    if retcode == 'OK':
      for message in messages[0].split(' '):
        (ret, raw_email) = conn.fetch(message, '(RFC822)')
        if ret == 'OK':
          print raw_email[0]
          email_str = string.join(raw_email[0], "\n")
          email_message = email.message_from_string(email_str)
          email_from = email_message['From']
          to = email_message['To']
          subject = email_message['Subject']
          results.append({
            'from': email_from, 
            'to': to,
            'subject': subject})
  except:
    print sys.exc_info()[1]
    sys.exit(1)
  finally:
    conn.close()
  return results

問題:

print email_message['From']
>>None    
print email_message['To']
>>None
print email_message['Subject']
>>None
4

1 に答える 1

2

行の後に奇妙な空行がありFrom nobody...ます。技術的には、空の行はヘッダーの終わりであり、その後はすべて本文であるため、メッセージには実際にはこれらのヘッダーがありません。

いずれにせよ、IMAP メッセージには行があってはなりませんFrom(これは典型的な Berkeley mbox 形式であり、ほとんどの IMAP サーバーが使用していません。たとえあなたのサーバーが行を持っていたとしても、そのストレージ実装のこの詳細は IMAP クライアントから見えてはなりません)。

奇妙な1 (RFC822 {1015}行も属していません。実際のメッセージの一部ではなく、漠然と IMAP プロトコル応答の一部のように見えます。Return-Path:この特定のケースでは、適切なメッセージはヘッダーから始まります。

IMAP サーバーおよび/またはクライアント コードは製品版ではありませんか?

于 2012-09-14T14:22:00.493 に答える