c# - 如何可靠地从 gmail 中删除消息?[ActiveUp.Net.Mail]
问题描述
我写了一个程序来读取来自 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,您需要将它们移到垃圾箱 ( UID MOVE x "[Gmail/Trash]"
)。注意文件夹的本地化。
Gmail 认为 \Deleted 标志是从该邮件中删除标签,这意味着删除收件箱标签实际上与归档邮件相同。
推荐阅读
- java - 字符串日期时间转换为 LocalDateTime 对象
- c# - 在 emacs 中在同一行输入多个命令
- scala - 按分区从 Azure Blob 存储读取文件
- javascript - 如何限制 Google Cloud PubSub 以与使用 JavaScript 的不同服务的配额限制保持一致?
- html - Safari阅读器模式的奇怪行为
- node.js - 我的功能是在收到 params.finalemail 后不发送电子邮件
- javascript - React 中的键盘快捷键,react-hotkeys 库
- python - 如何在 python/matplotlib 中设置默认刻度参数?
- html - 居中滑块控制字形
- angular - 如何从单元测试中正确调用函数