【发布时间】:2021-01-19 00:45:08
【问题描述】:
我编写了一个程序来读取来自 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();
}
我知道代码中有一些重复项
- mails.DeleteMessage(id, true);
- mails.SetFlags(id, flags);
- Client.Expunge();
但是。它不起作用。
当我登录我的 gmail 帐户时,我仍然可以看到电子邮件。只有改变:它们被标记为已读并且标签被从它们中移除。 (例如:我使用 gmail 的过滤器设置将来自 service@paypal.de 的每封电子邮件标记为 PayPal,然后我从邮箱 PayPal 中获取所有电子邮件并记住它们的 ID 并删除它们。之后它们被标记为已读和它们不再具有 PayPal 标签,但并未从邮箱 PayPal 中删除。)
执行代码时没有抛出异常。
知道为什么吗?你推荐使用另一个 Mail-API 吗?我正在使用 ActiveUp.Net.Mail。
感谢您的建议。
【问题讨论】:
-
对于 gmail,您需要将它们移至回收站。删除它们会删除文件夹标签,这实际上使它们“存档”。
-
@Max 啊,好的。谢谢你的帮助。你能把它作为答案,这样我就可以结束这个话题了吗?