2013-02-15 11 views
7

IMAPアカウント内の各メールに固有のID文字列を計算するにはどうすればよいですか?PHPでIMAPで一意のメールIDを取得する

私は、1つのIMAPアカウントから欠落しているメールを別のIMAPアカウントに頻繁にコピーする必要があるスクリプトを作成しています。私は各アップデートで重複を避けたいので、1つのアカウントにあるものとその上にあるものを特定する必要があります。

すべてのメールにmessage_idがありますが、message_iduidの違いはわかりません。

imap_appendを使用している場合、message_idは変更されていないようですが、誰でも確認できますか?

各メールの一意のID文字列を生成する場合があり、単にメッセージID、FXの電子メールのタイトルと日付より他の多くのオプションがあるが、私は選択するかわからない: http://www.php.net/manual/en/function.imap-headerinfo.php

+0

( 'From'、' Date'& 'Size')をチェックすると、ユニークな組み合わせが得られるかもしれません。残念ながら、PHP-IMAPを使って作業している人は、マニュアルのサンプルを更新しません。 – SparKot

+0

'imap_uid()'は 'message_id'を返しますか? 'message_id'のないメールには何が返されますか? – SparKot

+0

私はいくつかのopperationsのuidの変更を考える....しかし、私は確信していません... –

答えて

2

私に従って

キー:(日付フィールドから)メールのエポックタイム

しかし同時に、ユーザーが複数のメールを取得することができ、次のようにユニークなIDを生成することができます。

キー:メールのエポックタイム+ MailSize + Recieveingサーバー:特定の時間にメール+ MailSize

のエポックタイムレシーバIDは同じサイズ

KEYのdiferentメールを受け取ることができますIP(受信可能なフィールドから得ることができる)

受信者IDは同じサイズの異なるメールを同じ時間に受け取ることができますipも。

キー:エポックタイム+メールサイズ+レシーブサーバーIP(受信者から取得できる:フィールド)+メールのmd5sum。

このキーの重複の可能性は非常に非常に低いです。

メッセージIDは通常、メッセージを送信したデバイスの識別子であり、まったくドメインに依存し、異なるメールに対しても同じである可能性もあります。

uidは、imapサーバーがメールの同一性を追跡するものです。メールが削除されたり移動されたり、バグのあるサーバーコードがあったりすると、別のメールが同じuidで割り当てられる可能性があります。

7

UIDはメールボックス内で一意ですが、メールボックス間ではマッピングされないため、メールボックス間の電子メールの照合には使用できません。

message_idは、すべてのメールに対してグローバルに一意であることを意図しており、送信メールサーバーによって生成されます。サーバーが正しく構成されている場合、送信するすべてのメッセージにはmessage_idがあり、これを使用してメールボックス間の電子メールを照合することができます。ただし、構成の悪いサーバーではmessage_idを割り当てることはできません。この場合、送信者アドレス& udateのハッシュは、常に私にとって一意であることが証明されています。電子メールが同じマイクロ秒で同じ人から来た場合、同じメッセージになります。注 - Fromからではなく、送信者を使用すると、送信者よりも簡単に偽装することができます。

関連する問題