如何使用MS Outlook模板(.oft)结合电子邮件中插入的变量值(通过Excel或其他方式)发送电子邮件

时间:2019-05-24 18:05:07

标签: excel vba outlook-vba oft

示例:Outlook中的采访确认电子邮件。

  

亲爱的[A],
  您对[B]的采访已被确认为[C]。地址是[D]。
  谢谢
  约翰·杜(John Doe)

A名
B公司名称
日期和时间
D物理地址

我已经看到人们为此使用excel,但是我希望能够仅在某处输入A,B,C和D值,然后单击“发送”即可。

我遇到的所有代码都可以实现可变因素,但是几乎没有用于电子邮件正文的硬代码,如果做到了,则没有一个包含.oft文件。

1 个答案:

答案 0 :(得分:0)

您的问题意味着您期望找到一些完全符合您要求的代码。也许这是不公平的批评,但是许多人确实希望他们的确切要求已经存在或有人为他们编码。

如果我有需要新功能的专业知识,我会分别研究每个领域,然后进行尝试,然后再尝试使用新知识来满足我的要求。

您的要求首先需要的知识是创建电子邮件模板文件。我假设您已经知道如何执行此操作,但是如果没有,那么有很多网站会介绍如何执行此操作。我将模板保存为“ StdMsg.oft”。您将需要修改我的宏以使用您的模板名称。

您可以将电子邮件模板文件保存在任何位置,但是最好使用默认位置,以便所有模板都在一起。当您要打开模板时,您的宏将需要知道它在哪里。对于Windows 10,默认位置是“ C:\ Users \ xxxxx \ AppData \ Roaming \ Microsoft \ Templates”,其中“ xxxxx”是您的用户名。您可以键入此字符串,但是,如果您希望与同事共享此宏,则可能希望向系统询问“ xxxxx”的当前值。我很容易找到一个为我提供默认位置的网站,但是要找到一个告诉我如何获取“ xxxxx”值的网站则更加困难。我发现很多站点告诉我如何获取“ xxxxx”的值,但大多数站点是错误的或假定读者可能没有。我保留了一个名为“ Resources”的文件夹,其中包含子文件夹,例如Html,Css,VBAExcel,VBAOutlook和VBAGeneral。这些子文件夹包含记录有用片段的文本文件,我不太记得这些片段。我建议您创建一个类似的文件夹并记录我如何获得“ xxxxx”的值。

接下来,您需要打开电子邮件模板文件。我找到了很多站点,这些站点显示了如何从Excel中执行此操作,但是我没有找到一个站点可以显示如何从Outlook中正确执行此操作。从Excel,您必须创建一个Outlook应用程序对象。在Outlook中,您已经在Outlook应用程序对象中,因此不需要创建另一个对象。实际上,您无法创建新的Outlook应用程序对象,因为Outlook仅允许其自身的一个版本运行。如果尝试创建新的Outlook应用程序对象,则会为您提供对已经运行的副本的引用。同样,您可能希望将此信息记录在资源文件夹中。

我已经使用InputBox从用户那里获得了四个值。如果我是为自己或客户编写此宏,我将使用一种表单。很难显示如何创建一个表格,如果您已经知道的话,那将是徒劳的。

打开电子邮件模板后,您可以访问其所有属性。这个站点以及其他地方有很多答案,它们显示了如何修改电子邮件的html或文本正文。我假设您想发送html电子邮件,所以我修改了html正文。

我的宏显示已编辑的电子邮件,但是如果您不想在发送之前检查电子邮件,可以使用Send代替Display

Sub SendStdMsgOft()

  Dim Address As String
  Dim CompanyName As String
  Dim DateAndTime As String
  Dim FirstName As String
  Dim NewEmail As MailItem
  Dim PathFileName As String

  PathFileName = Environ("AppData") & "\Microsoft\Templates\StdMsg.oft"

  Set NewEmail = CreateItemFromTemplate(PathFileName)

  FirstName = InputBox("First name")
  CompanyName = InputBox("Company name")
  DateAndTime = InputBox("Date And Time")
  Address = InputBox("Address")

  With NewEmail
    .HtmlBody = Replace(.HtmlBody, "[A]", FirstName)
    .HtmlBody = Replace(.HtmlBody, "[B]", CompanyName)
    .HtmlBody = Replace(.HtmlBody, "[C]", DateAndTime)
    .HtmlBody = Replace(.HtmlBody, "[D]", Address)
    .Display
  End With

End Sub