Сведения о вопросе

Fhohir

04:15, 3rd August, 2020

Теги

c#   outlook   email   message   msg    

Чтение из .msg файлов

Просмотров: 498   Ответов: 7

Мне нужно прочитать из файла Outlook .MSG в .NET без использования COM API для Outlook (потому что он не будет установлен на машинах, на которых будет работать мое приложение). Существуют ли какие-либо бесплатные сторонние библиотеки для этого? Я хочу извлечь из, до, CC и BCC полей. Поля даты отправки / получения будут хороши, если они также хранятся в файлах MSG.



  Сведения об ответе

davran

00:17, 5th August, 2020

Существует код, доступный на CodeProject для чтения файлов .msg без COM. Видеть здесь .


  Сведения об ответе

FAriza

08:35, 16th August, 2020

Update: я нашел стороннюю библиотеку COM под названием Outlook Redemption , которая отлично работает для меня в данный момент. Если вы используете его через COM-Interop в .NET, не забудьте освободить каждый объект COM после того, как вы закончите с ним, иначе ваше приложение аварийно завершит работу случайным образом.


  Сведения об ответе

ITSME

20:22, 2nd August, 2020

Вот пример кода VBA с использованием Outlook выкупа , который нашел Huseyint.

Public Sub ProcessMail()

   Dim Sess As RDOSession
   Dim myMsg As RDOMail
   Dim myString As String

   Set Sess = CreateObject("Redemption.RDOSession")
   Set myMsg = Sess.GetMessageFromMsgFile("C:\TestHarness\kmail.msg")

   myString = myMsg.Body
   myMsg.Body = Replace(myString, "8750", "XXXX")

   myMsg.Save

End Sub


  Сведения об ответе

FAriza

22:11, 18th August, 2020

Microsoft задокументировала это: .MSG спецификация формата файла


  Сведения об ответе

PROGA

19:45, 15th August, 2020

Это документ "Structured Storage". Я успешно использовал код Эндрю ПиС , чтобы прочитать их в прошлом, даже под .NET (используя C++/CLI) - это чисто и довольно легко понять. В принципе, вам нужно выяснить, какие записи вам нужны, и запросить их - это становится немного сложнее, так как разные версии Outlook и разные типы сообщений приведут к разным записям...


  Сведения об ответе

davran

07:01, 4th August, 2020

Вы можете попробовать нашу (коммерческую) библиотеку защищенной Почты Rebex . Он может читать перспективы MSG формата. Следующий код показывает, как:

// Load message
MailMessage message = new MailMessage();
message.Load(@"c:\Temp\t\message.msg");

// show From, To and Sent date
Console.WriteLine("From: {0}", message.From);
Console.WriteLine("To: {0}", message.To);
Console.WriteLine("Sent: {0}", message.Date.LocalTime);

// find and try to parse the first 'Received' header
MailDateTime receivedDate = null;
string received = message.Headers.GetRaw("Received");
if (received != null)
{
    int lastSemicolon = received.LastIndexOf(';');
    if (lastSemicolon >= 0)
    {
        string rawDate = received.Substring(lastSemicolon + 1);
        MimeHeader header = new MimeHeader("Date", rawDate);
        receivedDate = header.Value as MailDateTime;
    }
}

// display the received date if available
if (receivedDate != null)
    Console.WriteLine("Received: {0}", receivedDate.LocalTime);

Дополнительную информацию о датах отправки и получения, а также о том, как они представлены в сообщении, можно найти по адресу http://forum.rebex.net/questions/816/extract-senttime-receivetime-and-time-zones


  Сведения об ответе

park

02:58, 26th August, 2020

Если вы откроете файл .MSG в текстовом редакторе, я думаю, что вы обнаружите, что информация, которую вы ищете, хранится в виде обычного текста внутри файла. (Это на всех сообщениях, которые я проверил, по крайней мере)

Было бы довольно легко написать некоторый код для разбора файла, ища строки, начинающиеся с "From:" или "To:" и т. д. а затем извлекать нужную вам информацию.

Если вам также нужно тело email, это может быть немного сложнее.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться