VBA Copy draft email to a new email - attachments not copided

George Papaikonomou

New Member
Outlook version
Outlook 2016 64 bit
Email Account
IMAP
Hi,

I am writing a VBA script to create a new from a draft email - yes I know I can save it as a template and use it that way - but that is not what I want.
Below is the code.
The draft has a series of embedded gif images.
The scirpt kind of works , it creates the new email but the embedded gif are missing.
How can I copy them as well - replicate the draft to a new email message?

Sub Draft2Mail()


Dim x As Integer
Dim objOL As Outlook.Application
Dim objSelection As Outlook.Selection
Dim objItem As Object
Set objOL = Outlook.Application

'Get the selected item
Select Case TypeName(objOL.ActiveWindow)
Case "Explorer"
Set objSelection = objOL.ActiveExplorer.Selection
If objSelection.Count > 0 Then
Set objItem = objSelection.item(1)
Else
Result = MsgBox("No item selected. " & _
"Please make a selection first.", _
vbCritical, "Draft2Mail")
Exit Sub
End If

Case "Inspector"
Set objItem = objOL.ActiveInspector.CurrentItem

Case Else
Result = MsgBox("Unsupported Window type." & _
vbNewLine & "Please make a selection" & _
"in the Draft folder or open an item first.", _
vbCritical, "Draft2Mail")
Exit Sub
End Select

Dim olDraft As Outlook.MailItem
Dim olNewMail As Outlook.MailItem
Dim myAttachments As Outlook.Attachments
Set olNewMail = Outlook.CreateItem(olMailItem)

'Copy the desired details to a new email item
If objItem.Class = olMail Then
Set olDraft = objItem
Debug.Print olDraft.Attachments.Count

With olNewMail
.To = olDraft.To
.CC = olDraft.CC
.BCC = olDraft.BCC
.Importance = olDraft.Importance
.Subject = olDraft.Subject
.HTMLBody = olDraft.HTMLBody
'.Attachments = olDraft.Attachments '<-- This does not work..

End With

'Display the copy
olNewMail.Display

Else

Result = MsgBox("No draft email item selected. " & _
"Please make a selection first.", _
vbCritical, "Draft2Mail")
Exit Sub
End If

'Clean up
Set objOL = Nothing
Set objItem = Nothing
Set olNewMail = Nothing
Set olDraft = Nothing

End Sub​
 

George Papaikonomou

New Member
Outlook version
Outlook 2016 64 bit
Email Account
IMAP
BTW, to copy attachments, you need to use code to save the attachments then add them. The macro at Reply or ReplyAll with Attachments has the copy attachments function and shows how to use it.
Hi Dianne
This is an interesting option with an error - let me explain.

If I select an draft email - without opening it - I get the error - "This Method can't be used with an inline response mail item" - Run-Time Error Code: -2147467259 (80004005).
upload_2016-5-12_12-56-47.png


BUT if I open the draft message it works,.
Is there a way to do it without open the draft message - inline method?

Thanks in advance.
Regards.
George
 

George Papaikonomou

New Member
Outlook version
Outlook 2016 64 bit
Email Account
IMAP
try removing the parts that creates the new message and replace it with this:
Set olDraft = objItem.Copy
'Display the copy
olDraft.Display

This will copy the entire message and the embedded images should work.
Hi Dianne
This is an interesting option with an error - let me explain.

If I select an draft email - without opening it - I get the error - "This Method can't be used with an inline response mail item" - Run-Time Error Code: -2147467259 (80004005).


BUT if I open the draft message it works,.
Is there a way to do it without open the draft message - inline method?

Thanks in advance.
Regards.
George
 

Diane Poremsky

Senior Member
Outlook version
Outlook 2016 32 bit
Email Account
Office 365 Exchange
Looks like my test machine had inline replies disabled. I'll need to check on that.

I tried opening the draft via code, then making a copy - but it works if i step through the code but not when i run it.

If objItem.Class = olMail Then
objItem.Display
Set objItem = objOL.ActiveInspector.CurrentItem
Set olDraft = objItem.Copy
objItem.Close olSave
 

George Papaikonomou

New Member
Outlook version
Outlook 2016 64 bit
Email Account
IMAP
Looks like my test machine had inline replies disabled. I'll need to check on that.

I tried opening the draft via code, then making a copy - but it works if i step through the code but not when i run it.

If objItem.Class = olMail Then
objItem.Display
Set objItem = objOL.ActiveInspector.CurrentItem
Set olDraft = objItem.Copy
objItem.Close olSave

Hi,

Tried that and I get an error 438, object not supported...
upload_2016-5-12_13-47-13.png
 
Top