E-Mail mit Anhang aus VBA (Windows Mail) vorbereiten
Schritt-für-Schritt-Anleitung
-
VBA-Editor öffnen: Drücke ALT + F11
, um den VBA-Editor in Excel zu öffnen.
-
Neues Modul erstellen: Rechtsklicke auf einen vorhandenen Eintrag im Projektfenster, wähle Einfügen
und dann Modul
.
-
Code zum Vorbereiten der E-Mail einfügen: Kopiere und füge den folgenden Code in das neue Modul ein:
Private Declare Function ShellExecute Lib "Shell32.dll" _
Alias "ShellExecuteA" (ByVal hWnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Private Sub Mail(sAdr As String, Optional sSub As String, _
Optional sBody As String)
Call ShellExecute(0, "Open", "mailto:" + sAdr + _
"?Subject=" + sSub + "&Body=" + sBody, "", "", 1)
End Sub
Sub MailVersenden()
Dim sAddress As String, sSubject As String, sTxt As String
sAddress = "" ' E-Mail-Adresse hier manuell eingeben
sSubject = "Angebot"
sTxt = "Sehr geehrte Damen und Herren," & "%0D%0A" & _
"Text" & "%0D%0A" & _
"Mit freundlichen Grüßen," & "%0D%0A" & _
"Absender"
Call Mail(sAddress, sSubject, sTxt)
End Sub
-
E-Mail mit Anhang vorbereiten: Um eine E-Mail mit Anhang über Windows Mail zu öffnen, kannst du folgenden Code verwenden:
Sub emailmitAnhang()
Application.CommandBars.ExecuteMso "FileEmailAsPdfEmailAttachment"
End Sub
-
Code ausführen: Führe die Subroutine MailVersenden
oder emailmitAnhang
aus, um die vorbereitete E-Mail zu erstellen.
Häufige Fehler und Lösungen
- Leere E-Mail wird gesendet: Stelle sicher, dass die Parameter
sAdr
, sSub
und sBody
korrekt übergeben werden.
- Anhang wird nicht hinzugefügt: Beachte, dass die
mailto
-Methode keine Anhänge unterstützt. Verwende stattdessen die CommandBars
-Methode.
- E-Mail wird nicht geöffnet: Prüfe, ob Windows Mail als Standard-E-Mail-Client eingerichtet ist.
Alternative Methoden
Eine alternative Methode, um E-Mails direkt aus Excel zu versenden, ist die Verwendung von CDO
(Collaboration Data Objects). Hier ist ein Beispiel, wie du eine E-Mail mit Anhang versenden kannst:
Sub Mail_Small_Text_CDO()
Dim iMsg As Object
Dim iConf As Object
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
iConf.Load -1 ' CDO Source Defaults
With iConf.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.web.de"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "benutzername"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "passwort"
.Update
End With
With iMsg
Set .Configuration = iConf
.To = "empfaenger@domain.de"
.From = "sender@domain.de"
.Subject = "Betreff"
.TextBody = "Hier steht der Text"
.AddAttachment "C:\Pfad\zum\Anhang.txt"
.Send
End With
End Sub
Praktische Beispiele
-
E-Mail mit vordefiniertem Text und Anhang:
- Verwende
MailVersenden
, um eine E-Mail mit vordefiniertem Text zu erstellen.
- Verwende
emailmitAnhang
, um eine E-Mail mit einem PDF-Anhang zu generieren.
-
CDO-E-Mail-Versand:
- Nutze die CDO-Methode, um eine E-Mail mit Anhang direkt zu versenden. Dies ist besonders nützlich, wenn du den Versand von E-Mails automatisieren möchtest.
Tipps für Profis
- E-Mail-Adressen validieren: Überprüfe, ob die eingegebenen E-Mail-Adressen gültig sind, bevor du die E-Mail sendest.
- Verwendung von SSL: Wenn dein SMTP-Server SSL erfordert, stelle sicher, dass du die entsprechende Zeile im CDO-Code aktivierst.
-
Return Receipt Lesebestätigung: Füge die Zeile zur Anforderung einer Lesebestätigung hinzu, um sicherzustellen, dass der Empfänger die E-Mail öffnet:
.Fields("urn:schemas:httpmail:disposition-notification-to") = "deine@domain.de"
FAQ: Häufige Fragen
1. Kann ich mit VBA auch Thunderbird ansteuern?
Leider ist es nicht möglich, Thunderbird direkt über VBA zu steuern, da es keine entsprechende API gibt.
2. Wie kann ich eine Lesebestätigung anfordern?
Verwende die CDO-Methode und füge die entsprechende Zeile für die Lesebestätigung in den Code ein.
3. Kann ich mehrere Anhänge hinzufügen?
Ja, du kannst die .AddAttachment
-Methode mehrfach aufrufen, um mehrere Anhänge hinzuzufügen.
4. Warum wird die E-Mail nicht angezeigt?
Bei der Verwendung von CDO wird die E-Mail im Hintergrund gesendet und daher nicht im Postausgang angezeigt. Nutze besser die mailto
-Methode, wenn du die E-Mail nur vorbereiten möchtest.