2013-07-03 8 views
1

У меня есть следующий код, моя цель состоит в том, чтобы отправить автоматические электронные письма в список людей, в документе Excel, с помощью текстового файла в качестве шаблона:VBScript для отправки электронной почты через SMTP

Set objMessage = CreateObject("CDO.Message") 
Set app = CreateObject("Excel.Application") 
Set fso = CreateObject("Scripting.FileSystemObject") 

For Each f In fso.GetFolder("F:\Billing_Common\autoemail").Files 
    If LCase(fso.GetExtensionName(f)) = "xls" Then 
    Set wb = app.Workbooks.Open(f.Path) 

set sh = wb.Sheets("Auto Email Script") 
row = 2 
email = sh.Range("A" & row) 
subject = "Billing" 
LastRow = sh.UsedRange.Rows.Count 

For r = row to LastRow 
    If App.WorkSheetFunction.CountA(sh.Rows(r)) <> 0 Then 
    objMessage.Subject = "Billing: Meter Read" 
    objMessage.From = "[email protected]" 
    objMessage.To = email 

Const ForReading = 1, ForWriting = 2, ForAppending = 8 
Dim emailText         
Set emailText = fso.OpenTextFile("F:\Billing_Common\autoemail\Script\Email.txt", ForReading)           
BodyText = emailText.ReadAll 

    objMessage.TextBody = emailText 

objMessage.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/sendusing") = CdoSendUsingPort 


'Name or IP of Remote SMTP Server 
objMessage.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "ADDRESS OF SERVER HERE" 

'Server port 
objMessage.Configuration.Fields.Item _ 
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 

objMessage.Configuration.Fields.Update 
objMessage.Send 

    End if 
Next 

emailText.Close 
Set emailText = Nothing 
Set fso = Nothing 
wb.Close 
End If 
Next 

Он бросает ошибка в objMessage.TextBody, говоря несоответствие типа. Если бы кто-нибудь мог мне помочь, это было бы очень признательно!

Спасибо!

+0

У меня сейчас работает, но он не может заставить его использовать текстовый файл в качестве шаблона. –

+0

Лома, что все работает сейчас, но кто-нибудь знает, как добавить к нему изображение? –

+0

Как приложение? Или вы хотите создать HTML-почту? –

ответ

2

Для отправки встроенных изображений необходимо создать HTMLBody вместо TextBody и добавить RelatedBodyPart с изображением (см here):

Set msg = CreateObject("CDO.Message") 
... 
msg.HTMLBody = "<html>" & vbLf & _ 
       "<head><title>Test</title></head>" & vbLf & _ 
       "<body><p><img src='foo.jpg'></p></body>" & vbLf & _ 
       "</html>" 
msg.AddRelatedBodyPart "C:\path\to\your.jpg", "foo.jpg", 0 
0

После линии BodyText = emailText.ReadAll, вы должны назначить что, а не файл («emailText» является TextFile, который был Open ред fso на предыдущей строке), поэтому он жалуется на тип Рассогласуйте ...

Так что просто замените objMessage.TextBody = emailText на objMessage.TextBody = BodyText, и он должен работать ...

Смежные вопросы