VBA使用OFT模板从Excel发送电子邮件-禁止自动签名

Cac*_*ake 4 excel vba outlook-vba

我创建了一个宏,该宏打开了一个Outlook电子邮件模板,供用户发送(从电子表格中提取了一些其他信息)。除了Outlook根据用户设置自动添加签名之外,其他所有操作都进行得很好。尽管我可以很容易地关闭自己的签名,但我并不是唯一可能运行此宏的人。

电子邮件模板中已经包含公司签名,因此也不想添加个人签名。

Google提供了很多有关将签名传递到VBA生成的电子邮件的建议,但是我找不到任何可以将其删除的签名。有任何想法吗?

现有代码:

... snip ...

Set otlApp = CreateObject("Outlook.Application")
Set otlNewMail = otlApp.CreateItemFromTemplate("\\Path\To\MyFile.oft")

With otlNewMail
.Bcc = vEmailsFromSpreadsheet '(set earlier on)
.Display
End With

'otlApp.Quit
Set otlNewMail = Nothing
Set otlApp = Nothing
Set otlAttach = Nothing
Set otlMess = Nothing
Set otlNSpace = Nothing
Run Code Online (Sandbox Code Playgroud)

小智 6

@JoeMalpass,

我知道这是一则旧文章,但是对于任何可能偶然发现此问题的人来说都是有益的。

通过阅读解决方案,我了解到问题在于,当您在通过模板创建的电子邮件中使用.Display时,Outlook会附加一个签名。由于这是唯一的问题,所以我想到解决方案可能比您提出的解决方案简单得多。

在原始帖子的代码中,您只需替换

    .Display
Run Code Online (Sandbox Code Playgroud)

    BodyWithoutSignature = .HTMLBody
    .Display
    .HTMLBody = BodyWithoutSignature
Run Code Online (Sandbox Code Playgroud)

由于.Display会添加您不需要的签名,因此只需将正文替换为添加签名之前的内容即可。我对其进行了测试,并对此感到惊讶。就这么简单!


Cac*_*ake 4

好的,经过大量搜索后,我找到了一种方法来实现我想要做的事情,通过结合一堆类似的解决方案来解决不同的问题。

我了解到,只要您不发送.Display电子邮件,就不会添加自动用户签名。因此,您可以打开(不显示)电子邮件模板,将正文、主题和其他所需的电子邮件参数从模板电子邮件复制到 VB 变量中。然后,这些变量值可用于覆盖您确实想要发送.Display给用户的电子邮件的部分内容。

这是我的最终代码:

Set otlApp = CreateObject("Outlook.Application")
Set otlNewMail = otlApp.CreateItemFromTemplate("\\Path\to\myfile.oft")
With otlNewMail
vTemplateBody = otlNewMail.HTMLBody
vTemplateSubject = otlNewMail.Subject
.Close 1
End With

Set otlApp = CreateObject("Outlook.Application")
Set otlNewMail = otlApp.CreateItem(0)
With otlNewMail
.Display
.SentOnBehalfOfName = vFrom
.Bcc = vToList
.Subject = vTemplateSubject
.HTMLBody = vTemplateBody
End With
Run Code Online (Sandbox Code Playgroud)

我不确定双重使用Set otlAppetc 是必要的还是多余的,如果有更简洁的编写方式,请随意编辑这篇文章。