E-Mail über Outlook versenden

    • Allgemein

      E-Mail über Outlook versenden

      Hier ein Modul, das eine E-Mail über Outlook versendet. Dieses Modul kann in allen Office-Programmen (Word, Excel, PowerPoint, Access, Project, Visio) genutzt werden.

      Visual Basic-Quellcode

      1. ​Option Explicit
      2. Option Private Module
      3. Public olApp As Outlook.Application
      4. ' Der Verweis auf Outlook muss gesetzt sein
      5. ' strTo - Empfängeradresse ggf. durch Semikolon getrennt
      6. ' Subject - Betreff
      7. ' Body - Der Text der E-Mail, falls HTML mit HTML-Formatierung für day Layout
      8. ' CC - Empfängeradresse in CC ggf. durch Semikolon getrennt
      9. ' BCC - Empfängeradresse in BCC ggf. durch Semikolon getrennt
      10. ' Importance - Wichtigkeit 1- normal, 2 - hoch
      11. ' HTML - True E-Mail mit Outlook-Signatur, False E-Mail mit Nur Text
      12. ' Display - True zeigt die E-Mail an, False versendet die E-Mail direkt
      13. ' Attachements - Array mit für Anlagen, die Datei muss mit dem kompletten Pfad angegebnen werden
      14. Public Sub SendEmail(ByVal strTo As String, ByVal Subject As String, ByVal Body As String, _
      15. Optional ByVal CC As String = "", Optional ByVal Bcc As String = "", Optional ByVal Importance As Integer = 1, _
      16. Optional HTML As Boolean = False, Optional Display As Boolean = False, Optional ByVal Attachments As Variant)
      17. On Error GoTo ErrHandling
      18. Dim olMail As Outlook.MailItem
      19. Dim olOldbody As String
      20. If olApp Is Nothing Then
      21. Set olApp = GetObject(, "Outlook.Application")
      22. End If
      23. Set olMail = olApp.CreateItem(olMailItem)
      24. With olMail
      25. .To = strTo
      26. .CC = CC
      27. .Bcc = Bcc
      28. .Subject = Subject
      29. .Importance = Importance
      30. If isArrayEmpty(Attachments) = False Then
      31. Dim strFile As Variant
      32. For Each strFile In Attachments
      33. If FileExists(strFile) = True Then
      34. .Attachments.Add strFile
      35. Else
      36. Dim intPos As Integer
      37. Dim part() As String
      38. str = Replace(strFile, "/", "\")
      39. part = Split(strFile, "\")
      40. MsgBox "Die Datei '" & part(UBound(part)) & "' konnte nicht gefunden werden."
      41. End If
      42. Next
      43. End If
      44. 'HTML ergibt eine E-Mail mit Outlook-Signatur
      45. If HTML Then
      46. olOldbody = .HTMLBody
      47. .HTMLBody = "<html><body>" & Body & olOldbody
      48. Else
      49. .Body = Body
      50. End If
      51. If Display Then
      52. .Display
      53. .GetInspector.Display
      54. Else
      55. .Send
      56. End If
      57. End With
      58. Set olMail = Nothing
      59. Exit Sub
      60. ErrHandling:
      61. Select Case Err.Number
      62. Case 429
      63. Set olApp = CreateObject("Outlook.Application")
      64. Resume Next
      65. Case Else
      66. MsgBox "Fehler bein E-Mail versenden" & vbNewLine & Err.Number & " " & Err.Description
      67. On Error GoTo -1
      68. End Select
      69. End Sub
      70. Public Function FileExists(ByVal strFilePath As String) As Boolean
      71. FileExists = False
      72. On Error Resume Next
      73. If Not Dir(strFilePath) = vbNullString And Not strFilePath = vbNullString Then
      74. FileExists = True
      75. End If
      76. End Function


      Es muss auf jeden Fall unter Extras - Verweise der Verweis auf die Microsoft Outlook X Library gesetzt sein.

      Die Prozedur SendEmail versendet eine E-Mail, FileExists prüft, ob Anlagen für den Versand zugänglich sind.

      In Zeile 27 wird versucht Outlook anzusprechen, falls Outlook geöffnet ist. Wenn Outlook nicht geöffnet ist, wird in der Fehlerroutine in Zeile 82 Outlook geöffnet.

      Ab Zeile 39 werden Anhänge an die E-Mail angefügt. Die Anlagen müssen mit einem Array übergeben werden. Ein Anhang muss immer mit seinem vollen Pfad angegeben werden. In Zeile 45 wird überprüft, ob die Anlage auch wirklich da ist.

      Ab Zeile 60 wird der E-Mail-Text aufgebaut.
      Wenn HTML = True wird die E-Mail in HTML geschrieben. Dies bedeutet, es wird die Standard-Signatur des Nutzers an die E-Mail angefügt.
      In Zeile 61 wird die Signatur ausgelesen und in Zeile 62 wieder angehängt.
      Wichtig ist hier das der Text auch in HTML formatiert sein muss.

      Ab Zeile 67 wird entschieden, ob die E-Mail angezeigt und vom Nutzer manuell versendet oder automatisch gesendet wird.
      NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).