سؤال

أحتاج إلى القراءة من ملف Outlook .MSG في .NET بدون باستخدام COM API for Outlook (لأنه لن يتم تثبيته على الأجهزة التي سيعمل عليها تطبيقي).هل هناك أي مكتبات مجانية تابعة لجهات خارجية للقيام بذلك؟أريد استخراج الحقول من، إلى، CC، وBCC.ستكون حقول تاريخ الإرسال/الاستلام جيدة إذا تم تخزينها أيضًا في ملفات MSG.

هل كانت مفيدة؟

المحلول 2

تحديث: لقد عثرت على مكتبة COM تابعة لجهة خارجية تسمى الفداء التوقعات الذي يعمل بشكل جيد بالنسبة لي في الوقت الراهن.إذا كنت تستخدمه عبر COM-Interop في .NET، فلا تنس تحرير كل كائن COM بعد الانتهاء منه، وإلا سيتعطل تطبيقك بشكل عشوائي.

نصائح أخرى

يوجد رمز متوفر على CodeProject لقراءة ملفات .msg بدون COM.يرى هنا.

فيما يلي بعض نماذج التعليمات البرمجية لـ VBA التي تستخدمها الفداء التوقعات التي وجدها الحسين.

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

قامت مايكروسوفت بتوثيق هذا: مواصفات تنسيق الملف .MSG

إنها وثيقة "التخزين المنظم".لقد استخدمت بنجاح كود أندرو السلام لقراءتها في الماضي، حتى ضمن .NET (باستخدام C++/CLI) - فهي نظيفة وسهلة الفهم إلى حد ما.في الأساس، تحتاج إلى معرفة السجلات التي تحتاجها، والاستعلام عنها - يصبح الأمر صعبًا بعض الشيء، نظرًا لأن الإصدارات المختلفة من Outlook والأنواع المختلفة من الرسائل ستؤدي إلى سجلات مختلفة...

يمكنك تجربة (التجارية) لدينا ريبكس البريد الآمن مكتبة.يمكنه قراءة تنسيق Outlook 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

إذا قمت بفتح ملف .MSG في محرر نصوص، فأعتقد أنك ستجد أن المعلومات التي تبحث عنها مخزنة كنص عادي داخل الملف.(موجود في جميع الرسائل التي قمت بفحصها على الأقل)

سيكون من السهل جدًا كتابة بعض التعليمات البرمجية لتحليل الملف بحثًا عن أسطر تبدأ بـ "من:" أو "إلى:" وما إلى ذلك.ومن ثم استخراج المعلومات التي تحتاجها.

إذا كنت بحاجة إلى نص البريد الإلكتروني أيضًا، فقد يكون الأمر أكثر تعقيدًا بعض الشيء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top