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

Forumthread: E-Mail senden in IBM Notes mit VBA

E-Mail senden in IBM Notes mit VBA
17.12.2021 09:18:17
Erik
Liebe Gemeinde,
ich habe mit untenstehender Funktion die Möglichkeit, E-Mails aus Excel heraus über IBM Notes zu versenden. Grundsätzlich klappt das sehr gut. Allerdings musste ich den Code vor Kurzem überarbeiten, da der Nachrichtentext immer unter der Notes-eigenen Signatur eingefügt wurde. Dieses Problem konnte ich lösen, aber leider sind nun zwei Probleme aufgetaucht, die ich vorher nicht hatte.
Ich bin für jeden Tipp und jede Hilfe dankbar!
Der Code
Bitte seht mir die Mißachtung der Namenskonventionen nach, ich bin Autodidakt und formuliere meinen Code noch sehr menschenartig.

'#  E-Mail mit VBA in IBM NOTES senden
'|  Quellen:
'| http://www.online-excel.de/excel/singsel_vba.php?f=42
'| http://www.office-loesung.de/ftopic232699_0_0_asc.php
'| http://www-12.lotus.com/ldd/doc/lotusscript/lotusscript.nsf/1efb1287fc7c27388525642e0074f2b6/1f82ab14864680138525642e007687cb?OpenDocument
'|  Benötigt Lotus Notes Client 4.5.x oder besser
'|  Parameterinfos:
'|      Empfaenger, Kopie, Blindkopie = Eine Zeichenkette oder ein Array, dass gültige E-Mail-Adressen enthält
'|      Betreff = Eine Zeichenkette, die den Titel/das Thema der Nachricht enthält
'|      Nachtricht = Eine Zeichenkette, die den Text der E-Mail enthält
'|      Anhang =    Eine Zeichenkette, die einen oder mehrere gültige Dateipfade für die Anhänge enthält;
'|                  mehrere Dateipfade müssen mit einem Semikolon ";" getrennt werden
'|      Speichern = Gibt an, ob die E-Mail in IBM Notes im Ordner "Gesendet" gespeichert soll; optional
'|      Sofort_senden = Gibt an, ob die E-Mail in IBM Notes vor dem Senden angezeigt oder sofort gesendet werden soll
'|      Dateiname = Gibt eine alternative Maildatei an; .*.nsf; relevant, wenn man Zugang zu mehreren Maildateien besitz
'|                  bspw. persönlich Dienst-E-Mail und Filial-E-Mail etc.
'|      Die obligatorischen Parameter Betreff, Kopie, Blindkopie, Nachricht und Anhang können auch mit einem leeren STRING
'|      übergeben werden.
Public Function E_Mail_senden( _
Empfaenger As Variant, _
Kopie As Variant, _
Blindkopie As Variant, _
Betreff As String, _
Nachricht As String, _
Anhang As String, _
Optional Speichern As Boolean = True, _
Optional Sofort_senden As Boolean = False, _
Optional Dateiname As String _
) As Boolean
Dim LotusNotes As Object
Dim Maildatenbank As Object 'Die Maildatenbank
Dim MailServer As String 'Der Mailserver
Dim MailFile As String ' Die Maildatei
Dim EMail As Object 'Die E-Mail in IBM Notes
Dim Anhangobjekt As Object 'Das Anlage Richtextfile Object
Dim Session As Object 'Die Notes Session
Dim Eingebettetes_Objekt As Object 'Anhang
Dim Anhaenge() As String 'Liste mehrere Anhänge
Dim Index As Long
Dim Dateipfad As String
Dim Fehlertext As String
Dim Notesfeld As Object 'Datenfeld in IBM Notes
Dim Aktuelle_Email As Object 'Aktuelle E-Mail
'Lotus Notes Session starten
Set Session = CreateObject("Notes.NotesSession")
'Lotus-Notes-Datenbank oeffnen
MailServer = Session.GetEnvironmentString("MailServer", True)
If VBA.Len(Dateiname) = 0 Then
MailFile = Session.GetEnvironmentString("MailFile", True)
Else
MailFile = "mail/" & Dateiname
End If
Set Maildatenbank = Session.GETDATABASE(MailServer, MailFile)
'Pruefe, ob die Maildatenbank geoeffnet ist
'Provoziert im Fall, dass sie geschlossen ist, einen Fehler
If Not Maildatenbank.IsOpen Then Maildatenbank.OPENMAIL
'Neue Mail einrichten
Set EMail = Maildatenbank.CREATEDOCUMENT
'Felder füllen
Set Notesfeld = EMail.APPENDITEMVALUE("Subject", Betreff)
Set Notesfeld = EMail.APPENDITEMVALUE("SendTo", Empfaenger)
Set Notesfeld = EMail.APPENDITEMVALUE("BlindCopyTo", Blindkopie)
Set Notesfeld = EMail.APPENDITEMVALUE("CopyTo", Kopie)
'Arbeitsumgebung laden
Set LotusNotes = CreateObject("Notes.NotesUIWorkspace")
'E-Mail erstellen
LotusNotes.EDITDOCUMENT True, EMail
'Aktuell erstellte E-Mail auswählen
Set Aktuelle_Email = LotusNotes.CurrentDocument
'Nachricht einfügen
Aktuelle_Email.GotoField "Body"
Aktuelle_Email.InsertText Nachricht
'Anlagen hinzufügen
Anhaenge = VBA.Split(Anhang, ";")
For Index = LBound(Anhaenge) To UBound(Anhaenge)
Dateipfad = Anhaenge(Index)
If Dateipfad  "" And VBA.Dir(Dateipfad)  "" Then
Set Anhangobjekt = EMail.CREATERICHTEXTITEM("Attachment" & Index)
Set Eingebettetes_Objekt = _
Anhangobjekt.EMBEDOBJECT(1454, "", Dateipfad, "Attachment" & Index)
End If
Next
'Nachricht nach dem Senden speichern (oder nicht)
EMail.SAVEMESSAGEONSEND = Speichern
If Speichern = True Then EMail.Save True, True, True
'Prüfe, ob die E-Mail sofort gesenden werden soll
If Sofort_senden = True Then
'E-Mail senden
Aktuelle_Email.Send False, Empfaenger
'E-Mail schließen
Aktuelle_Email.Close
End If
'WAHR als Rueckgabewert der Funktion bestimmen
E_Mail_senden = True
End Function
Die Probleme
Es funktioniert die Funktion "Speichern" nicht mehr, d.h. IBM Notes speichert die E-Mail auch im Ordner "Gesendet", wenn ich das gar nicht will (Parameter Speichern = false).
Das zweite Problem hat mit meinem dienstlichen Kontext zu tun: Ich habe zwei E-Mail-Zugänge. Eine persönliche Dienst-E-Mail-Adresse mmustermann@firma.de (Maildatei: mmustermann.nsf) und eine Filial-E-Mail-Adresse meinefiliale@firma.de (Maildatei: meinefiliale.nsf). Beide Maildateien liegen, so weit ich das ermitteln konnte, im gleichen Basisverzeichnis. Wenn ich den o.g. Code mit meiner persönlichen E-Mail nutze, dann funktioniert der Parameter Sofort_senden = true ohne Probleme, wenn ich meine Filial-E-Mail-Adresse verwende, fragt mich IBM Notes, ob ich die Änderungen speichern will, obwohl ich die E-Mail gern ohne Nachfrage abschicken möchte.
Ich hoffe, ich konnte mein Anliegen klar und verständlich darstellen. Ich bedanke mich für eure Aufmerksamkeit,
herzliche Grüße aus Dresden
Erik
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: E-Mail senden in IBM Notes mit VBA
22.12.2021 17:16:51
ChrisL
Hi Erik
Lange musstest du auf ein Lebenszeichen aus dem Forum warten :)
(mir ist erst spät eingefallen, dass ich noch einen alten IBM Notes Client rumliegen habe)
Also bei mir wird die Mail ebenfalls immer in den Sent-Ordner gelegt. Ich glaube, dies hängt mit der Vorgaben zusammen.
Benutzervorgaben, Mail, Senden und Empfangen, Kopien meiner gesendeten Nachrichten speichern: Immer
Leider hat der Admin die Einstellung gesperrt, so dass ich nicht testen kann, ob diese Einstellung die individuelle Mail-Option übersteuert. Ich könnte es mir aber gut vorstellen.
Ich vermute auch das zweite Thema hängt irgendwie mit den Vorgaben zusammen. Welche genau habe ich nicht weiter recherchiert.
Folgenden Beitrag habe ich versucht zu verstehen:
https://stackoverflow.com/questions/47525478/save-copy-of-mail-that-i-send-lotus-notes-using-script
Ganz blicke ich allerdings nicht durch. Dennoch folgende Aussage:
You create your mail in the mail.box of the server, not in your personal mailfile. Therefor you don't see them. None of the preferences has any effect on mails that are created programmatically.
Im Gegensatz dazu gehe ich davon aus, dass du in den jeweiligen Mailboxen arbeitest und nicht auf dem Server. Somit wäre der Umkehrschluss, dass bei dir die Präferenzen relevant sind.
Zugegeben, meine Antwort ist wenig konkret oder getestet. Vielleicht ist es ja trotzdem ein Schubser in die richtige Richtung.
Ansonsten würde ich empfehlen mal in einem IBM-Notes Forum nachzufragen. Als Excel- oder VBA-Crack kann man leider nichts zum Thema beitragen und die Spielwiese wird dem Grossteil der hier Anwesenden fehlen.
cu
Chris
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

E-Mail senden in IBM Notes mit VBA


Schritt-für-Schritt-Anleitung

Um E-Mails aus Excel über IBM Notes zu versenden, kannst du den folgenden VBA-Code verwenden. Stelle sicher, dass du den IBM Notes Client installiert hast (Version 4.5.x oder besser):

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu: Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Public Function E_Mail_senden( _
Empfaenger As Variant, _
Kopie As Variant, _
Blindkopie As Variant, _
Betreff As String, _
Nachricht As String, _
Anhang As String, _
Optional Speichern As Boolean = True, _
Optional Sofort_senden As Boolean = False, _
Optional Dateiname As String _
) As Boolean
    Dim LotusNotes As Object
    Dim Maildatenbank As Object
    Dim MailServer As String
    Dim MailFile As String
    Dim EMail As Object
    Dim Anhangobjekt As Object
    Dim Session As Object
    Dim Eingebettetes_Objekt As Object
    Dim Anhaenge() As String
    Dim Index As Long
    Dim Dateipfad As String
    Dim Notesfeld As Object
    Dim Aktuelle_Email As Object

    Set Session = CreateObject("Notes.NotesSession")
    MailServer = Session.GetEnvironmentString("MailServer", True)
    MailFile = Session.GetEnvironmentString("MailFile", True)

    Set Maildatenbank = Session.GETDATABASE(MailServer, MailFile)
    If Not Maildatenbank.IsOpen Then Maildatenbank.OPENMAIL

    Set EMail = Maildatenbank.CREATEDOCUMENT
    Set Notesfeld = EMail.APPENDITEMVALUE("Subject", Betreff)
    Set Notesfeld = EMail.APPENDITEMVALUE("SendTo", Empfaenger)
    Set Notesfeld = EMail.APPENDITEMVALUE("BlindCopyTo", Blindkopie)
    Set Notesfeld = EMail.APPENDITEMVALUE("CopyTo", Kopie)

    Set LotusNotes = CreateObject("Notes.NotesUIWorkspace")
    LotusNotes.EDITDOCUMENT True, EMail

    Set Aktuelle_Email = LotusNotes.CurrentDocument
    Aktuelle_Email.GotoField "Body"
    Aktuelle_Email.InsertText Nachricht

    Anhaenge = VBA.Split(Anhang, ";")
    For Index = LBound(Anhaenge) To UBound(Anhaenge)
        Dateipfad = Anhaenge(Index)
        If Dateipfad <> "" And VBA.Dir(Dateipfad) <> "" Then
            Set Anhangobjekt = EMail.CREATERICHTEXTITEM("Attachment" & Index)
            Set Eingebettetes_Objekt = Anhangobjekt.EMBEDOBJECT(1454, "", Dateipfad, "Attachment" & Index)
        End If
    Next

    EMail.SAVEMESSAGEONSEND = Speichern
    If Speichern = True Then EMail.Save True, True, True
    If Sofort_senden = True Then
        Aktuelle_Email.Send False, Empfaenger
        Aktuelle_Email.Close
    End If

    E_Mail_senden = True
End Function
  1. Rufe die Funktion in deinem Excel-Blatt auf, um eine E-Mail zu senden.

Häufige Fehler und Lösungen

Problem 1: E-Mail wird immer im Ordner "Gesendet" gespeichert, auch wenn Speichern = False.

Lösung: Überprüfe die Benutzervorgaben in IBM Notes. Es könnte eine Einstellung aktiv sein, die das Speichern von Kopien erfordert. Du kannst dies möglicherweise nicht ändern, wenn der Administrator die Berechtigung dafür gesperrt hat.

Problem 2: Bei Verwendung einer bestimmten Maildatei fragt IBM Notes nach, ob die Änderungen gespeichert werden sollen.

Lösung: Stelle sicher, dass du in der richtigen Maildatei arbeitest. Überprüfe die Umgebungsvariablen für MailServer und MailFile, um sicherzustellen, dass sie korrekt gesetzt sind.


Alternative Methoden

Eine alternative Methode, um E-Mails zu versenden, ist die Verwendung von Microsoft Outlook oder SMTP, falls du nicht auf IBM Notes angewiesen bist. Diese Methoden können in Excel VBA integriert werden, um ähnliche Funktionalitäten zu bieten.


Praktische Beispiele

Hier sind einige Beispiele, wie du die Funktion E_Mail_senden nutzen kannst:

Sub Beispiel_E_Mail()
    Dim Erfolg As Boolean
    Erfolg = E_Mail_senden("test@firma.de", "", "", "Betreff der E-Mail", "Nachrichtentext hier", "")
    If Erfolg Then
        MsgBox "E-Mail erfolgreich gesendet!"
    Else
        MsgBox "Fehler beim Senden der E-Mail."
    End If
End Sub

Du kannst die Funktion entsprechend anpassen, um Anhänge hinzuzufügen, indem du den Parameter Anhang mit einem gültigen Dateipfad füllst.


Tipps für Profis

  • Debugging: Nutze die Debugging-Tools in VBA, um Probleme mit der E-Mail-Funktion zu identifizieren.
  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen in deinen Code ein, um unerwartete Situationen zu handhaben.
  • Optimierung: Überlege, die Funktion in eine Klasse zu kapseln, um den Code modularer und wiederverwendbarer zu gestalten.

FAQ: Häufige Fragen

1. Wie kann ich die Signatur in Lotus Notes ändern?
Du kannst die Signatur in den Einstellungen von IBM Notes unter "Mail" > "Signatur" ändern.

2. Funktioniert dieser Code auch mit IBM Lotus Webmail?
Der bereitgestellte Code ist spezifisch für die Verwendung mit dem IBM Notes Client und wird nicht in IBM Lotus Webmail funktionieren.

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