كتابة رسائل البريد الإلكتروني إلى ملفات مسطحة في Outlook مع VBA

StackOverflow https://stackoverflow.com/questions/400941

سؤال

لقد كتبت تطبيق VBA يفتح مجلد في Outlook ثم يتكرر من خلال الرسائل. أحتاج إلى كتابة أجسام الرسائل (مع بعض التغيير والتبديل) إلى ملف مسطح واحد. قانون بلدي على النحو التالي...

Private Sub btnGo_Click()
    Dim objOutlook As New Outlook.Application
    Dim objNameSpace As Outlook.NameSpace
    Dim objInbox As MAPIFolder
    Dim objMail As mailItem
    Dim count As Integer

    Set objNameSpace = objOutlook.GetNamespace("MAPI")
    Set objInbox = objNameSpace.GetDefaultFolder(olFolderInbox)
    count = 0

    For Each objMail In objInbox.Items
       lblStatus.Caption = "Count: " + CStr(count)
       ProcessMailItem (objMail)
       count = count + 1
    Next objMail

  End If
End Sub

الجزء المعني هو "ProcessMailitem". بما أنني لست مهتمًا بشكل مفرط بالأداء في هذه المرحلة ، لذا فإن منهجية الملف غير الفعالة "المفتوحة والإلحاح والإغلاق" أمر جيد لهذا المثال.

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

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

المحلول

يمكنك الابتعاد عن الكتابة إلى ملف دون استخدام أي كائنات ، فقط باستخدام أدوات ملف VBA المدمجة:

Open "C:\file.txt" for append as 1
Print #1, SomeStringVar
Close #1

نصائح أخرى

إذا كنت لا تمانع في إعادة فتح ملف الإخراج في كل مرة تقوم فيها بإلحاق بعض النص ، فيجب أن يعمل هذا.

Private Sub ProcessMailItem(objMail As MailItem)

    Dim fso As New FileSystemObject
    Dim ts As TextStream

    Set ts = fso.OpenTextFile("C:\Outputfile.txt", ForAppending, True)

    ts.Write(objMail.Body)

    ts.Close()
    Set ts = Nothing
    Set fso = Nothing

End Sub

ستحتاج أيضًا إلى إضافة مرجع إلى مكتبة وقت تشغيل Microsoft Scripting. هذا له ملفات ملفات في ذلك.

يجب عليك أيضًا الاهتمام بأمان منبثقة "محاولة الوصول إلى عناوين البريد الإلكتروني" التي يتم تغطيتها Outlook قضايا الأمان "GOUBLE MODEL GURD" للمطورين

Public Sub ProcessMailItem(objMail As MailItem)
Dim FSO As New FileSystemObject
Dim ts As TextStream
Dim loc As String
Dim subject As String
Dim strID As String
' per http://www.outlookcode.com/article.aspx?ID=52
Dim olNS As Outlook.NameSpace
Dim oMail As Outlook.MailItem

strID = MyMail.EntryID
Set olNS = Application.GetNamespace("MAPI")
Set oMail = olNS.GetItemFromID(strID)
subject = oMail.subject
Set ts = FSO.OpenTextFile("C:\Documents and Settings\tempuser\My Documents\EMAILS\" + subject, ForAppending, True)
ts.Write (oMail.Body)
ts.Close
Set ts = Nothing
Set FSO = Nothing
Set oMail = Nothing
Set olNS = Nothing

نهاية الفرعية

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