我一直在使用java邮件( POP3客户端和IMAP )来自动执行Gmail操作。其中一项操作是删除邮件,我使用以下代码 -
public void deleteInboxMasseges() throws IOException, MessagingException
{
store = getConnection(EMAIL_USERNAME, EMAIL_PASSWORD);
if (store != null)
{
int inboxMassegeCount = inbox.getMessageCount();
Message[] messages = inbox.getMessages();
for (int i = 0; i < inboxMassegeCount; i++)
{
messages[i].setFlag(Flags.Flag.DELETED, true);
}
inbox.expunge();
}
}
邮件将从&#34; 收件箱&#34;中删除但它可用于&#34; 所有邮件&#34;只有不在&#34; 垃圾箱&#34;夹。我想永久删除它。有没有直接删除邮件的方法,而不是从&#34; 收件箱&#34;
删除邮件?答案 0 :(得分:3)
不幸的是,这是一个多步骤的过程,需要使用IMAP,而不是POP。要从GMail中永久删除某些内容,您需要将其移至“废纸篓”,然后将其从废纸篓中删除。它支持MOVE扩展,所以这不是太糟糕。您还必须发现垃圾文件夹名称,可能使用LIST,因为它已本地化。
a001 UID MOVE xxx "[Gmail]/Trash"
* OK [MOVEUID xxxxxxx yyy] Message moved
a002 SELECT "[Gmail]/Trash"
a003 UID STORE yyy +FLAGS (\Deleted)
a004 UID EXPUNGE yyy
然后它会真的消失。
对于大多数用户来说,将其移至垃圾箱就足够了。它会在以后消失。
答案 1 :(得分:0)
您可能会在Gmail帐户设置中解决此问题。
Gmail在设置页面,转发和POP / IMP 标签中提供以下选项:
当邮件被标记为已删除并从最后一个可见的IMAP文件夹中删除时:
尝试在帐户中设置最后一个选项(立即删除邮件)并再次运行您的代码。
祝你好运。答案 2 :(得分:0)
请按照以下步骤使用JavaMail API从Gmail永久删除邮件
关闭商店
def deleteMessages(String userName, String password) {
Properties properties = new Properties();
String host = "imap.gmail.com";
String port = "993";
String mailStoreType = "pop3";
// server setting
properties.put("mail.imap.host", host);
properties.put("mail.imap.port", port);
// SSL setting
properties.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.imap.socketFactory.fallback", "false");
properties.setProperty("mail.imap.socketFactory.port", String.valueOf(port));
Session session = Session.getDefaultInstance(properties);
try {
// connects to the message store
Store store = session.getStore("imap");
store.connect(userName, password);
// opens the inbox folder
Folder folderInbox = store.getFolder("INBOX");
folderInbox.open(Folder.READ_WRITE);
//opens the trash folder
Folder folderBin = store.getFolder("[Gmail]/Bin");
folderBin.open(Folder.READ_WRITE);
// fetches new messages from server
Message[] arrayMessages = folderInbox.getMessages();
//Copy messages from inbox to Trash
folderInbox.copyMessages(arrayMessages, folderBin)
arrayMessages = folderBin.getMessages();
for (int i = 0; i < arrayMessages.length; i++) {
Message message = arrayMessages[i];
String subject = message.getSubject();
message.setFlag(Flags.Flag.DELETED, true);
}
// expunges the folder to remove messages which are marked deleted
boolean expunge = true;
folderBin.close(expunge);
folderInbox.close(expunge);
// disconnect
store.close();
} catch (NoSuchProviderException ex) {
System.out.println("No provider.");
ex.printStackTrace();
} catch (FolderNotFoundException ex) {
System.out.println("Folder Not Found")
ex.printStackTrace();
} catch (MessagingException ex) {
System.out.println("Could not connect to the message store.");
ex.printStackTrace();
}
}