Получить MimeEntity от MimeMessage - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть приложение, которое должно анализировать электронные письма, которые могут быть зашифрованы или нет.У меня есть полный поток, работающий нормально для писем, которые зашифрованы, но те, которые не зашифрованы, доставляют мне проблемы, так как я хотел бы использовать тот же код, как только письмо было расшифровано для того, что я делаю.Когда письмо не было зашифровано, у меня есть 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();
   ...

1 Ответ

0 голосов
/ 15 февраля 2019

То, что вы хотите, это:

decrypted = message.Body as MimeEntity;

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

...