Ответьте с помощью шаблона .oft и покажите изображения и вложения

Когда я создаю электронное письмо на основе шаблона .oft, в нем не отображается все содержимое электронного письма.
В нем отсутствует содержимое, такое как изображения и/или вложения.

Я попытался объединить Sub-ответ1() и Sub-ответ2():

Sub Reply1()

Dim Original As Outlook.MailItem
Dim Reply As Outlook.MailItem
Set Original = Application.ActiveExplorer.Selection(1).Reply
Set Reply = Application.CreateItemFromTemplate("C:\Outlook\Mail.oft")

Original.HTMLBody = Reply.HTMLBody & Original.HTMLBody
Original.Display
End Sub

Sub Reply1()
Этот код не показывает изображения или вложения моего собственного письма .oft.
Он показывает мою подпись электронной почты, но в самом низу обоих почты.
Он действительно показывает содержание электронной почты, на которую я отвечаю правильно.

Sub Reply2()

Dim origEmail As MailItem
Dim replyEmail As MailItem

Set origEmail = ActiveExplorer.Selection(1)
Set replyEmail = CreateItemFromTemplate("C:\Outlook\Mail.oft")

replyEmail.To = origEmail.Reply.To

replyEmail.HTMLBody = replyEmail.HTMLBody & origEmail.Reply.HTMLBody
replyEmail.Recipients.ResolveAll
replyEmail.Display

Set origEmail = Nothing
Set replyEmail = Nothing

End Sub

Sub Reply2() действует противоположно Sub Reply1.
Он показывает изображения и вложения моего собственного письма .oft.
Он не будет отображаться моя подпись электронной почты правильно.
Он не будет отображать содержание почты, на которую я отвечаю правильно. Изображения отсутствуют

Результаты Sub Reply1():
введите здесь описание изображения

Результаты Sub Reply2() введите здесь описание изображения


person be the leaf    schedule 22.07.2020    source источник


Ответы (3)


Встроенные изображения хранятся как скрытые вложения в сообщении электронной почты. Если вы создаете новый элемент Outlook на основе шаблона, вам необходимо повторно прикрепить необходимые изображения, чтобы тело сообщения отображалось правильно. Подробнее об этом можно прочитать в Как добавить встроенное изображение в HTML-сообщение в потоке Outlook 2010.

Кроме того, я заметил следующий код:

replyEmail.HTMLBody = replyEmail.HTMLBody & origEmail.Reply.HTMLBody

Помните, что строка HTML должна быть правильно оформленной разметкой. Если вы хотите вставить что-то в тело сообщения существующего элемента, вам нужно вставить это внутри открывающего <body> и закрывающего </body> элементов. В противном случае вы можете получить поврежденное или неправильно отрисованное тело сообщения. Даже если Outlook отлично справляется со своей задачей, исправляя большинство ошибок.

person Eugene Astafiev    schedule 27.07.2020
comment
Спасибо за Ваш ответ! Это было не совсем то, что я искал, но я ценю ваш интерес - person be the leaf; 11.08.2020

Код ниже работает в моей ситуации.

Sub Reply1()
Dim fromTemplate As MailItem
Dim reply As MailItem
Dim oItem As Object

Set fromTemplate = CreateItemFromTemplate("C:\Outlook\Mail.oft")

Set oItem = GetCurrentItem()
If Not oItem Is Nothing Then
Set reply = oItem.ReplyAll
CopyAttachments oItem, fromTemplate, reply
    
reply.HTMLBody = fromTemplate.HTMLBody & reply.HTMLBody
    
reply.Display
oItem.UnRead = False
End If
 
Set reply = Nothing
Set oItem = Nothing
End Sub


Function GetCurrentItem() As Object
Dim objApp As Outlook.Application
     
Set objApp = Application
On Error Resume Next
Select Case TypeName(objApp.ActiveWindow)
Case "Explorer"
Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
Case "Inspector"
Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
End Select
 
Set objApp = Nothing
End Function

Sub CopyAttachments(source1, source2, objTargetItem)
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldTemp = fso.GetSpecialFolder(2) ' TemporaryFolder
strPath = fldTemp.Path & "\"
For Each objAtt In source1.Attachments
strFile = strPath & objAtt.fileName
objAtt.SaveAsFile strFile
objTargetItem.Attachments.Add strFile, , , objAtt.DisplayName
fso.DeleteFile strFile
Next

For Each objAtt In source2.Attachments
strFile = strPath & objAtt.fileName
objAtt.SaveAsFile strFile
objTargetItem.Attachments.Add strFile, , , objAtt.DisplayName
fso.DeleteFile strFile
Next

Set fldTemp = Nothing
Set fso = Nothing
End Sub
person be the leaf    schedule 11.08.2020

При пересылке сообщения электронной почты сохраняются вложения.

Option Explicit ' Consider this mandatory
' Tools | Options | Editor tab
' Require Variable Declaration
' If desperate declare as Variant


Sub Reply_Retain_Attachments()

    Dim fromTemplate As MailItem
    Dim origEmail As MailItem
    Dim forwardEmail As MailItem
    
    Set fromTemplate = CreateItemFromTemplate("C:\Outlook\Mail.oft")
    
    Set origEmail = GetCurrentItem()
    
    If Not origEmail Is Nothing Then
    
        ' Forward retains attachments
        Set forwardEmail = origEmail.Forward
        
        forwardEmail.HTMLBody = fromTemplate.HTMLBody & forwardEmail.HTMLBody
        
        forwardEmail.To = origEmail.reply.To ' keep .reply here
        
        forwardEmail.Recipients.ResolveAll
        forwardEmail.Display
        
    Else
        ' This may never occur
        MsgBox "GetCurrentItem is nothing?"
        
    End If

End Sub

Function GetCurrentItem() As Object
     
    'On Error Resume Next ' uncomment if you find it necessary
    
    Select Case TypeName(ActiveWindow)
    Case "Explorer"
        Set GetCurrentItem = ActiveExplorer.Selection.item(1)
    Case "Inspector"
        Set GetCurrentItem = ActiveInspector.CurrentItem
    End Select

End Function
person niton    schedule 11.08.2020
comment
Спасибо, Нитон, ваш код намного чище, чем моя попытка. Он не будет добавлять каждое изображение в качестве вложения, которое идеально! Но есть одна вещь, которой не хватает, когда я тестировал ваш код. Если Mail.oft содержит вложения, такие как, например, файл ReadMe.pdf, показанный на изображении Sub Reply2(), его не будет в ответном письме. Это относится только к файлу .oft, а не к электронному письму, на которое вы отвечаете. Эти вложения будут добавлены к вашему электронному письму. - person be the leaf; 13.08.2020