Есть ли способ извлечь вложение из содержимого Mime сообщения электронной почты без использования службы Exchange? - PullRequest
0 голосов
/ 05 апреля 2019

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

Я попытался в обратном порядке получить файл eml и загрузить его снова, чтобы получить подробности.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Прежде всего, большое спасибо MadDev за помощь !!!

Вот код, который я использовал:

Примечание: здесь, в случае, сохраненная электронная почта всегда будет иметь другой emlприкрепленный к нему файл, основанный на бизнес-логике.

    protected static void MimeProcessor(MemoryStream stream)
    {

        try
        {
            var parser = new MimeParser(stream, MimeFormat.Default);
            var message = parser.ParseMessage();
            var multipart = message.Body as Multipart;
            //Found the Attachment as Message Part
            var OriginalMessage = multipart.ToList().LastOrDefault();
            if (OriginalMessage is MessagePart)
            {
                using (var memory = new MemoryStream())
                {
                    ((MessagePart)OriginalMessage).Message.WriteTo(memory);
                    var bytes = memory.ToArray();
                    File.WriteAllBytes("C:\\Test\\TestMessage.eml", bytes);
                }
            }

        }
        catch (Exception)
        {

            throw;
        }

    }
0 голосов
/ 05 апреля 2019

Вы можете использовать что-то вроде MimeKit для этого. Страница GitHub содержит примеры того, как анализировать сообщения MIME и как получать вложения.

Вот пример того, как получить вложения в массив байтов:

var mimeMessage = MimeMessage.Load(@"test.eml");
var attachments = mimeMessage.Attachments.ToList();

foreach (var attachment in attachments)
{
    using (var memory = new MemoryStream())
    {
        if (attachment is MimePart)
            ((MimePart)attachment).Content.DecodeTo(memory);
        else
            ((MessagePart)attachment).Message.WriteTo(memory);

        var bytes = memory.ToArray();
    }
}
...