我有一个使用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删除电子邮件?
答案 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
连接到Gmail