2013-09-17 4 views
3

У меня есть таблица с таблицей электронной почты, которая называется email_archive. В таблице есть поле, называемое телом, а другое - raw_headers. Я хочу отобразить содержимое этой таблицы на экране с помощью C# (в веб-части SharePoint). Я пытался найти библиотеку, которая может анализировать тело, чтобы я мог вернуть части сообщения в окно. Я попробовал библиотеку из Limilabs, а также загрузил несколько других библиотек. Тем не менее, все, кажется, требуют электронной почты в формате EML на минимальном уровне.Анализ тела электронной почты с помощью C#

Последняя попытка пыталась использовать MailUtilies.

MimeMessage mm = new MimeMessage(header + message); 

Но это неудачно, потому что кажется, что формат не передает проверку целостности MimeMessage.

Кто-нибудь знает способ разобрать электронное письмо в его составные части, используя исходные заголовки и содержимое тела.

заголовки выглядеть следующим образом

MIME-Version: 1.0 
Received: from server.domain.com (10.20.205.104) by 
mail.domain.com (xx.xx.xx.xx) with Microsoft SMTP Server id 
8.1.436.0; Mon, 16 Sep 2013 14:33:54 -0700 
Received: from server (localhost.localdomain [127.0.0.1]) by 
server.domain.com (8.13.8/8.13.8) with ESMTP id r8GLX4vm007046 for 
<[email protected]>; Mon, 16 Sep 2013 14:33:04 -0700 
From: "[email protected]" <[email protected]> 
To: My Name <[email protected]> 
Date: Mon, 16 Sep 2013 14:33:04 -0700 
Subject: Some Topic 
Thread-Topic: Some Topic 
Thread-Index: Ac6zJHFgOvb7ZAdeTJC8DzqnAvdnOw== 
Message-ID: <[email protected]> 
Reply-To: "[email protected]" <[email protected]> 
Accept-Language: en-US 
Content-Language: en-US 
X-MS-Exchange-Organization-AuthAs: Internal 
X-MS-Exchange-Organization-AuthMechanism: 10 
X-MS-Exchange-Organization-AuthSource: mail.domain.com 
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Content-Type: multipart/alternative; 
    boundary="_000_153372442207427sendEmailgroundwork_" 

И сообщение выглядит как этот

--_000_153372442207427sendEmailgroundwork_ 
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: quoted-printable 

Some message to dispaly 

--_000_153372442207427sendEmailgroundwork_ 
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: quoted-printable 

<html><head><style type=3D'text/css'> p,h1 { font-family: arial; } 
</style></head><body> 
<p>Some message to display</p> 
</body></html> 


--_000_153372442207427sendEmailgroundwork_-- 

ответ

5

Я нашел ответ, используя библиотеку, используя OpenPop.Net.

public void addMessage(string message, string header) { 
    string full_body = header + "\n" + message; 
    System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); 
    Byte[] full_body_bytes = encoding.GetBytes(full_body); 
    Message mm = new Message(full_body_bytes); 

    //do stuff here. 
} 
+0

Можем ли мы использовать OpenPop.Net для файлов вложений, также как .pdf, .xls, .doc & .txt ??? –

+0

Да, я смог сохранить вложения. – Robbert

+0

Спасибо, я прочитал документы об OpenPop.net –

0

Если у вас есть заголовки и тело, это тривиально, чтобы воссоздать весь EML:

string eml = header + "\r\n\r\n" + body; 

заголовки и тело в формате MIME отделены друг от друга одной пустой строкой. В другом ответе используется «\ n» - это неверно, поскольку MIME требует, чтобы последовательность «\ r \ n» заканчивалась.

Если ваша строка заголовка уже заканчивается новой строкой, вам просто нужно добавить одну новую строку («\ r \ n»).

0

Вам необходимо комбинировать заголовок и корпус с разделителем \r\n\r\n. Следующий код показывает, что:

string msgContent = header.TrimEnd("\r\n") + "\r\n\r\n" + message; 
byte[] bytes = Encoding.ASCII.GetBytes(msgContent); 
ComponentPro.Net.Mail.MailMessage msg = new ComponentPro.Net.Mail.MailMessage(bytes); 

// 
// Access your parsed message here 
// 

код использует Ultimate Mail library

2

Я просто использовал MimeKit, и она работала отлично подходит для разбора из вложения. Он, как представляется, полностью признан и кросс-платформенным.

Смежные вопросы