Hello all,
I have this code that allows me to select a message and place the Subject, To, CC, and DateTime recieved in the clipboard. The only real issue that i have with this code, is that I am getting the Display Name values instead of the email addresses of the senders. Anyone know what I am missing?
Option Explicit Sub CopyEmailDetailsToClipboard() Dim objItem As Object Dim email As MailItem Dim clipboard As Object Dim emailDetails As String Dim emailDate As String Dim recipient As Recipient Dim toAddresses As String Dim ccAddresses As String Dim smtpAddress As String Dim propertyAccessor As Outlook.PropertyAccessor Const PR_SMTP_ADDRESS As String = "htt~p:/~/schemas.~microsoft.~com/mapi/~proptag/~0x39FE001E" ' Check if a mail item is selected If Application.ActiveExplorer.Selection.Count = 0 Then MsgBox "Please select an email.", vbExclamation Exit Sub End If ' Get the selected item Set objItem = Application.ActiveExplorer.Selection.Item(1) ' Check if the selected item is a mail item If TypeOf objItem Is MailItem Then Set email = objItem Else MsgBox "The selected item is not an email.", vbExclamation Exit Sub End If ' Choose to use Date Received or Date Sent If email.ReceivedTime > 0 Then emailDate = "Date Received: " & Format(email.ReceivedTime, "mm/dd/yyyy hh:mm AMPM") ElseIf email.SentOn > 0 Then emailDate = "Date Sent: " & Format(email.SentOn, "mm/dd/yyyy hh:mm AMPM") Else emailDate = "No date available." End If ' Collect SMTP email addresses from the "To" field For Each recipient In email.Recipients If recipient.Type = olTo Then Set propertyAccessor = recipient.PropertyAccessor smtpAddress = propertyAccessor.GetProperty(PR_SMTP_ADDRESS) toAddresses = toAddresses & smtpAddress & "; " End If Next recipient If Len(toAddresses) > 0 Then toAddresses = Left(toAddresses, Len(toAddresses) - 2) ' Remove last "; " End If ' Collect SMTP email addresses from the "CC" field, if any For Each recipient In email.Recipients If recipient.Type = olCC Then Set propertyAccessor = recipient.PropertyAccessor smtpAddress = propertyAccessor.GetProperty(PR_SMTP_ADDRESS) ccAddresses = ccAddresses & smtpAddress & "; " End If Next recipient If Len(ccAddresses) > 0 Then ccAddresses = Left(ccAddresses, Len(ccAddresses) - 2) ' Remove last "; " End If ' Build the email details string emailDetails = "Subject: " & email.Subject & vbCrLf & _ "To: " & toAddresses & vbCrLf ' Add CC field only if there are addresses in the CC If Len(ccAddresses) > 0 Then emailDetails = emailDetails & "CC: " & ccAddresses & vbCrLf End If emailDetails = emailDetails & emailDate ' Create a DataObject to access the clipboard On Error Resume Next Set clipboard = CreateObject("MSForms.DataObject") On Error GoTo 0 ' Check if clipboard object is available If clipboard Is Nothing Then MsgBox "Unable to access clipboard. Please ensure that the 'Microsoft Forms 2.0 Object Library' is enabled.", vbCritical Exit Sub End If ' Copy email details to clipboard clipboard.SetText emailDetails clipboard.PutInClipboard ' Notify the user MsgBox "Email details copied to clipboard!", vbInformation End Sub


Reply With Quote
