将单个电子邮件发送到包含文件夹中所有文件的预定义人员

时间:2011-04-15 19:07:48

标签: vbscript batch-file outlook-2007 outlook-vba

我有一堆文件在“C:\ Email”文件夹中更新。这些是每周创建的PDF文件。这可以从50到500或更多文件的任何地方编号。文件名是随机的。

我需要将这些文件分别发送到三个地址,比如@ a.com,b @ b.com和c@c.com。我不能一次性发送所有文件,他们需要单独发送。主题将是文件的名称,正文将保持不变 - “请查找附件。感谢和问候,ABC”。

我一直在使用一些excel工作表的组合,我将所有必需的参数连接起来,使用命令行语法(即“C:\ Program Files \ Microsoft Office \ Office12”)为批处理文件提供文件名\ Outlook.exe / c ipm.note / m“a @ a.com,b @ b.com,c @ c.com& subject =<>& body =请找到附件。谢谢和问候,ABC“

这是我今天提出的最简单的事情,但它很麻烦,因为它打开了许多外观新消息窗口,因为有文件,这可能会让人厌烦。其次,这不允许我自动发送消息。

希望有人可以提出一个VBS / Windows脚本/ VBA代码来实现自动化。

3 个答案:

答案 0 :(得分:0)

您可以尝试使用CDO.Message对象从VBScript发送电子邮件。以下是http://www.paulsadowski.com/wsh/cdo.htm

的示例
Set objMessage = CreateObject("CDO.Message") 
objMessage.Subject = "Example CDO Message" 
objMessage.From = "me@my.com" 
objMessage.To = "test@paulsadowski.com" 
objMessage.TextBody = "This is some sample message text." 
objMessage.AddAttachment "c:\temp\readme.txt"
objMessage.Send

您可以将其置于循环结构中以发送文件夹

中的每个文件

答案 1 :(得分:0)

使用Dir循环抓取每个PDF文件并创建新电子邮件。像这样:

Const SOURCE_FOLDER As String = "C:\Email\"
Const RECIP_A As String = "a@a.com"
Const RECIP_B As String = "b@b.com"
Const RECIP_C As String = "c@c.com"
Const EMAIL_BODY As String = "Please find attached file. Thanks and Regards, ABC"

Sub SendPDFs()

  On Error GoTo ErrorHandler

  Dim fileName As String

  fileName = Dir(SOURCE_FOLDER)

  Do While Len(fileName) > 0
    Call CreateEmail(SOURCE_FOLDER & fileName)

    Dir (SOURCE_FOLDER)
  Loop

ProgramExit:
  Exit Sub
ErrorHandler:
  MsgBox Err.number & " - " & Err.description
  Resume ProgramExit
End Sub

Function CreateEmail(fileName As String)

Dim olApp As Outlook.Application
Dim msg As Outlook.MailItem

  ' create email
  Set olApp = Outlook.Application
  Set msg = olApp.createitem(olMailItem)

  ' set properties
  With msg
    .Body = EMAIL_BODY
    .Recipients.Add (RECIP_A)
    .Recipients.Add (RECIP_B)
    .Recipients.Add (RECIP_C)
    .Attachments.Add fileName
    .Send
  End With

End Function

这会将Email文件夹中的每个文件发送给每个收件人,但不会为每个PDF发送三个单独的电子邮件。如果您需要具体,可以更改代码。

答案 2 :(得分:0)

替换代码

Do While Len(fileName) > 0     
Call CreateEmail(SOURCE_FOLDER & fileName)      
Dir (SOURCE_FOLDER)   
Loop  

Do While Len(fileName) > 0     
Call CreateEmail(SOURCE_FOLDER & fileName)      
filename = Dir   
Loop