Получите MimeEntity от MimeMessage

У меня есть приложение, которое должно анализировать электронные письма, которые могут быть зашифрованы или нет. У меня есть полный поток, работающий нормально для зашифрованных писем, но те, которые не зашифрованы, доставляют мне проблемы, поскольку я хотел бы использовать тот же код после того, как электронное письмо было расшифровано для того, что я делаю. Когда электронное письмо не было зашифровано, у меня есть MimeMessage, мне нужно каким-то образом передать его в MimeEntity, чтобы он прошел через код синтаксического анализа, который я написал для зашифрованных сообщений.

Вот образец моего кода, обратите внимание

var pkcs7 = message.BodyParts.OfType<ApplicationPkcs7Mime>().FirstOrDefault();
MimeEntity decrypted;
if (pkcs7 != null)
{
    decrypted = decryptAndValidateEmail(pkcs7, certLocation, certPassword);
}
else
{
    //********************//
    //THIS is the code that is not working at this point

    decrypted = message.BodyParts as MimeEntity; 

    //********************//
}

var decryptedParts = new List<MimePart>();
if (decrypted is Multipart)
{
    decryptedParts = breakMultiPart((Multipart)decrypted);
}
else if (decrypted is MimePart)
{
    decryptedParts.Add((MimePart)decrypted);
}
else
{
    throw new InvalidOperationException("Unknown Mime part found");
}


var textParts = decryptedParts.Where(r => r is TextPart);
var htmlParts = textParts.Where(x => ((TextPart)x).IsHtml);
var textBodyParts = textParts.Where(x => !((TextPart)x).IsHtml);
var attachmentParts = decryptedParts.Where(r => !(r is TextPart));

if (htmlParts.Any())
{
    if (htmlParts.Count() > 1)
    {
        throw new InvalidOperationException("multiple html body parts.");
    }
    var htmlPart = (TextPart)htmlParts.First();
   ...

person dmoore1181    schedule 14.02.2019    source источник


Ответы (1)


Что вы хотите:

decrypted = message.Body as MimeEntity;

Свойство BodyParts - это IEnumerable<MimeEntity>, поэтому преобразование его в MimeEntity у вас не сработало.

person jstedfast    schedule 15.02.2019
comment
Можно ли создать MultiPart и добавить к нему все части, а затем отлить как Mime Entity? (Я не вернусь к своему рабочему компьютеру до вторника, чтобы попробовать.) - person dmoore1181; 15.02.2019
comment
Почему ты бы так поступил? - person jstedfast; 15.02.2019
comment
Поскольку код, который я уже написал для синтаксического анализа сообщения, ожидает 1 Mime Entity, если я смогу получить это в MultiPart, это позволит мне использовать тот же самый код дважды и ограничить потенциальные проблемы из-за того же код в двух местах. - person dmoore1181; 19.02.2019
comment
MimeMessage.Body является уже MimeEntity, и, если сообщение представляет собой более чем односоставное сообщение (т. Е. Имеет больше, чем просто текстовое тело, такое как вложения и т. Д.), Тогда MimeMessage.Body является уже < / i> a Multipart, поэтому не нужно добавлять их в новый Multipart. - person jstedfast; 19.02.2019
comment
Это действительно работает. Спасибо, растерялась и не знала, что вложения будут в теле. Спасибо. - person dmoore1181; 19.02.2019