我可以从Mailkit中的Enumerable <uniqueid>获取一个Enumerable <mimemessage>吗?

时间:2017-02-24 07:50:20

标签: c# .net imap mailkit

我正在尝试优化用于执行搜索和检索结果的方法和方法。

实际上,我有一种方法(例如)在邮件上按身体搜索。它使用TextSearchQuery等,我检索UniqueIds列表。我对使用MimeMessages很感兴趣,MimeMessages基本上拥有我需要处理的所有东西。

public IEnumerable<MimeMessage> BuscarEnCuerpoEmail(string texto, bool noLeidos = false, bool flagged = false)
{
    List<MimeMessage> resultado = new List<MimeMessage>();
    try
    {
        imap.Inbox.Open(FolderAccess.ReadOnly);
        if (!String.IsNullOrWhiteSpace(texto) 
            && !noleidos && !flagged)   //Busca en todos los correos
        {
           var parametrosBusqueda = new TextSearchQuery(SearchTerm.BodyContains, texto)
                .And(SearchQuery.All);
            var resultadoBusqueda = imap.Inbox.Search(parametrosBusqueda);
            return ObtenerMensajes(resultadoBusqueda);
        } . . . .

我有一个方法可以将MimeMessage添加到集合中,每次都添加GetMessage ...

public IEnumerable<MimeMessage> ObtenerMensajes(IEnumerable<UniqueId> ids)
{
    List<MimeMessage> result = new List<MimeMessage>();
    foreach (var id in ids)
    {
        var message = imap.Inbox.GetMessage(id);
        result.Add(message);
        //yield return message;
    }
    return result;
}

有没有办法在服务器中执行GetMessage并直接获取MimeMessages列表?像GetBatchMimeMessages(List<UniqueId>)或者某些东西可能很有趣。

感谢。

1 个答案:

答案 0 :(得分:1)

MailKit没有任何内置方式一次下载一组邮件。一般来说,你不想这样做,因为消息可以是任何大小的,并且它们的集合可能很大。

IMAP的设计使您无论如何都不需要一次完整地下载多封邮件,因为IMAP的目的是成为邮件的远程存储系统。