Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: email mit Anhang aus VBA (Windows Mail)

email mit Anhang aus VBA (Windows Mail)
Anne
Hallo,
ich möchte über VBA eine email (Windows Mail) vorbereiten, die sowohl einen Betreff, Text und einen Anhang enthält.
Leider bekommen ich entweder die vorbereitete Mail, oder eine leere Mail mit dem gewünschten Anhang. Hierfür habe ich folgende Codes im Formu gefunden:
Vorbereitete Email mit Windows Mail öffnen :
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, sAttach As String
sAddress = ""
sSubject = "Angebot"
sTxt = "Sehr geehrte Damen und Herren," & "%0D%0A" & "%0D%0A" & _
"Text" & "%0D%0A" & "%0D%0A" & "%0D%0A" & _
"Mit freundlichen Grüßen" & "%0D%0A" & "%0D%0A" & _
"Absender"
Call Mail(sAddress, sSubject, sTxt)
End Sub
Email mit Anhang mit Windows Mail öffnen:
Sub emailmitAnhang()
Application.CommandBars.ExecuteMso "FileEmailAsPdfEmailAttachment"
End Sub Bekomme ich da auch irgendwie zusammen?
Vielen Dank für Eure Hilfe!!!!
Gruß
Anne
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: email mit Anhang aus VBA (Windows Mail)
10.01.2011 01:04:15
Nepumuk
Hallo,
kannst du aus Excel selbst heraus (Officebutton - Senden - Email) so ein Mail generieren (nur mit Anhang) welches dann über Windows-Mail versand wird? Ich kann das nicht testen, da bei mir Outllok aufgeht.
Gruß
Nepumuk
Nicht mit Windows-Mail
10.01.2011 03:50:05
mumpel
Hallo!
Leider gibt es für Dein Problem keine Lösung. Es gibt nur sehr wenig Emailprogramme die sich aus VBA heraus steuern lassen (Outlook, Lotus Notes, david.fix, GroupWise). Nicht dazu gehören Thunderbird, Windows Mail undOutlook Express.
Dir wird nichts weiter übrig bleiben als den Standardweg zu gehen oder Outlook zu erwerben.
Gruß, René
Anzeige
doch, Outook Express und LiveMail sollten gehen
10.01.2011 09:32:05
Martin
Hallo René,
mit folgendem Code wird über Outlook Express bzw. dem Nachfolger Windows (Live) Mail eine Email auch mit Anhang per Excel-VBA verschickt. Leider wird diese Email (außer beim Empfänger natürlich) nirgends angezeigt (weder im Postausgang noch unter Gesendete Objekte). Als Notlösung würde ich daher die eigene Adresse im Cc-Feld eintragen. Leider wird der Code Anne nicht weiterhelfen, da die Email ja nur "vorbereitet" werden soll.
Viele Grüße
Martin
Sub Mail_Small_Text_CDO()
Dim iMsg As Object
Dim iConf As Object
Dim strbody As String
Dim Flds As Variant
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
iConf.Load -1    ' CDO Source Defaults
Set Flds = iConf.Fields
With Flds
'Lokal installierter SMTP-Service = Wert 1, SMTP-Service im Netzwerk = Wert 2
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'SMTP-Server
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.web.de"
'SMTP-Serverport (Standard: 25)
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
'Falls Server Authentifizierung fordert
'gibt den Mechanismus zur Authentifizieren am SMTP-Dienst an (0=Keine, 1=Klartext, 2=  _
current process security context)
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
'Benutzername
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "benutzername"
'Kennwort
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "passwort"
'Nutzung von SSL (False or True)
'.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
'Connection Timeout in Sekunden (maximale Zeit die CDO versucht den Server zu erreichen)
'.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
.Update
End With
With iMsg
Set .Configuration = iConf
.To = """Name Empfaenger"" "
.Cc = ""
.Bcc = "meinname@domain.de"
'.ReplyTo = "antwort@domain.de" 'ANTWORTADRESSE
.From = """Vorname Nachname"" "
.Subject = "Betreff meiner Email"
'Nur Text
.TextBody = "Hier steht der Text meiner Email"
'HTML-Seite aus Internet
'.CreateMHTMLBody "http://www.domain.de/email.html"
'Lokale HTML-Seite
'.CreateMHTMLBody "file://C:/Dokumente und Einstellungen/User Name/Desktop/startseite.htm"
'.AddAttachment "c:\asmruntime.log" 'Anhang
'Dringlichkeit (zeigt Outlook nur unter Eigenschaften an)
'.Fields("urn:schemas:httpmail:importance") = 2 ' 0=low, 1=normal, 2=high
'.Fields.Update
'Priorität (zeigt Outlook deutlich an)
'.Fields("urn:schemas:mailheader:X-Priority") = 1 ' 1=hoch 3 = normal, 5 = niedrig
'.Fields.Update
'Lesebestätigung anfordern mit Antwortadresse
'.Fields("urn:schemas:mailheader:return-receipt-to") = "name@domain.de"
'.Fields("urn:schemas:mailheader:disposition-notification-to") = "name@domain.de"
'.Fields.Update
.Send
End With

Anzeige
AW: email mit Anhang aus VBA (Windows Mail)
10.01.2011 07:26:53
Anne
Hallo Nepomuk,
ich will die email nicht direkt versenden, sondern nur vorbereiten. Wenn ein Fenster aufgeht, in dem die vorbereitete email mit dem Anhang erscheint, reicht mir das aus. In meinem Fall ist die email-Adresse nicht in excel vorhanden, so dass diese manuell erfasst werden muss. Das funktioniert mit dem angegeenen Code.
Gruß
Anne
Anzeige
AW: email mit Anhang aus VBA (Windows Mail)
10.01.2011 15:02:31
mumpel
Eine Alternative wäre Mail the whole workbook With SendMail (Example 2) von Ron DeBruin.
Hat allerdings Nachteile.: Es ist kein Emailtext möglich, die nervende Meldung "Ein Programm versucht..." erscheint (auch wenn sie deaktiviert wurde) und die Email wird nicht angezeigt sondern im Postausgang geparkt.
Anzeige
AW: email mit Anhang aus VBA (Windows Mail)
10.01.2011 16:58:54
Anne
Hallo,
vielen Dank für Eure Hilfe, theoretisch könnte ich mir ja mit dem gelieferten Code eine mail schicken, diese weiterbearbeiten und dann erst an den korrekten Empfänger weiterleiten.
Ich teste mal, ob sich das in der Praxis bewährt.
Gruß
Anne
;
Anzeige
Anzeige

Infobox / Tutorial

E-Mail mit Anhang aus VBA (Windows Mail) vorbereiten


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Neues Modul erstellen: Rechtsklicke auf einen vorhandenen Eintrag im Projektfenster, wähle Einfügen und dann Modul.

  3. 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
  4. 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
  5. 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

  1. 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.
  2. 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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige