使用Java邮件Pop3似乎无法从Gmail中删除电子邮件

时间:2011-11-10 19:07:57

标签: java email gmail

我有一个使用javax.mail充当POP3客户端的java程序。我能够列出并检索Gmail收件箱的内容没问题。但是,我似乎无法删除电子邮件。这是代码的(重要部分):

POP3Store sto=... another method creates and connects the POP3Store
Folder ibx=sto.getFolder("INBOX");
ibx.open(Folder.READ_WRITE);

Message[] msgarr=ibx.getMessages();

for(int mi=0; mi<msgarr.length; mi++) {
    ...do stuff with the message
    msgarr[mi].setFlag(Flags.Flag.DELETED, true);
    }
ibx.close(true); //folder.close(true) indicates to expunge the folder
sto.close();

运行此操作并看到它处理每条消息后,我进入Gmail并且电子邮件仍在那里,甚至显示为未读。如果我重新运行java客户端,它将会看到并处理相同的电子邮件。

这段相同的代码很乐意删除来自Exchange服务器的电子邮件。

如何让Gmail删除电子邮件?

3 个答案:

答案 0 :(得分:6)

Gmail专门处理POP删除。

您可以配置Gmail在Forwarding and POP / IMAP标签上的Gmail设置中通过POP删除邮件时应执行的操作。

答案 1 :(得分:1)

正如SLaks所说,Gmail是一种特殊情况,它有自己的控制删除设置,可以覆盖客户想做的任何事情。

可以在Forwarding and POP / IMAP

中进行修改

但是,我想补充一点,要让Gmail认为“已下载”的邮件,您需要检索每封邮件的内容,如果是多部分邮件类型,则需要检索该邮件中每个部分的内容

以下是一些示例代码,用于强制从Gmail中删除不需要的邮件:

// Grab the content to get the email off the server
// folder is of type javax.mail.Folder and is already in the correct state to get messages from the mail store (Gmail)
Message msg = folder.getMessage(1);
Multipart multipart = (Multipart) msg.getContent();
int partcount = multipart.getCount();
for (int count = 0; count < partcount; count++) {
    multipart.getBodyPart(count);
}

答案 2 :(得分:0)

如果您在pop3用户名中添加“recent:”,则会解决。 示例: recent:yourusername@gmail.com

使用Recent Mode

连接到Gmail