1

Python と imaplib を使用して、2 つの imap サーバー (gmail) に接続し、日時を使用してそれらの間でメールを照合しようとしています。

私は2つの問題を抱えています。

  • ヘッダーを解析して返された日付は、検索に直接使用できません。形式が間違っています。
  • ヘッダーを解析して返された日付と時刻で検索するために使用する imap 検索は明確ではありません。

Oldmail と NewMail の imap 接続があります。

NewMail.select("[Gmail]/All Mail", readonly=True)
OldMail.select("[Gmail]/All Mail")

ランダムなメール「6001」を選択するだけ

typ, msg = NewMail.fetch('6001', '(BODY[HEADER])')
parser = HeaderParser()
pmsg = parser.parsestr(msg[0][1])

>>> pmsg['Date']
'Tue, 28 Dec 2010 21:56:00 -0700'

しかし、これは使用するのに適切な形式ではありません。確かに簡単な方法があります:-)

searchfor = '(ON "' + pmsg['Date'] + '")'
>>> searchfor
'(ON "Tue, 28 Dec 2010 21:56:00 -0700")'
OldMail.search(None, searchfor)

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py", line 620, in search
    typ, dat = self._simple_command(name, *criteria)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py", line 1060, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py", line 895, in _command_complete
    raise self.error('%s command error: %s %s' % (name, typ, data))
error: SEARCH command error: BAD ['Could not parse command']

私の目標は、Google 移行アプリを使用して転送に失敗した後、2 つのサーバー間で一致するメールを見つけることです。転送された場合は、古いサーバーのメールを削除します。これを行うためのより良い方法を提案できれば、それも役立ちます。

4

1 に答える 1

2

問題は日付の書式設定だけのようです。その場合、これは:

a = datetime.strptime(pmsg['Date'],"%a, %d %b %Y %H:%M:%S %z")

日時オブジェクトが表示され、次のメッセージが表示されます。

searchfor = '(ON "%s")' %(a.strftime("%d-%b-%Y")

これは時間とタイムゾーン情報を無視するため、その日付以降のすべてのメッセージが表示されることに注意してください。

別の方法として、メールを見て、「Message-Id:」ヘッダーが役立つかどうかを確認することをお勧めします。これは、完全に重複するメールの場合、各アカウントで同じである必要があるためです。

于 2011-09-10T09:07:48.760 に答える