【发布时间】:2017-04-20 22:09:03
【问题描述】:
我目前正在使用以下代码下载邮件,为其添加自定义标头,然后将该邮件添加回邮件文件夹:
using (ImapClient imap = new ImapClient())
{
imap.ServerCertificateValidationCallback = (s, c, h, e) => true;
imap.Connect(host, port, useSSL);
imap.Authenticate(user, password);
IMailFolder mailFolder = imap.GetFolder(folder);
mailFolder.Open(FolderAccess.ReadWrite);
if (mailFolder.Count > 0)
{
MimeMessage message = mailFolder.GetMessage(0);
var header = message.Headers.FirstOrDefault(h => h.Field == "X-SomeCustomHeader");
if (header == null)
{
message.Headers.Add("X-SomeCustomHeader", "SomeValue");
}
mailFolder.SetFlags(0, MessageFlags.Deleted, true);
mailFolder.Expunge();
UniqueId? newUid = mailFolder.Append(message);
mailFolder.Expunge();
var foundMails = mailFolder.Search(SearchQuery.HeaderContains("X-SomeCustomHeader", "SomeValue"));
if (foundMails.Count > 0)
{
var foundMail = mailFolder.GetMessage(new UniqueId(foundMails.First().Id));
Console.WriteLine(foundMail.Subject);
}
mailFolder.Close(true);
}
}
此代码的问题在于,如果我在文件夹中查看电子邮件的来源,则标题不存在并且foundMails 的计数为零。
如果我查看message,它包含标题,所以如果我也查看message.WriteTo(somePath);,标题也在那里。
我做错了什么?
如果我使用 Outlook 客户端,此代码可以工作,但在 gmail 客户端上使用它会失败。
【问题讨论】:
-
Append方法是否返回 uid(或 null)?如果它返回一个 uid,如果你这样做mailFolder.GetMessage(uid.Value)会发生什么? 那个消息有标题吗? -
还可以尝试获取ProtocolLog,以查看在附加到文件夹时是否包含标题。
-
@jstedfast 它返回一个 uid 但消息也不包含标题。
-
@jstedfast 通过我的测试,这似乎是 gmail 独有的,但不是 100%。
-
协议日志应该有助于确认这一点。