Hallo Martin,
die Designer-Hilfe habe ich mir schon besorgt. Mangels Admin-Rechten unter Notes und einer Entwicklungsumgebung kann ich vieles aber nicht umsetzen und bin auf Try and Error angewiesen.
Bei meiner Suche im I-Net bin ich dann aber auf ein VB-Beispiel zu meinem Thema gestossen und etwas angepaßt sieht das als Funktion dann so aus:
Function SendNotesMail(strMessage As String, _
strSubject As String, _
strSendTo As String, _
strAttachment As String, _
Optional bolSenden As Boolean = True)
On Error GoTo NotesMail_Err
Dim lnSession As Object
Dim lnDatabase As Object
Dim lnDocument As Object
Dim lnRTStyle As Object
Dim lnRTItem As Object
Dim lnATTACHMENT As Object
Dim sMessage As String
' Session starten
Set lnSession = CreateObject("Notes.Notessession")
' Create a new Style
Set lnRTStyle = lnSession.CreateRichTextStyle
' Verbindung zur Datenbank
Set lnDatabase = lnSession.GetDatabase("", "")
lnDatabase.OpenMail
' Neues Dokument
Set lnDocument = lnDatabase.CreateDocument
' Neues NotesRichTextItem erstellen, Body im RichText formatieren
Set lnRTItem = lnDocument.CreateRichTextItem("Body")
' Anhang
If strAttachment <> "" Then Set lnATTACHMENT = lnRTItem.EMBEDOBJECT(1454, "", strAttachment, "Sample")
' Nachricht
sMessage = "Mail gesendet: " & Date & " " & Time & vbCrLf & vbCrLf & strMessage & vbTab & "test" & vbCrLf & _
"Das ist ein Test" & vbTab & "test"
' Nachricht formatieren
lnRTStyle.NotesFont = 4 ' Courier
lnRTStyle.Bold = True ' Fett
lnRTStyle.NotesColor = 2 ' Rot
lnRTStyle.FontSize = 20 ' 20
Call lnRTItem.AppendStyle(lnRTStyle)
Call lnRTItem.AppendText(sMessage)
' Formatierungen / Texte
With lnDocument
.Form = "Memo"
.ReplaceItemValue "SendTo", strSendTo
.ReplaceItemValue "Subject", strSubject
' Senden / Gesendet anzeigen oder als Entwurf speichern
If bolSenden = True Then
.SAVEMESSAGEONSEND = True
.Send False
Else
Call .Save(True, False)
End If
End With
Set lnRTItem = Nothing
Set lnRTStyle = Nothing
Set lnDocument = Nothing
Set lnDatabase = Nothing
Set lnSession = Nothing
If bolSenden = True Then MsgBox "Mail wurde gesendet!", vbInformation Else MsgBox "Mail wurde gespeichert!", vbInformation
Exit Function
NotesMail_Err:
MsgBox Err.Description, vbExclamation, "Fehler! (" & Trim$(Str$(Err)) & ")"
End Function
Damit funktioniert das Einfügen von Text in den Body einer Mail, wobei Schriftart, -farbe, -größe etc. beeinflußt werden können.
Als nächstes interessiert mich aber (quasi als Alternative), wie ich html-Code in den Body der Mail schreiben kann und ihn nachher auch noch als html-Code angezeigt bekomme.
Gibt es hierzu spezielle Methoden?
Gruß Jan
Hallo Forum,
im Internet (www.planet-source-code.com) habe ich diesen Ansatz gefunden (bezogen auf obigen Code):
Call lnDocument.GOTOFIELD("Body")
Call lnDocument.IMPORT("HTML", "c:\temp.html")
Das funktioniert aber leider beides nicht, auch wenn ich .GOTOFIELD weglasse. Ich bekomme einen Laufzeitfehler 438, 'Object unterstützt Eigenschaft oder Methode nicht'.
'Zu Fuss' - über Datei / Importieren - kann ich aber durchaus diese html-Datei einfügen. Wie könnte das per VB-Code gehen?
Danke und Gruß, Jan
Hallo Ralf und Bernhard,
ja, eigentlich spricht alles gegen mich!
Trotzdem habe ich noch weiter gesucht/gegoogelt/gelesen und u.a. auch die 'notes32.tlb' und 'domobj.tlb' im VB-Objektkatalog angeschaut. Das half mir wenigstens ansatzweise zu verstehen, was in den Codebeispielen so passiert.
Herausgekommen ist erstmal das:
Dim lnWorkspace As Object
Dim lnDocument As Object
Set lnWorkspace = CreateObject("notes.NOTESUIWORKSPACE")
Set lnDocument = lnWorkspace.COMPOSEDOCUMENT("", "", "Memo", 1, 1)
Call lnDocument.GOTOFIELD("Send")
Call lnDocument.INSERTTEXT("User01@xyz.de")
Call lnDocument.GOTOFIELD("Copy")
Call lnDocument.INSERTTEXT("User02@xyz.de")
Call lnDocument.GOTOFIELD("Subject")
Call lnDocument.INSERTTEXT("Test Mail")
Call lnDocument.GOTOFIELD("Body")
Call lnDocument.Import("HTML", "c:\temp.html")
Call lnDocument.Send
Call lnDocument.Close
Damit wird eine neue Mail erzeugt, Empfänger- und Betreff-Feld gefüllt und eine html-Datei in den Body kopiert und die Mail versendet. Auch auf die Gefahr hin, dass allen Profis die Haare zu Berge stehen:
Die Zeile
Call lnDocument.GOTOFIELD("Copy")
funktioniert nicht, bringt aber auch keine Fehler. - Wie spreche ich das Feld 'Kopie' an (mit 'CC' oder 'CopyTo' funktioniert es auch nicht).
Wie lege ich fest, aus welcher geöffneten Mail-Datenbank das Mail gesendet werden soll, wenn ich mehrere geöffnet habe. Derzeit wird die gewählt, die ich gerade in der Ansicht habe.
Vielen Dank im Voraus, Gruß Jan
Hallo,
ich möchte diesen Beitrag nicht unbeendet lassen.
Deshalb hier meine neuesten Erkenntnisse:
In meinem Frontend heißt das Feld 'EnterCopyTo' (wozu gibt es Schleifen, mit denen man Objekte abfragen kann). ;)
Wegen des Arguments von Ralf, dass meine Routine nicht funktioniert, wenn ein modaler Dialog offen ist, und natürlich auch den Hinweisen der anderen Spezialisten habe ich mich wieder dem Backend gewidmet.
Mit folgendem Code bekomme ich eine HTML-Tabelle in meine Mail geschrieben und das Ganze als Entwurf gespeichert:
Dim lnSession As Object
Dim lnDatabase As Object
Dim lnBody As Object
Dim lnStream As Object
Dim lnDocument As Object
Set lnSession = CreateObject("Notes.Notessession")
Set lnDatabase = lnSession.CurrentDatabase
' Do not convert MIME to rich text
lnSession.ConvertMime = False
Set lnStream = lnSession.CreateStream
'Begin creating the lnDocument doc to send
Set lnDocument = lnDatabase.CreateDocument
lnDocument.Form = "memo"
Set lnBody = lnDocument.CreateMIMEEntity
'Basic profile of email
lnDocument.Subject = strSubject
lnDocument.SendTo = strSendTo
' Open the HTML (Title doesn't matter since it doesn't appear anywhere)
Call lnStream.WriteText("<html><head><title>HTML email via MIME</title>")
Call lnStream.WriteText("</head><lnBody>")
Call lnStream.WriteText("</lnBody></html>")
Call lnStream.WriteText("<TABLE border=1 cellpadding=1 cellspacing=0><TR><TD width=5% align='center'>Testtabelle, Spalte1</TD>" & _
"<TD width=35% align='center'>Testtabelle, Spalte2</TD></TR></TABLE>")
' Ensure the MIME content will be recognized as HTML
' (Must be after the lnStream is written)
Call lnBody.SetContentFromText(lnStream, "text/html;charset=iso-8859-1", ENC_NONE)
' Restore conversion
lnSession.ConvertMime = True
' Speichern
Call lnDocument.Save(True, False)
Die ursprüngliche - von mir angepaßte - Routine habe ich bei 'searchdomino.com' (über Google-Suche) gefunden.
Ich empfinde meine Versuche, mich auf diese Weise mit Notes anzufreunden, übrigens nicht als vergeudete Energie und verbringe nicht - auch wenn es so aussehen mag - den ganzen Tag damit. - Als normaler Notes-User komme ich wegen eingeschränkter Rechte nicht sehr weit.
Das wird sich aber in Kürze hoffentlich ändern, denn ich bekomme demnächst Zugang zum Designer.
Gruß Jan