Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
发送时电子邮件正文丢失(outlook vba)_Vba_Email_Outlook_Formatting - Fatal编程技术网

发送时电子邮件正文丢失(outlook vba)

发送时电子邮件正文丢失(outlook vba),vba,email,outlook,formatting,Vba,Email,Outlook,Formatting,我正在尝试编写一个宏,在发送原始电子邮件之前自动向特定地址发送通知。(就像cc一样,没有实际使用cc。) 原始格式电子邮件的内容(包括文本、表格和图片)应复制并粘贴到新电子邮件中,然后自动发送。当我只显示消息时,一切都正常,但当我实际发送电子邮件时,一切都不正常 这是我的密码: Dim objMsg As Outlook.MailItem Dim activeMailMessage As Outlook.MailItem Dim BodyText As Object ' Create the

我正在尝试编写一个宏,在发送原始电子邮件之前自动向特定地址发送通知。(就像cc一样,没有实际使用cc。)

原始格式电子邮件的内容(包括文本、表格和图片)应复制并粘贴到新电子邮件中,然后自动发送。当我只显示消息时,一切都正常,但当我实际发送电子邮件时,一切都不正常

这是我的密码:

Dim objMsg As Outlook.MailItem
Dim activeMailMessage As Outlook.MailItem
Dim BodyText As Object

' Create the message.
Set objMsg = Application.CreateItem(olMailItem)

'copy body of current item
Set activeMailMessage = ActiveInspector.CurrentItem
activeMailMessage.GetInspector().WordEditor.Range.FormattedText.Copy

'paste body into new email
Set BodyText = objMsg.GetInspector.WordEditor.Range
BodyText.Paste

'set up and send notification email
With objMsg
    .To = "test@domain.com"
    .Subject = "text" 
    .Send
End With
文本应该像这样粘贴到正文中,但它不会粘贴:

With objMsg
    .To = "test@domain.com"
    .Subject = "test" 
    .body = bodytext.paste 
    .Send
End With
当我使用
.display
时,将显示正确的内容。但是当我直接发送时(没有先使用
.display
),所有信息都会丢失,发送的是一封空电子邮件。我能做什么


我可以在原始电子邮件中添加密件抄送以获得相同的结果,但原始电子邮件并不总是发送,而此通知应该是。

在调用粘贴方法后尝试调用该方法

在调用粘贴方法后尝试调用该方法

您的代码从未在objMsg对象中实际设置电子邮件正文。当您显示objMsg时,它会工作,因为您与“Inspector”交互

如果直接设置HTMLBody(如果希望保留格式),或objMsg上的Body属性,则其工作方式如下例所示

With objMsg
    .HTMLBody = activeMailMessage.HTMLBody
    .To = "test@domain.com"
    .Subject = "text" 
    .Send
End With
Bob,关于您关于使用上述方法丢失嵌入在电子邮件中的图像的问题。另一种解决方案是使用MailItem的Copy方法创建与原始邮件完全相同的新邮件。这也将保留电子邮件发送给谁。您需要清除此项以确保只有预期的收件人收到该邮件

Dim objMsg As Outlook.MailItem
Dim activeMailMessage As Outlook.MailItem

' Create the new message.
Set objMsg = Application.CreateItem(olMailItem)

' Assign the current item to activeMailMessage
Set activeMailMessage = ActiveInspector.CurrentItem

' Copy the current item to create a new message
Set objMsg = activeMailMessage.Copy

' Clear any existing recipients of the e-mail, as these will be retained in the Copy
While objMsg.Recipients.Count > 0
    objMsg.Recipients.Remove 1
Wend

'set up and send notification email
With objMsg
    .To = "test@domain.com"
    .Subject = "text" 
    .Send
End With

这将保留原始电子邮件中的图像和其他附件。

您的代码从未在objMsg对象中实际设置电子邮件正文。当您显示objMsg时,它会工作,因为您与“Inspector”交互

如果直接设置HTMLBody(如果希望保留格式),或objMsg上的Body属性,则其工作方式如下例所示

With objMsg
    .HTMLBody = activeMailMessage.HTMLBody
    .To = "test@domain.com"
    .Subject = "text" 
    .Send
End With
Bob,关于您关于使用上述方法丢失嵌入在电子邮件中的图像的问题。另一种解决方案是使用MailItem的Copy方法创建与原始邮件完全相同的新邮件。这也将保留电子邮件发送给谁。您需要清除此项以确保只有预期的收件人收到该邮件

Dim objMsg As Outlook.MailItem
Dim activeMailMessage As Outlook.MailItem

' Create the new message.
Set objMsg = Application.CreateItem(olMailItem)

' Assign the current item to activeMailMessage
Set activeMailMessage = ActiveInspector.CurrentItem

' Copy the current item to create a new message
Set objMsg = activeMailMessage.Copy

' Clear any existing recipients of the e-mail, as these will be retained in the Copy
While objMsg.Recipients.Count > 0
    objMsg.Recipients.Remove 1
Wend

'set up and send notification email
With objMsg
    .To = "test@domain.com"
    .Subject = "text" 
    .Send
End With

这将保留原始电子邮件中的图像和其他附件。

“将正文粘贴到新电子邮件集BodyText=objMsg.GetInspector.WordEditor.Range BodyText.paste objMsg.save”设置并使用objMsg.To发送通知电子邮件=”test@domain.com.Subject=“text”.Send End也不起作用…调用Save方法后是否尝试签出Body或HTMLBody属性值?然后尝试使用Display()和Save()方法。这有用吗?老实说,我甚至不知道怎么做。您在第一个回复中的链接非常有用,因为我是vba编程新手……“将正文粘贴到新的电子邮件集BodyText=objMsg.GetInspector.WordEditor.Range BodyText.paste objMsg.save”设置并发送通知电子邮件,其中objMsg.To=”test@domain.com.Subject=“text”.Send End也不起作用…调用Save方法后是否尝试签出Body或HTMLBody属性值?然后尝试使用Display()和Save()方法。这有用吗?老实说,我甚至不知道怎么做。你在第一个回复中的链接非常有用,因为我是编程vba的新手……不管是否显示inspector窗口。代码应该正常工作。请参阅。@EugeneAstafiev正在阅读您的链接,我不完全确定它在不显示Inspector时是否有效-当我尝试代码时,除非它被显示,否则它不起作用。但不管怎样,当您可以访问原始邮件项和您自己的邮件项时,像这样复制正文似乎是多余的。简单地直接指定HTMLBody似乎最有意义。@andshrew,您推荐的方法很有效。但现在我遇到了另一个小问题:通常电子邮件中会包含一个屏幕截图。当使用这样的代码时,它会说“链接的图像无法显示。文件可能已被移动、重命名…”对此我能做些什么?据我目前所知,我正在复制整个正文并将其粘贴到新邮件中(很像转发原始邮件)。在后一种情况下,图片复制没有任何问题,而我的情况是不成功的…@Bob,这里的问题是,您的图像作为附件存储在MailItem中,当我们设置Body或HTMLBody时,它们不会被复制。我已经提供了另一种解决方案来解决这个问题,我已经将它添加到了答案中,因为这里没有足够的空间。@andshrew,也尝试了这个,但没有成功。问题是它确实转发了消息(也就是说,主题与原始消息完全相同(尽管没有FW)),但正文再次完全为空。另外,当我添加
.HTMLBody=activeMailMessage.HTMLBody
时,正文仍然为空。我猜出于某种原因,它不会转发它,但我想知道它是做什么的……是否显示inspector窗口并不重要。代码应该正常工作。请参阅。@EugeneAstafiev正在阅读您的链接,我不完全确定它在不显示Inspector时是否有效-当我尝试代码时,除非它被显示,否则它不起作用。但不管怎样,当您可以访问原始邮件项时,像这样复制正文似乎是多余的,并且