Situatie
Voor de orderverwerking lezen we de mail die binnenkomt in Outlook. De mail wordt via regels naar een order-map gestuurd, waarna een VBA macro er voor zorgt dat de bijlagen worden opgeslagen in een map op schijf. Onze eigen software pakt vanaf daar dan de orders weer op. Dit gaat niet goed wanneer klanten een mail-in-een-mail sturen, dus een embedded mail:
:fill(white):strip_exif()/f/image/VTVadNS3MREZPAMcJ4X1TdeE.png?f=user_large)
Wat er dan op schijf komt te staan is een .msg file in plaats van een .pdf of .xlsx bestand wat normaal gesproken gebeurt. Ik wil graag de .msg file bekijken en de bijlagen dáár weer uit opslaan.
Relevante software en hardware die ik gebruik
Outlook 365
Wat ik al gevonden of geprobeerd heb
Zie hieronder voor een versimpelde versie van mijn macro. Als je dit zelf wil proberen, pas dan op regel 7 de naam van de folder aan in Outlook waarvan je de bijlagen wilt bewaren en op regel 28 evt de map waar het naar toe moet (nu respectievelijk "orders" en "c:\temp\mail")
Dit werkt voor bijlagen, maar het gaat fout op regel 25-27. Hier dacht ik slim een recursieve aanroep te doen naar SaveToDisk, maar mijn objAtt is niet van type olMailItem maar altijd olAttachment en de check gaag dan ook mis. Bij een testmail had ik de check even uitgeschakeld, maar ook al zou de IF goed gaan, dan nog gaat het fout omdat SaveToDisk een MailItem verwacht als input en geen Attachment
Suggesties zijn welkom ...
Voor de orderverwerking lezen we de mail die binnenkomt in Outlook. De mail wordt via regels naar een order-map gestuurd, waarna een VBA macro er voor zorgt dat de bijlagen worden opgeslagen in een map op schijf. Onze eigen software pakt vanaf daar dan de orders weer op. Dit gaat niet goed wanneer klanten een mail-in-een-mail sturen, dus een embedded mail:
:fill(white):strip_exif()/f/image/VTVadNS3MREZPAMcJ4X1TdeE.png?f=user_large)
Wat er dan op schijf komt te staan is een .msg file in plaats van een .pdf of .xlsx bestand wat normaal gesproken gebeurt. Ik wil graag de .msg file bekijken en de bijlagen dáár weer uit opslaan.
Relevante software en hardware die ik gebruik
Outlook 365
Wat ik al gevonden of geprobeerd heb
Zie hieronder voor een versimpelde versie van mijn macro. Als je dit zelf wil proberen, pas dan op regel 7 de naam van de folder aan in Outlook waarvan je de bijlagen wilt bewaren en op regel 28 evt de map waar het naar toe moet (nu respectievelijk "orders" en "c:\temp\mail")
Dit werkt voor bijlagen, maar het gaat fout op regel 25-27. Hier dacht ik slim een recursieve aanroep te doen naar SaveToDisk, maar mijn objAtt is niet van type olMailItem maar altijd olAttachment en de check gaag dan ook mis. Bij een testmail had ik de check even uitgeschakeld, maar ook al zou de IF goed gaan, dan nog gaat het fout omdat SaveToDisk een MailItem verwacht als input en geen Attachment
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| Sub SaveAttachments()
Dim ns As Outlook.NameSpace
Dim myItem As Object
Dim i As Integer
Set ns = Application.GetNamespace("MAPI")
Set FolderItems = ns.GetDefaultFolder(olFolderInbox).Folders("Orders").Items
For i = 1 To FolderItems.Count
Set myItem = FolderItems(i)
SaveToDisk myItem
Next
End Sub
Sub SaveToDisk(objMsg As MailItem)
Dim i As Integer
Dim objAtt As Attachment
Dim cFile As String
If objMsg.Attachments.Count > 0 Then
For i = 1 To objMsg.Attachments.Count
Set objAtt = objMsg.Attachments(i)
If objAtt.Class = olMailItem Then
SaveToDisk objMsg
Else
cFile = "c:\temp\mail\mail-" & Format(objMsg.ReceivedTime, "hhmmss") & "-" & Replace(objAtt.FileName, " ", "_")
objAtt.SaveAsFile cFile
End If
Next
End If
End Sub |
Suggesties zijn welkom ...
... en gaat over tot de orde van de dag