Отправить отдельные электронные письма заранее определенному набору людей со всеми файлами в папке - PullRequest
0 голосов
/ 15 апреля 2011

У меня есть куча файлов, которые обновляются в папке "C: \ Email". Это файлы PDF, которые создаются еженедельно. Это может быть число от 50 до 500 и более файлов. Имена файлов случайные.

Мне нужно отправить эти файлы по отдельности на три адреса, например a @ 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 "

это самая простая вещь, которую я придумал сегодня, но она громоздка, так как открывает столько окон новых сообщений Outlook, сколько есть файлов, которые могут стать утомительными. Во-вторых, это не позволяет мне отправлять сообщения автоматически.

Надеюсь, кто-нибудь может придумать сценарий VBS / Windows / код VBA для автоматизации того же самого.

Ответы [ 3 ]

0 голосов
/ 25 апреля 2011

Используйте Dir Loop для захвата каждого файла 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

Это отправит каждый файл в папке «Электронная почта» каждому получателю, но не отправит три отдельных электронных письма для каждого PDF-файла. Если вам это необходимо, код можно изменить.

0 голосов
/ 29 апреля 2011

Заменить код

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 
0 голосов
/ 16 апреля 2011

Вы можете попробовать отправить электронную почту из VBScript, используя объект CDO.Message.Вот пример, взятый из 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

. Вы должны поместить это в структуру цикла для отправки каждого файла в папке

...