2015-04-02 6 views
6

Ich habe ein E-Mail-Programm für meine Organisation geschrieben, die einige sehr spezielle Dinge sehr gut behandelt, Dinge, die ich Outlook oder Google Mail verwenden konnte. Nun möchte der Manager gelegentlich eine E-Mail an unsere kleine Kundenbasis senden, aber ich möchte, dass der E-Mail-Text professionell aussieht und nicht als Anhang versendet wird. Ich habe ein HTML-Dokument zusammengestellt, das in allen Browsern vorhanden ist und validiert wurde. Mein Problem ist, dass ich nicht herausfinden kann, wie man den Nachrichtentext auf das HTML-Dokument richtet. Hier ist der hervorstechende Code.Senden von HTML-E-Mail von VBA-E-Mail-Programm

Dies ist, wo alles eingerichtet ist:

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 

Hier ist eine der Aufruf zum Senden der E-Mail

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

(bekam ich den Code für das Senden der E-Mail im Internet ab und es funktioniert toll durch unseren Mail-Server.)

In den oben genannten, bevor der Anruf @emtextBody = Me.TextMessage ist, wo ich Me.TextMessage mit der Adresse/Körper des html d ersetzen muss Okument. Und das Meldungsfeld ist eine TextBox auf dem Access-Formular. Ich kann keine Kontrolle in ACCESS finden, die HTML nimmt. Ich kann den Pfad zum HTML-Dokument nicht verwenden, da dies einen Fehler erzeugt. Gibt es eine Möglichkeit, diese zu umgehen

Wenn weitere Informationen erforderlich sind, werde ich glücklich sein, es zu liefern.

Danke für Ihre Zeit.

JPL

+0

VBA möglicherweise in seiner Unterstützung für die neueren Mail-Formate beschränkt werden. In VB.NET finde ich zwei BodyFormats - Text und HTML. Sie könnten mit einer .NET-Anwendung besser dran sein. Sie sollten auch eine einfache Textoption angeben. Einige Benutzer legen ihre Voreinstellungen auf reinen Text fest, und einige Unternehmen schränken HTML-formatierte E-Mails ein. – Tim

Antwort

0

kann ich nicht sagen, welcher Code innerhalb dieser SendAMessage Funktion Sie verwenden, aber alle VBA-Beispiele, die ich mit scheinen gearbeitet habe wie in diesem MS die gleiche Art und Weise mit dem CDO.Message Objekt zu arbeiten Knowledge Base-Artikel KB286431. An einem gewissen Punkt SendAMessage wird eine Linie haben, der die Botschaft des Objekts .TextBody Wert ist gleich dem emtextBody Parameter Sie in geben zuordnet.

Eine Lösung sein kann Ihre SendAMessage Funktion in eine neue Funktion SendAMessageHTML und ersetzen Sie die Zeile kopieren wo sie someMessage.TextBody = emtextBody setzen, so dass Sie someMessage.HTMLBody = emtextBody

Ihre Textbox setzen hat entlang der Linien von "<html><head><body></body></html>" Text Vorausgesetzt, dass Sie Ihre bestehende Funktion ändern könnte eine naive Kontrolle wie dies zu tun:

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

I der obige Vorschlag: – jpl458

+0

In dem obigen Vorschlag wie adressiere ich das HTML-Dokument, wenn es ein Ordner ist. – jpl458

+0

Sorry für die fetten Finger. Sie haben geschrieben: \t Eine Lösung könnte sein, Ihre SendAMessage-Funktion in eine neue Funktion SendAMessageHTML zu kopieren und die Zeile zu ersetzen, in der sie someMessage.TextBody = emtextBody festlegen, sodass Sie someMessage.HTMLBody = emtextBody festlegen.Angenommen, das HTML-Dokument befindet sich in einem Ordner. HTMLBody = c: \ htmlDocs \ EmailDoc.html. Wie mache ich das? – jpl458

7

Verwenden Sie so etwas wie den folgenden Code. Ich habe Elemente für den Anhang sowie HTML-Formatierung enthalten, aber so ziemlich alles, was Sie in HTML schreiben können, kann auch innerhalb von VBA getan werden.

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

Mein Code wurde für ACCESS 10 geschrieben, ich gehe davon aus, dass der obige Code für Excel war. Auch vorausgesetzt, dass msg1 das HTML enthält. Mein HTML-Dokument hat mehr als 100 Zeilen. Outlook wird nicht verwendet. Immer noch kämpfen, aber danke jbay. – jpl458

+0

Ja, es war, aber ich war in der Lage, den exakt gleichen Code im Zugriff zu verwenden, nachdem ich die Microsoft Excel-Objektbibliothek aus Referenzen ausgewählt und die Zellreferenzen geändert hatte, um woanders hinzugehen. Die Anzahl der Zeilen sollte nicht wichtig sein. – jbay