Van en Datum uit e-mailheader kopieren naar klembord

Status
Niet open voor verdere reacties.

Berenloper

Nieuwe gebruiker
Lid geworden
8 apr 2019
Berichten
2
Hallo allemaal,

Ik wil graag de velden 'Van' ('From') en Datum ('Date') uit een e-mailheader halen en in het klembord samenvoegen als 'Van[komma][spatie]Datum'.
Dan kan ik deze tekst vervolgens overal in plakken. Een voorbeeld: "John Doe <j.doe@xxxx.com>, Mon, 8 Apr 2019 17:43:43 +0200" (zonder de ")
Dat de datum nogal uitgebreid is, is geen probleem, maar de tijdszone aanduiding zou eventueel weggelaten kunnen worden.

Ik weet een weinig van VBA en vond de volgende code. (hiermee komt het Van-veld in een nieuw e-mailbericht te staan, maar dat wil ik dus allemaal niet)

Code:
Sub GetValuesFromInternetHeader()
    Dim olItem As Outlook.MailItem, olMsg As Outlook.MailItem
    Dim strHeader As String
    Dim strResult As String
    Dim strResults As String
    Dim Reg1 As Object
    Dim M1 As Object
    Dim M As Object
 
    For Each olItem In Application.ActiveExplorer.Selection
        strHeader = GetInetHeaders(olItem)
    
      Set Reg1 = CreateObject("VBScript.RegExp")
    With Reg1
        .Pattern = "(From:\s(.*))"
        .Global = True
    End With
    
    If Reg1.test(strHeader) Then
    
        Set M1 = Reg1.Execute(strHeader)
        For Each M In M1
' 0 = everything in the first set of ()
' 1 = everything in the second set of ()
        Debug.Print M.SubMatches(0)
        strResult = M.SubMatches(1)

' do something with the result
        strResults = strResult & vbCrLf & vbCrLf & strResults
        Next
    End If
    
    Next

        Set olMsg = Application.CreateItem(olMailItem)
        With olMsg
            .BodyFormat = olFormatPlain
            .Body = strResults
            .Display
        End With
    Set olMsg = Nothing
End Sub

Function GetInetHeaders(olkMsg As Outlook.MailItem) As String
    ' Purpose: Returns the internet headers of a message.'
    ' Written: 4/28/2009'
    ' Author:  BlueDevilFan'
    ' //techniclee.wordpress.com/
    ' Outlook: 2007'
    Const PR_TRANSPORT_MESSAGE_HEADERS = "http://schemas.microsoft.com/mapi/proptag/0x007D001E"
    Dim olkPA As Outlook.PropertyAccessor
    Set olkPA = olkMsg.PropertyAccessor
    GetInetHeaders = olkPA.GetProperty(PR_TRANSPORT_MESSAGE_HEADERS)
    Set olkPA = Nothing
End Function

In deze code zal iets moeten van:

Code:
For i = 1 To 2

With Reg1
    Select Case i
    Case 1
        .Pattern = "(From:\s(.*))"
        .Global = True
        
    Case 2
       .Pattern = "(Date:\s(.*))"
       .Global = True
    End Select
End With

Ik ben een tijdje aan het puzelen geweest, maar mijn kennis houdt inmiddels zo'n beetje op :confused:

Weet iemand van jullie hoe dit te maken?
NB. de verwijzing naar MS VBScript Regular Expressions 5.5 heb ik actief.

Alvast dank voor je poging!

Groet,
Berenloper
 
Je kan daarvoor het Outlook object zelf en het Microsoft Forms Dataobject gebruiken:
Code:
Public Sub SenderAndDate()
    Dim DataObj As New MSForms.DataObject
    Dim CurrentExplorer As Explorer
    Dim obj As Object
    
    Set CurrentExplorer = Application.ActiveExplorer
    Set Selection = CurrentExplorer.Selection
    
    For Each obj In Selection
       With obj
          DataObj.SetText .SenderName & " <" & .SenderEmailAddress & ">" & " " & .ReceivedTime
          DataObj.PutInClipboard
       End With
    Next

    Set CurrentExplorer = Nothing
    Set Selection = Nothing
    Set DataObj = Nothing
End Sub

Zet daarvoor wel een verwijzing naar de Microsoft Forms 2.0 Object Library (FM20.dll in de SysWOW64 map van Windows):
msforms.jpg

Als je meer dan 1 email adres selecteert zal je de code erop moeten aanpassen omdat nu alleen de gegevens van de laatste van de geselecteerde emails in het Klembord staat.
 
Laatst bewerkt:
Opgelost!

Edmoor,

Super, het werkt helemaal als ik graag wilde. Dank je wel!
Wat een fijn stukje korte code zo :)

Groet,
Berenloper
 
Graag gedaan :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan