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