2017-02-20 1 views
1

Ich versuche, ein Massen-E-Mail-Makro zusammenzustellen, das durch eine Tabelle iterieren und E-Mails und Empfängernamen abrufen wird. Für Branding-Zwecke möchte ich jede E-Mail mit Unterschriften versehen.Automatische Signaturen in E-Mails mit Access-Outlook-Makros

Ich versuche, das MailItem Objekt zu verwenden, aber ich immer laufen in zwei Probleme:

  1. .Display erstellt eine neue E-Mail-Ausblick und füllt es mit der Standardsignatur. Jedoch wird .body die Signatur mit der Textzeichenfolge in strMessage löschen. Ich vermute es, weil ich nicht sowohl einen Tisch (inkl. Bilder, etc) als auch Strings im selben E-Mail-Objekt haben kann?

  2. Ich habe versucht, die .send und .body-Methode auf Microsoft Outlook 15 und 16 Objektbibliotheken. Während beide an 16 arbeiten, scheint keiner in 15 zu existieren. Ich bekomme immer einen "anwendungsdefinierten oder objektdefinierten Fehler". Ich kann keine Dokumentation zu Outlook 15-Bibliotheken finden. Weiß jemand, welche Methoden 15 zu .send und .body äquivalent sind?

    Dim OApp As Object, OMail As Object, signature As String 
    Set OApp = CreateObject("Outlook.Application") 
    Set OMail = OApp.CreateItem(0) 
    
    Dim rs As DAO.Recordset 
    Dim db As Database 
    Dim strSQL As String, strFirstName As String, strLastName As String, strFullName As String, strSubject As String, strMessage As String 
    
    Set db = CurrentDb 
    
    strSQL = "SELECT Email, FirstName, LastName FROM PersonsT WHERE [PersonsT]![Attended]=True" 
    
    Set rs = db.OpenRecordset(strSQL) 
    
    Do While Not rs.EOF 
    strFirstName = rs.Fields("FirstName") 
    strLastName = rs.Fields("LastName") 
    strFullName = rs.Fields("FirstName") & " " & rs.Fields("LastName") 
    
    strSubject = "Greetings" 
    strMessage = "Hello " & strFullName & vbNewLine & vbCrLf & " Let me be the first to congratulate you on registering in this program" 
    
    With OMail 
    .Display 
    End With 
    
    With OMail   
        .to = rs![Email] 
        .Subject = strSubject 
        .body = strMessage 
        .send  
    End With 
    
    rs.MoveNext 
        Loop 
    
         Set OMail = Nothing 
         Set OApp = Nothing 
    
         rs.Close 
         Set rs = Nothing 
    
+0

Try '.body = strMessage & vbCrLf & .body' –

+0

Wenn Ihre Outlook mehrere Signaturdateien zur Auswahl hat, erstellen Word-App verwenden' oWordApp.EmailOptions.EmailSignature.NewMessageSignature = 'ändern die Signatur und/oder die Original wiederherstellen. Tun Sie dies, bevor die zu sendende Outlook-Anwendung HTML-Signaturen verwendet, die Bilder und Inhalte in der Tabelle usw. haben können. – PatricK

+0

@TimWilliams Kein Glück. Ich habe versucht, .body zu isolieren, und es erzeugt auch einen anwendungsdefinierten oder objektdefinierten Fehler. – enmasse

Antwort

1

Betrachten MailItem die GetInspector() Eigenschaft mit Signaturtext vorher abrufen und dann auf Nachrichtentext verketten. Rendering kann variieren, so versuchen .HTMLBody über .Body in beiden Linien:

... 
Dim signature As String 

oMail.GetInspector 
signature = oMail.Body 

With OMail   
    .Recipients.Add rs![Email] 
    .Subject = strSubject 
    .Body = strMessage & signature 
    .Display  
End With 
+0

Hallo zusammen. Dieser Code funktioniert auf meinem Rechner mit Bibliothek 16, aber auf 15 erzeugt er immer noch einen anwendungsdefinierten oder objektdefinierten Fehler. – enmasse

+0

Outlook 2013 entspricht der Version 15 und Outlook 2016 der Version 16. Sind beide Outlook-Versionen doppelt installiert? Ich habe nur 2013 installiert, so versichere ich Ihnen, dass dies in 15 funktioniert. – Parfait

+0

Ich habe Office 2016 auf einer anderen Maschine installiert und teste den Code parallel zu meiner Hauptmaschine mit Office 2013. Funktioniert die .send-Funktion auf Ihrem 2013 basiert Maschine auch? – enmasse

0

Dies funktioniert mit allen möglichen Varianten von Outlook, und verwendet die späte Bindung so Versionen/Referenzen sollte kein Problem sein.

Dim OutApp   As Object 
Dim OutMail   As Object 
Dim signature  As String 

Set OutApp = CreateObject("Outlook.Application") 
OutApp.Session.Logon 
Set OutMail = OutApp.CreateItem(0) 
On Error Resume Next 
With OutMail        ' This creates a blank email and captures the users default signature. 
    .BodyFormat = 2      'olFormatHTML 
    .Display 
End With 

signature = OutMail.HTMLBody 
+0

Sorry für die späte Antwort, ich habe diese Antwort komplett verpasst. Ich benutzte Outlook-Anwendungen in einer früheren Version dieses Makros, fand aber, dass das Setzen irgendeiner Art von .body (die im Klartext eingegeben würde, glaube ich) würde die Signatur löschen. Ich denke, es liegt daran, dass die Signatur Tabellen enthält. – enmasse