質問

私は Java で Gmail アカウントに接続し、送信された添付ファイルをダウンロードする素晴らしいプログラムを書きました。添付ファイルがダウンロードされると、既読としてマークされ、再度ダウンロードされることはありません。このプログラムは、単一の添付ファイルが 2 回ダウンロードされないように、各プログラムが固有の添付ファイルをダウンロードする複数のインスタンスで実行する必要があります。問題は、現時点では、添付ファイルのサイズが適切な場合、あるプログラムがダウンロード中であるにもかかわらず、別のインスタンスが接続し、既読としてマークされる前に添付ファイルのダウンロードを開始することです。

さまざまなフラグを確認して設定し、フォルダーが開いているかどうかを確認してみましたが、何も機能しないようです。何か解決策はありますか?

アップデート:素早い回答をありがとうございます。残念ながら、他の理由により IMAP はオプションではありません。

役に立ちましたか?

解決

他の人が述べたように、POP3 はこの種のシナリオを実際には意図していません。

どうしても POP3 を使用する必要がある場合は、すべての電子メールを中間サーバーにダウンロードし、中間サーバーでメッセージを分類し、他の各クライアントが利用できるようにすることをお勧めします。

メールの処理を分散させようとしているだけのようです。その場合は、各クライアントを中間サーバーに接続して、次に利用可能なメッセージを取得するだけです。

どのような制約があるのか​​はわかりませんが、電子メール以外の方法で添付ファイルを受信することを検討することもできます。ユーザーがファイルをアップロードしている場合は、各ファイルを処理のためにアプリケーションの次に利用可能なインスタンスに自動的に送信する Web フォームを設定できます。

他のヒント

代わりにIMAPの使用を検討してください-IMAPはクライアントとサーバーの相互作用のために設計されています。

RFC1939 (Post Office Protocol-Version 3)から:

  

POP3は、   の広範な操作操作   サーバー上のメール。通常、メールは   ダウンロードしてから削除しました。より高度な(および複雑な)プロトコルであるIMAP4については、 RFC1730 で説明されています。

POP3は複数同時アクセス向けに作られているとは思わない。

これを自問してください:同じメールボックスにアクセスする複数のプロセスが本当に必要ですか?

その場合、これらのプロセスが互いに通信する方法を見つける必要があります。 共通のデータベースまたはサーバープロセスを使用して、アクションを調整します。

IMAPにはさらにオプションがありますが、「ロック」できるかどうかはわかりません。処理中としてマークする単一のメール。

POP3接続を維持する必要がある場合は、以前にダウンロードしたメッセージIDのローカルデータベースを保持できます。その後、新しいインスタンスは、再度ダウンロードする前にそれをチェックできます。ただし、IMAPはダウンロード前に既読/未読フラグを設定できるため、最良の解決策はIMAPを使用することです。

ダウンロードを開始する前にメールに既読のマークを付けてから、ダウンロードを開始できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top