IMAP メッセージには、UID
私たち全員が喜ぶ があります。ただし、POP3 メッセージの一意の ID を生成する方法を見つけようとしていて、問題があります (hotmail.com のような古いシステムでは POP3 しか許可されません)。
クライアントへの利用可能なメッセージは、POP セッションがメールドロップを開くときに固定され、そのセッションにローカルなメッセージ番号によって、またはオプションで、POP サーバーによってメッセージに割り当てられた一意の識別子によって識別されます。この一意の識別子は永続的でメールドロップに一意であり、クライアントは異なる POP セッションで同じメッセージにアクセスできます。メールが取得され、メッセージ番号によって削除のマークが付けられます。クライアントがセッションを終了すると、削除対象としてマークされたメールはメールドロップから削除されます。-ウィキペディア
ただし、基本的なLIST
コマンドは単に一時番号の配列を返すだけで、メールを取得できるようです。ただし、これらの番号は決して一意ではないため、UIDL と呼ばれる別の拡張機能が追加されたようです: CAPA (POP3 拡張メカニズム)。
POP3UIDL
は、メッセージが存在する限りa は一意であると述べています。
メッセージの一意の ID は、0x21 から 0x7E の範囲の 1 から 70 文字で構成される任意のサーバーで決定される文字列であり、メールドロップ内のメッセージを一意に識別し、セッション間で持続します。UPDATE 状態に移行せずにセッションが終了した場合でも、この永続性は必要です。一意の ID を使用するエンティティが存在する限り、サーバーは特定のメールドロップで一意の ID を再利用してはなりません。
削除済みとしてマークされたメッセージはリストされないことに注意してください。
サーバーの実装では、任意に割り当てられた一意の ID をメールドロップに格納することが一般的に望ましいですが、この仕様は、一意の ID をメッセージのハッシュとして計算できるようにすることを目的としています。クライアントは、メールドロップ内のメッセージの 2 つの同一のコピーが同じ一意の ID を持つ状況を処理できる必要があります。
そのため、1 年後に (最初のメッセージが削除された後) 同じ UIDL を持つ別のメッセージをダウンロードする可能性があり、システムで競合する可能性があると思います。
メッセージ本文全体をハッシュして、それを ID として使用する必要がありますか?
電子メール全体を取得してハッシュするTOP [id] 1
のではなく、受信サーバーが常に何らかの種類の情報を追加するため、既存の電子メールと一致してはならないヘッダー (および最初の行) をハッシュするために使用する必要がありますか? 攻撃者が衝突を引き起こすことは決してありませんでした。
MDaemon プログラムは、部分的なヘッダー ハッシュの問題に取り組んでいるようです。
MDaemon は、メッセージ名、日付スタンプ、サイズ、およびメッセージに関するその他の詳細を使用して UIDL 結果を構築します。その結果、メッセージがサーバー上で変更されると、名前を変更しなくても、メール クライアントには「新規」として表示されます。
POP3 メールの ID を作成する正しい方法は何ですか?
注: メールにはMessage-ID
ヘッダーが含まれていることがよくありますが、システムを混乱させる攻撃ベクトルとして使用される可能性があるため、これに頼ることはできません。また、一部の電子メール クライアントでは無視されます。