【问题标题】:How to Get My Replies on an email using MailKit library?如何使用 MailKit 库在电子邮件上获取我的回复?
【发布时间】:2021-10-01 15:26:30
【问题描述】:

我正在使用 MailKit 库从 IMAP 服务器获取消息。

我尝试根据主题获取一封电子邮件,但它只返回客户消息的 ID 而没有我的回复

var uidsX = client.Inbox.Search (SearchQuery.SubjectContains ("Message\'s Subject"));

我还尝试在从 Gmail 中获取邮件 ID 标头的值后对其进行硬编码,但我收到了一个空列表!

const string myReplyId = @"<CAAWrOQmJib_RHUn+3vB9GqATim165zq_Upn_8OTatZZMYGtf5w@mail.gmail.com>";
var myReply = client.Inbox.Search(SearchQuery.HeaderContains("Message-ID", myMessageId));

我什至尝试查看是否可以在已发送文件夹而不是收件箱中找到我的回复,但我得到一个空列表。

那么任何人都可以帮助我吗?

【问题讨论】:

    标签: c# imap mailkit


    【解决方案1】:

    首先,我需要确保我正确理解了您所说的您正在尝试获取“电子邮件回复”时的意思。

    我假设您现在的意思是有人向您发送了一条消息(我们称他为 Joe)并且您回复了他,并且您想编写一个程序来连接到 IMAP 服务器并将您的回复下载回给 Joe .

    假设消息的主题是“drinks?”

    换句话说:

    From: Joe <joe@example.com>
    To: Malek <malek@example.com>
    Subject: drinks?
    Message-Id: <msgid-1@example.com>
    
    Hey Malek, wanna grab drinks after work tonight?
    

    ...你回复他:

    From: Malek <malek@example.com>
    To: Joe <joe@example.com>
    Subject: Re: drinks?
    Message-Id: <msgid-2@example.com>
    References: <msgid-1@example.com>
    In-Reply-To: <msgid-1@example.com>
    
    Can't tonight, but how about after work Friday?
    

    您正在自己的收件箱文件夹中搜索包含“回复:饮料?”的邮件。最后没有匹配?您还尝试使用 Message-Id 值在收件箱中搜索邮件,但没有找到匹配项?

    这很可能是行不通的,因为您用来发送回复的任何客户端都可能最终没有出现在收件箱中,它可能最终出现在已发送文件夹中(或位于硬盘驱动器上的本地已发送文件夹中) .

    您提到您还尝试搜索“已发送”文件夹,仍然没有找到匹配项,这表明该邮件不存在。如果您使用桌面邮件客户端发送它,它可能在您的硬盘驱动器上(通常桌面客户端可以配置为将发送的消息保存在服务器上,但有时它们默认为本地硬盘驱动器)。

    如果您使用 MailKit 的 SmtpClient 发送消息(或 System.Net.Mail 的 SmtpClient),那么该消息将不会保存在任何地方 - 因此它也不在您的 Sent 文件夹中。

    当 SMTP 服务器收到要发送的消息时,它不会将其复制到您的已发送文件夹。这必须使用 IMAP 来完成。

    【讨论】:

    • 首先,感谢您的回复。但是现在如果邮件服务器不保存,我怎么能得到这个消息呢?
    • 简单的答案是:你不能。
    • 好的,谢谢先生。
    【解决方案2】:

    这是我使用 MailKit 的方法。将msg 替换为您想要回复的收件箱文件夹消息。

    
    MessageSummaryItems pullSummaries = MessageSummaryItems.Envelope | MessageSummaryItems.Flags | MessageSummaryItems.InternalDate | MessageSummaryItems.Size | MessageSummaryItems.UniqueId | MessageSummaryItems.GMailLabels | MessageSummaryItems.BodyStructure;
    
    //Open the sent mailbox
    await ((ImapFolder)Client.GetFolder(SpecialFolder.Sent)).OpenAsync(FolderAccess.ReadOnly, CancelToken.Token);
    
    //Query the message by the InReplyTo header
    var replMsg = await SentFolder.SearchAsync(SearchQuery.HeaderContains("In-Reply-To", msg.Envelope.MessageId));
    if (replMsg.Count() > 0)
    {
       var replFetch = await SentFolder.FetchAsync(replMsg, pullSummaries);
       foreach (var sentItem in replFetch)
       {
          MimeMessage RepliedEmail = await SentFolder.GetMessageAsync(sentItem.Index);
          Console.WriteLine($"{RepliedEmail.Subject} from {string.Join(",", RepliedEmail.From.OfType<MailboxAddress>().Select(f => $"{f.Name} <{f.Address}>").ToArray())}");
          Console.WriteLine($"{RepliedEmail.GetTextBody(MimeKit.Text.TextFormat.Plain)}");
       }
                                
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-15
      • 2017-06-27
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 2020-07-14
      • 2021-08-25
      相关资源
      最近更新 更多