-
14.03.07 11:34 #1bullayer Tutorials.de Gastzugang
Hallo,
ich suche eine Möglichkeit, via VB 6.0 und Lotus Notes eine Mail mit Anhang zu versenden. Hat jemand Beispielcodes, wie man sowas bewerkstelligen kann?
-
Hi!
Hier ist mein Code den ich verwende (Client muss geöffnet sein):
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
Public Sub SendNotesMail() Dim Subject As String, attachment As String, bodytext As String, saveit As Boolean Dim ToAdressen(10) as String 'Achtung! Der Notes Client muss auf dem System installiert sein! Dim Maildb As Object 'Die Datenbank Dim UserName As String 'Der Benutzername Dim MailDbName As String 'Der Datenbankname Dim MailDoc As Object 'Das Maildokument selbst Dim AttachME As Object 'Der Anhang (Richtext) Dim Session As Object 'Die Notes Session Dim EmbedObj As Object 'Ein eingebettetes Objekt (Anhang) Dim Recip(2) As Variant Dim LinkME As Object Dim testlink As String Subject = xpText4.Text bodytext = xpText5.Text attachment = AppPfad & "\Links.xls" 'Die Session starten Set Session = CreateObject("Notes.NotesSession") On Error GoTo Fehler: 'Den Benutzernamen auslesen und den Dateinamen 'der MailDB errechnen 'Dies wird nicht überall benötigt. Auf manchen 'Systemen kann auch ein leerer String übergeben werden UserName = Session.UserName MailDbName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) - InStr(1, UserName, " "))) & ".nsf" 'Datenbank öffnen Set Maildb = Session.GetDatabase("", MailDbName) If Maildb.IsOpen = True Then Else Maildb.OPENMAIL End If 'Ein neues Maildokument erstellen Set MailDoc = Maildb.CreateDocument MailDoc.Form = "Memo" MailDoc.sendto = Recip MailDoc.Subject = Subject MailDoc.body = bodytext MailDoc.SaveMessageOnSend = True 'Eingebettete Objekte und Anhänge hinzufügen If attachment <> "" Then Set AttachME = MailDoc.CreateRichTextItem("Attachment") Set EmbedObj = AttachME.EmbedObject(1454, "", attachment, "Attachment") 'MailDoc.CREATERICHTEXTITEM ("Attachment") End If 'Senden MailDoc.PostedDate = Now() If ToAdressen(1) = "" Then MsgBox "Please enter recipients!" GoTo Fehler2 Else MailDoc.Send 0, ToAdressen MsgBox "Message transmitted" GoTo Fehler2 End If 'Aufräumen Set Maildb = Nothing Set MailDoc = Nothing Set AttachME = Nothing Set Session = Nothing Set EmbedObj = Nothing Fehler: MsgBox "Please open your Lotus Notes client!" Exit Sub Fehler2: Exit Sub End Sub
Oder unter den folgende Link schauen:
http://www.activevb.de/tipps/vb6tipps/tipp0544.html
Viele Grüße,
JackaBiologie ist das was lebt, Chemie das was kracht und Physik das, wo nichts funktioniert!
- - - - - - - - - - - - - - - -
Open Source JS-Framework für Business Web-Applications: ExtJS
-
15.03.07 06:22 #3bullayer Tutorials.de Gastzugang
Danke @Jacka, funktioniert.
Kennst Du auch ne Möglichkeit, ne Mail zu versenden, ohne dass ein Mailclient installiert ist, z. Bsp. via WEB.DEGeändert von bullayer (15.03.07 um 06:25 Uhr)
-
es gibt die möglichkeit mails mittels ie (hierzu kann man die adressenleiste irgendwie misbrauchen) zu versenden oder auch mit der vbsendmail von activevb.
Bei der Möglichkeit über den ie ist es wohl nicht möglich anhänge mit zu senden. Deswegen ist die VBsendmail eleganter
-
Hi!
Schau doch nochmal hier rein:
http://www.activevb.de/rubriken/faq/faq0087.html
Viele Grüße,
JackaBiologie ist das was lebt, Chemie das was kracht und Physik das, wo nichts funktioniert!
- - - - - - - - - - - - - - - -
Open Source JS-Framework für Business Web-Applications: ExtJS
-
16.03.07 07:15 #6bullayer Tutorials.de Gastzugang
Danke an alle, funktioniert alles prächtig
-
11.04.07 16:13 #7
- Registriert seit
- Apr 2007
- Beiträge
- 3
Frage an Jacka:
Hallo und guten Tag,
bin unter den Laien einer der Größten. Ich kupfere immer nur ab, was andere irgendwie veröffentlicht haben, wenn ich es gebrauchen kann. Habe aber kaum Ahnung mit diesen ganzen Programmierbefehlen: Kurz um: Habe diesen Link aus einem Excel-Forum bekommen: Wir haben auf der Maloche Excel2003 und LotusNotes 6.5.5
Habe naiv das Programm von Jacka in VBA Excel-Datei eingesetzt. Leider läuft es gar nicht. Muss ich irgendwo für Platzhalter, die im Programm vielleicht stehen, etwas anderes einsetzen'?
Wenn ich das Makro starten will dann kommt gleich der Fehler:
Fehler beim Kompilieren: Variable nicht definiert. Angezeigt wird dann z.B. text1 hinter dem Untermakro SendNotesMail.
Ich hatte ja gehofft, dass den Code einfach bei mir einspiele und ich dann sofort in der Lage wäre, die entsprechende Excel-Seite als E-Mail versenden zu können.
Kann da einem Unbedarften wie mir noch geholfen werden. Oder ist das für mich nicht darstellbar?
Einen schönen Tag noch
wünscht der
Rhinowsurfer
-
13.04.07 15:36 #8
- Registriert seit
- Apr 2007
- Beiträge
- 3
Noch ein notwendiger Zusatz zu obiger Anfrage von mir
Wir nutzen VBA 6.4.9972
Gruß vom Rhinowsurfer
-
Hi!
Hab die Frage erst jetzt gesehen
Also:
Du benötigst für die Ausführung des Codes noch etwas:
In Excel:
Code :1 2 3 4 5 6 7 8
..... Subject = Textbox1.Text ' ist der Inhalt aus einer Textbox und ergibt den Betreff bodytext = Textbox2.Text ' ist der Inhalt aus einer weiteren Textbox und ergibt den email-Text attachment = "C:\Liste.xls" ' Die Excelliste die mit verschickt werden soll ..... MailDoc.Send 0, ToAdressen ' ToAdressen ist ein Array und enthält eben die Empfänger-Adressen
Du kannst auch einfach Subject = "Dies ist der Betreff" schreiben
Und:
ToAdressen(0) = "abc@emailadresse.com"
ToAdressen(1) = "xyz@emailadresse.com"
Du hast sicher AppPfad nicht definiert. Ist bei mir eine public variable und
definiert den Pfad, wo sich dann die EXE befinden.
Das könnte deine Fehlermeldung erklären.
Hoffe das hilft!
Sonst schreib nochmal!
Viele Grüße,
JackaBiologie ist das was lebt, Chemie das was kracht und Physik das, wo nichts funktioniert!
- - - - - - - - - - - - - - - -
Open Source JS-Framework für Business Web-Applications: ExtJS
-
26.04.07 14:36 #10
- Registriert seit
- Apr 2007
- Beiträge
- 3
Hallo Jacka,
habe Probleme!
Habe Code, wie unten, eingegeben. Code läuft über Fehlerroutine aus.
Das System erkennt Lotus nicht.
Laienfrage von mir:
Muss ich beim Start der Session
Set session=createObject("Notes.NotesSession")
in der Klammer 'was anderes eingeben?
Beim schrittweisen Ablauf wird schon nichts in SESSION hineingeschrieben!
Der UserName ist aber richtig gefüllt.
----------
ICh hatte mich ja als Laie und Abkupferer geoutet, also nicht böse sein, wenn die Frage auf unterem Niveau ist. ICh würde mich aber trotzdem freuen, wenn ich das mit Hilfe anderer hinbekommen würde. Denn nichts ist schöner, als hilfreiche Technik am Arbeitsplatz. Schönen Maifeiertag wünscht der Rhinowsurfer!
Public Sub SendNotesMail()
Dim Subject As String, attachment As String, bodytext As String, saveit As Boolean
Dim ToAdressen(10) As String
'Achtung! Der Notes Client muss auf dem System installiert sein!
Dim Maildb As Object 'Die Datenbank
Dim UserName As String 'Der Benutzername
Dim MailDbName As String 'Der Datenbankname
Dim MailDoc As Object 'Das Maildokument selbst
Dim AttachME As Object 'Der Anhang (Richtext)
Dim Session As Object 'Die Notes Session
Dim EmbedObj As Object 'Ein eingebettetes Objekt (Anhang)
Dim Recip(2) As Variant
Dim LinkME As Object
Dim testlink As String
' Subject = xpText4.Text
' bodytext = xpText5.Text
' attachment = AppPfad & "\Links.xls"
Subject = "Dies ist der Betreff"
bodytext = "E-Mail-Text"
attachment = "U:\ABLAGE\BOC1\BOC15\4455\HV\WVS-Listen.xls"
'Die Session starten
Set Session = CreateObject("Notes.NotesSession")
On Error GoTo Fehler:
'Den Benutzernamen auslesen und den Dateinamen
'der MailDB errechnen
'Dies wird nicht überall benötigt. Auf manchen
'Systemen kann auch ein leerer String übergeben werden
UserName = Session.UserName
MailDbName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) - InStr(1, UserName, " "))) & ".nsf"
'Datenbank öffnen
Set Maildb = Session.GetDatabase("", MailDbName)
If Maildb.IsOpen = True Then
Else
Maildb.OPENMAIL
End If
'Ein neues Maildokument erstellen
Set MailDoc = Maildb.CreateDocument
MailDoc.Form = "Memo"
MailDoc.sendto = Recip
MailDoc.Subject = Subject
MailDoc.body = bodytext
MailDoc.SaveMessageOnSend = True
'Eingebettete Objekte und Anhänge hinzufügen
If attachment <> "" Then
Set AttachME = MailDoc.CreateRichTextItem("Attachment")
Set EmbedObj = AttachME.EmbedObject(1454, "", attachment, "Attachment")
'MailDoc.CREATERICHTEXTITEM ("Attachment")
End If
'Senden
MailDoc.PostedDate = Now()
If ToAdressen(1) = "" Then
MsgBox "Please enter recipients!"
GoTo Fehler2
Else
MailDoc.Send 0, ToAdressen
MsgBox "Message transmitted"
GoTo Fehler2
End If
'Aufräumen
Set Maildb = Nothing
Set MailDoc = Nothing
Set AttachME = Nothing
Set Session = Nothing
Set EmbedObj = Nothing
Fehler:
MsgBox "Please open your Lotus Notes client!"
Exit Sub
Fehler2:
Exit Sub
End Sub
-
04.07.08 10:44 #11
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Holladrio! Endlich mal ein gutes VB-Forum auf deutsch.
Bin nicht umhin gekommen, dieses Thema zu lesen, da ich im Moment genau das in der Firma coden muss!
Prinzipiell:
Gut: Der allgemeine Code von Jacka
Schlecht: In Mehrbenutzerumgebungen und zu starre Parametrisierung!!
Ich werde mal meine Variante hier reinsetzen. Ihr werdet ein paar deutliche Unterschiede bemerken. Hinweis: Habe den ganzen Code in ein Klasse gesetzt, mit nur "SendNotesMail" als öffentlicher Methode, deshalb auch der "Initialize"-Code
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
Private Declare Function GetPrivateProfileString Lib "kernel32" _ Alias "GetPrivateProfileStringA" ( _ ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long, _ ByVal lpFileName As String) As Long Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Const HKEY_CURRENT_USER = &H80000001 Private Const KEY_READ = &H20019 Private Const REG_SZ = 1 Private Pfad As String Private MailFile As String Private Function ReadReg() As String Dim RetVal As Long Dim hKey As Long Dim TmpSNum As String * 1280 ' Registryschlüssel öffnen RetVal = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Lotus\Notes\7.0", 0&, KEY_READ, hKey) If RetVal <> 0 Then RetVal = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Lotus\Notes\6.0", 0&, KEY_READ, hKey) If RetVal <> 0 Then MsgBox "Der Schlüssel konnte nicht geöffnet werden." Exit Function End If End If ' Wert auslesen RetVal = RegQueryValueEx(hKey, "NotesIniPath", 0, REG_SZ, _ ByVal TmpSNum, Len(TmpSNum)) If RetVal <> 0 Then MsgBox "Der Schlüsselwert konnte nicht gelesen oder gefunden werden." Exit Function End If ReadReg = Left$(TmpSNum, InStr(1, TmpSNum, vbNullChar) - 1) ' Schlüssel wieder schliessen RetVal = RegCloseKey(hKey) End Function Private Sub Class_Initialize() Dim TmpRetStr As String * 1280 Dim RetVal As Long Pfad = ReadReg RetVal = GetPrivateProfileString("Notes", "MailFile", "Fehler", TmpRetStr, Len(TmpRetStr), Pfad) If RetVal > 0 Then MailFile = Left$(TmpRetStr, RetVal) End Sub Public Sub SendNotesMail(Subject As String, Attachment As String, BodyText As String, SaveIt As Boolean, ParamArray Recipient() As Variant) 'Variablen Dimensionieren, die benötigt werden, um das Mail zu senden Dim Maildb As Object 'Die Datenbank Dim UserName As String 'Der Benutzername Dim MailDoc As Object 'Das Maildokument selbst Dim AttachME As Object 'Der Anhang (Richtext) Dim Session As Object 'Die Notes Session Dim EmbedObj As Object 'Ein eingebettetes Objekt (Anhang) Dim Adressen() as Variant Adressen=Recipient 'Die Session starten Set Session = CreateObject("Notes.NotesSession") 'Datenbank öffnen Set Maildb = Session.GETDATABASE("", MailFile) If Maildb.IsOpen = True Then 'Fertig zum mailen! Else Maildb.OPENMAIL End If 'Ein neues Maildokument erstellen Set MailDoc = Maildb.CREATEDOCUMENT MailDoc.Form = "Memo" MailDoc.sendto = Recipient(0) MailDoc.Subject = Subject MailDoc.body = BodyText MailDoc.SAVEMESSAGEONSEND = SaveIt 'Eingebettete Objekte und Anhänge hinzufügen If Attachment <> "" Then Set AttachME = MailDoc.CREATERICHTEXTITEM("Attachment") Set EmbedObj = AttachME.EMBEDOBJECT(1454, "", Attachment, "Attachment") 'MailDoc.CREATERICHTEXTITEM ("Attachment") End If 'Senden MailDoc.PostedDate = Now() MailDoc.SEND 0, Adressen 'Aufräumen Set Maildb = Nothing Set MailDoc = Nothing Set AttachME = Nothing Set Session = Nothing Set EmbedObj = Nothing End Sub
Warum so umständlich? Ganz einfach: Lotus speichert in der Registry den Pfad zur Benutzerdefinierten INI-Datei, in welcher der korrekte Pfad zur NSF steht, und das ist eigentlich das, was ich brauche, deshalb: Erst in Registry gucken, wo die INI sitzt (ReadReg-Sub), dann hole den Pfad zur NSF aus der INI raus (RetVal = GetPrivateProfileString-Zeile in "Initialize"). (Fragt mich jetzt nicht, warum Lotus den Pfad zur NSF nicht in der Registry unter HKEY_CURRENT_USER speichert, weil da gehört das eigentlich hin!!)
Die MailDBName-Berechnung mit
ist NICHT gut!Code :1
MailDbName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) - InStr(1, UserName, " "))) & ".nsf"
Was passiert, wenn ein Benutzer "Fritz Mueller" heisst, ein anderer "Frank Mueller"?
In beiden Fällen käme mit der Formel "fmueller.nsf" heraus, was aber nicht eindeutig in einer Mehrbenutzer-Umgebung ist. Deshalb die Registry/INI-Klimmzüge
ParamArray Recipient deshalb als Parameter-Array, weil ich immer min. 1 Empfänger brauche (-->Recipient(0)), Hierzu brauche ich aber vor Aufruf meiner Klassen-Methode SendNotesMail eine Plausibilitätsprüfung, dass Recipients mind. 1 Eintrag enthält. Wenn Recipients keinen Einträg enthält, wird die Klassen-Methode erst gar nicht aufgerufen. Wenn ich mehr habe, werden diese automatisch mitgegeben.
Fragt mich jetzt aber nicht, warum ich
machen muss. Der Code weigert sich "MailDoc.SEND 0, Recipient" direkt auszuführenCode :1
Adressen=Recipient
Desweiteren vermeide ich durch meine Variante dieses unsägliche "GoTo Fehler2"-Gedöns.
Kommentare hierzu?Geändert von Zvoni (04.07.08 um 11:08 Uhr)
-
05.07.08 22:38 #12
Wenn du noch mehr solchen Code hast, stell den doch als Tutorial rein (auch den hier).
Der Doc!A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
B: Die Scrollbar da rechts ist dir schon mal aufgefallen?
-
@Zvoni
ich wollte gerade deine Variante testen, aber wenn ich in Excel Alt+F8 drücke, wird mir ihr nichts als Auswahl angezeigt? Da müsste doch SendNotesMail erscheinen...
Hast Du einen Tipp?
LG mindsuk
P.S: Hintergrund ist auch, das ich das ganze als Makro einer Grafik zuordnen möchte!Geändert von mindsuk (12.01.12 um 16:56 Uhr)
-
12.01.12 18:36 #14
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Das Zauberwort heisst KLASSE
Hinweis: Habe den ganzen Code in ein Klasse gesetzt, mit nur "SendNotesMail" als öffentlicher Methode, deshalb auch der "Initialize"-Code
P.S.: Mittlerweile muss man den obigen Code sogar erweitern um
Code vb:1
RetVal = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Lotus\Notes\8.0", 0&, KEY_READ, hKey)
... da wir ja mittlerweile bei Lotus 8.5 sind.....Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
-
12.01.12 18:46 #15
- Registriert seit
- Jul 2008
- Ort
- Hinter dem Mond gleich links
- Beiträge
- 735
Nachtrag: Die ReadReg-Funktion würde ich mittlerweile ein wenig anderst coden, und zwar mit dem Aufruf
Code vb:1
RetVal = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Lotus\Notes", 0&, KEY_READ, hKey)
und sich dann weiter durch die Registry hangeln. Hab jetzt aber keinen Bock drauf *gg*Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein
Code vb:1
If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")
Ähnliche Themen
-
Anwendungsentwickler/in (Lotus Notes, Lotus Domino, Java) gesucht
Von kwiegand im Forum Stellenangebote (entgeltlich)Antworten: 0Letzter Beitrag: 13.12.10, 13:40 -
C# und Lotus Notes
Von gremgiz im Forum .NET CaféAntworten: 3Letzter Beitrag: 11.03.09, 11:54 -
Lotus Notes Mail versenden
Von Blackfox1982 im Forum C/C++Antworten: 0Letzter Beitrag: 13.03.06, 11:17 -
Lotus Notes
Von interface im Forum Microsoft WindowsAntworten: 1Letzter Beitrag: 24.03.05, 22:41 -
Emails mit Lotus Notes versenden.
Von LJerch im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 25.10.03, 22:32



1Danke

Zitieren

Login





