2015-04-02 298 views
6

我已經爲我的組織編寫了一個電子郵件程序,用於處理一些非常專業的事情,我可以使用Outlook或Gmail進行操作。現在,經理想要給我們的小客戶羣發送偶爾的電子郵件,但我希望電子郵件正文看起來很專業,不要作爲附件發送。我拼湊了一個HTML文檔,它存在於所有瀏覽器中並且已經過驗證。我的問題是我無法弄清楚如何指向HTML文檔的消息正文。這是顯着的代碼。從VBA電子郵件程序發送HTML電子郵件

這是所有設置:

Do While mailRs.EOF = False 
'Me.AttachDoc = "C:\EmailFolder\CouponForm.pdf" 
    emTo = mailRs.Fields("EmailAddr").Value 
    emFrom = "[email protected]" 
    emSubject = Me.Subject 
    emtextBody = Me.TextMessage 

下面是一個電話發送電子郵件

Call SendAMessage(emFrom, mailRs.Fields("EmailAddr").Value, _ 
        emSubject, emtextBody, emAttach) 

(我的代碼,發送電子郵件從網上和它的工作原理很好通過我們的郵件服務器。)

在上面,在撥打電話@emtextBody = Me.TextMessage之前我需要用Me.TextMessage替換爲html d的地址/正文ocument。消息框是ACCESS表單上的文本框。我無法在需要html的ACCESS中找到任何控件。我無法使用html文檔的路徑,因爲這會產生錯誤。有沒有辦法繞過這個

如果需要更多信息,我很樂意提供。

謝謝你的時間。

JPL

+0

VBA可能會限制其支持更新的郵件格式。在VB.NET中,我認爲有兩個bodyFormats - 文本和HTML。使用.NET應用程序可能會更好。您還應該提供純文本選項 - 有些用戶將其偏好設置爲純文本格式,有些公司限制HTML格式的電子郵件。 – Tim 2015-04-02 17:36:01

回答

0

我不能告訴是什麼代碼,您正在使用的SendAMessage函數內部,但所有的VBA的例子,我曾經使用過似乎與CDO.Message對象,以相同的方式工作就像這個MS知識庫文章KB286431。在某些時候SendAMessage將會有一個消息對象的.TextBody值賦給等於你在傳遞emtextBody參數線。

一種解決方案可能是您的SendAMessage功能複製到一個新的功能SendAMessageHTML並更換線在那裏它們被設置someMessage.TextBody = emtextBody讓你設置someMessage.HTMLBody = emtextBody

假設你的文本框沿,你可以修改現有的功能做一個天真的檢查這樣的"<html><head><body></body></html>"行文字:

if Left(UCase(emtextBody),6) = "<HTML>" then 
    someMessage.HTMLBody = emtextBody 
else 
    someMessage.TextBody = emtextBody 
end if 
+0

我上面的建議: – jpl458 2015-04-03 16:44:04

+0

在上面的建議如何處理HTML文件,如果它是一個文件夾。 – jpl458 2015-04-03 16:45:20

+0

對不起,胖手指。你寫了\t 一個解決方案可能是將你的SendAMessage函數複製到一個新的函數SendAMessageHTML中,並替換它們設置someMessage.TextBody = emtextBody的行,以便設置someMessage.HTMLBody = emtextBody。說html文檔在一個文件夾中; HTMLBody = c:\ htmlDocs \ EmailDoc.html。我如何做這項工作? – jpl458 2015-04-03 16:51:56

7

使用類似下面的代碼。我已經包含了附件以及html格式的元素,但幾乎所有可以用html編寫的東西都可以在vba中完成。

Sub SharePerformance() 

Dim OutApp As Object 
Dim OutMail As Object 
Dim rng As Range 


Set OutApp = CreateObject("Outlook.Application") 
Set OutMail = OutApp.createitem(0) 
'& "<a href=""\\server\folder"">\\server\folder</a>" & 
msg1 = "Team,<br><br><b><DL>" & Range("b5").Value & "</b><br><ul><b><u>" & Range("b6").Value & "</b></u>" 
msg1 = msg1 & "<DT><a HREF=C:\USER\Desktop\File1.xlsb>" 
msg1 = msg1 & Range("b7").Value & "</a><br>" 
msg1 = msg1 & "<b><u>" & Range("b9").Value & "</b></u></DL><br><br>" 


msg1 = msg1 & "<p><img src=file://" & "C:\temp\Chart1.png" & "></p>" & "<br>" 

On Error Resume Next 
' Change the mail address and subject in the macro before you run it. 

With OutMail 
    .To = Range("B1").Value 
    .cc = "" 
    .BCC = "" 
    .Subject = Range("B3").Value 
    .HTMLBody = msg1 
    '.Attachments.Add ActiveWorkbook.FullName 
    '.Attachments.Add ("C:\temp\Chart1.png") 
    '.Attachments.Add ("C:\temp\Chart2.png") 
    .display 
End With 
SendKeys "^{ENTER}" 
On Error GoTo 0 

Set OutMail = Nothing 
Set OutApp = Nothing 

End Sub 
+0

我的代碼是爲ACCESS 10編寫的,我假設上面的代碼是用於Excel的。另外假設msg1包含html。我的HTML文檔有超過100行。不使用Outlook。仍在掙扎,但謝謝jbay。 – jpl458 2015-04-03 20:14:04

+0

是的,但是在從參考文獻中選擇Microsoft Excel對象庫並將單元格引用更改爲指向別處後,我可以使用完全相同的代碼。線的數量應該沒有關係。 – jbay 2015-04-14 18:39:58