我写了一个程序,从gmail中读取特定的消息。经过阅读和分析,我想删除它们。然而,我无法让它发挥作用。我使用以下代码:
/// <summary>
/// Deletes a set of E-Mails by their messageID from a given mailbox
/// </summary>
/// <param name="messageIds">The IDs of the messages to delete</param>
/// <param name="mailBox">The mailbox to delete the messages from</param>
public void DeletMails(List<int> messageIds, string mailBox)
{
if (messageIds.Count<1)
{
return;
}
// get the mailbox
Mailbox mails = Client.SelectMailbox(mailBox);
// create a collection of flags to set for the emails
var flags = new FlagCollection();
// set only the deleted flag
flags.Add(new Flag("DELETED"));
Logging.Log.Info($"Deleting {messageIds.Count} mails");
// set the flag for each email in the messageIds
try
{
foreach (var id in messageIds)
{
mails.DeleteMessage(id, true);
mails.SetFlags(id, flags);
}
}
catch (Exception ex)
{
Logging.Log.Error($"{ex.Message}:{ex.StackTrace}");
}
Logging.Log.Info($"Finished deleting {messageIds.Count} mails");
Client.Expunge();
Client.Disconnect();
}
我知道代码中可能有一些重复
- 邮件。DeleteMessage(id,true(
- 邮件。SetFlags(id,flags(
- 客户。Expunge((
但是。它不起作用。
当我登录我的gmail帐户时,我仍然可以看到电子邮件。只有更改:它们被标记为已读,标签将从中删除。(示例:我为来自的每封电子邮件添加标签service@paypal.de标签PayPal使用gmail的过滤器设置,然后我从邮箱PayPal获得所有电子邮件,记住他们的ID并删除他们。之后,它们被标记为已读,不再有PayPal标签,但不会从邮箱PayPal中删除。(
执行代码时不会引发异常。
知道为什么吗?您是否建议使用另一个Mail-API?我正在使用ActiveUp。网邮政
谢谢你的建议。
对于GMail,您需要将它们移到垃圾桶(UID MOVE x "[Gmail/Trash]"
(。注意文件夹的本地化。
Gmail认为"\已删除"标志将删除邮件中的标签,这意味着删除收件箱标签实际上与存档邮件相同。
好吧,我终于想通了。
@最大值:IMAP设置起(半(作用。然而,这有点烦人;(如前所述,您必须:
- 将"当我在IMAP中将邮件标记为已删除时"设置为"删除"–等待客户端更新服务器'
- 将"当邮件被标记为已删除并从最后一个可见的IMAP文件夹中删除时"设置为"立即永远删除邮件">
但如第二个设置中所述,您必须从所有IMAP文件夹中删除邮件。谷歌似乎混合了文件夹和标签。因此,在gmail设置中使用过滤器标记电子邮件实际上会为该电子邮件提供一个辅助标签/文件夹。第一个是"INBOX"。要删除它,这样它就不会出现在gmail应用程序中,你必须从INBOX和其他标记的文件夹中删除该消息,并为此消息设置DELETED标志。但对于INBOX和其他文件夹,您必须这样做,因为它们的消息具有不同的ID。
然后,邮件被移动到Gmail/垃圾箱文件夹,在那里保存30天或类似的时间,然后最终被删除。
谢谢你把我推向正确的方向。