生成文件以使用密件抄送字段

时间:2015-10-01 07:36:54

标签: vba email utf-8 outlook outlook-vba

我需要以编程方式在用户计算机上打开Outlook 2016,其中包含新消息,其中包含预定义字段(To,Bcc,UTF-8正文,附件)。为此,我需要生成一个outlook作为新消息打开的文件,或者生成outlook打开新消息的脚本。

这可能看起来很简单,但实际上却很棘手。例如,我会以生成.eml文件的方式执行此操作,其内容如下:

From: info@m.net
To: to@m.net
Cc: cc@m.net
Bcc: bcc@m.net
X-Unsent: 1
Subject: Something

This is a test message.
Multipart can be used to add attachment.

问题是这不会起作用,因为如果这个文件是由outlook打开的(如.eml文件),outlook可以打开它,但它完全忽略了Bcc行。

所以在另一次迭代中,我会尝试制作一个VBS脚本:

Set objoutlookApp = CreateObject("Outlook.Application") 
Set objmessage = objoutlookApp.CreateItem(olMailItem) 
objmessage.TO = "mail1@domain.com;mail2@example.de"
objmessage.CC = "cc1@x.com;cc2@y.de"
objmessage.BCC = "bcc@domain.com"
objmessage.Subject = "E-Mail Subject"
objmessage.Body = "Here comes some text"
objmessage.display
set objmessage = Nothing
set objoutlookApp = Nothing
wscript.quit

这看起来好一点,但仍然不足。首先,VBS文件不能采用UTF-8格式,因此无法用中文发送电子邮件,例如,我需要能够直接将UTF-8编码的字符串写入正文它需要是一个单文件解决方案。第二,我不知道如何以这种方式添加atachments(multipart)。

有没有办法在outlook中使用预定义字段(包括密件抄送)打开新的消息窗口,我可以通过一个文件生成服务器端,然后发送给用户打开?

2 个答案:

答案 0 :(得分:0)

Outlook对象模型提供了三种使用项主体的主要方法:

  1. Body - 没有任何mnarkup的纯文本。
  2. HTMLBody - 表示邮件正文的HTML标记。
  3. Word编辑器。 Inspector类的WordEditor属性返回表示邮件正文的Word文档实例。因此,您可以使用Word对象模型对邮件正文执行任何操作。
  4. 由您决定选择哪种方式。有关详细信息,请参阅Chapter 17: Working with Item Bodies

    您可以使用“附件”类的Add方法,该方法会在“附件”集合中创建新附件。例如:

     Sub AddAttachment() 
      Dim myItem As Outlook.MailItem 
      Dim myAttachments As Outlook.Attachments 
    
      Set myItem = Application.CreateItem(olMailItem) 
      Set myAttachments = myItem.Attachments 
      myAttachments.Add "D:\Documents\Q496.xlsx", _ 
        olByValue, 1, "4th Quarter 1996 Results Chart" 
      myItem.Display 
     End Sub
    

    最后,您可能会发现How to automate Outlook from another program文章很有帮助。

答案 1 :(得分:0)

您的VBS文件不能进行UTF-8编码,但VB脚本可以正常使用UTF-16编码文件。我从记事本中以UTF-16编码保存的以下文件没有问题:

Set objoutlookApp = CreateObject("Outlook.Application") 
Set objmessage = objoutlookApp.CreateItem(olMailItem) 
objmessage.TO = "mail1@domain.com;mail2@example.de"
objmessage.CC = "cc1@x.com;cc2@y.de"
objmessage.BCC = "有些BCC名 <bcc@domain.com>"
objmessage.Subject = "E-Mail Subject"
objmessage.Body = "Here comes some text"
objmessage.display
set objmessage = Nothing
set objoutlookApp = Nothing