Vor etwas mehr als zwei Jahre (wie die Zeit vergeht :-() habe ich hier einen Artikel namens "VB .NET - Mit Lotus Notes E-Mails und Dateianhängen arbeiten" veröffentlicht, der beschreibt, wie man mit Lotus Notes E-Mails aus der Inbox arbeiten kann.
Heute musste ich nun etwas ähnliches bewerkstellen, und zwar E-Mails über unseren Domino Server versenden. Im Prinzip benötigt man dazu keine COM-Verweis auf das Domino Mail Objekt, da man (sofern SMTP auf dem Domino Server freigegegeben ist) das ganze auch schön mit .NET Bordmitteln, sprich Net.Mail.MailMessage usw. lösen kann.
Doch wir wollten auch Faxe über Lotus Notes versenden, und dazu benötigt der Domino Server eine Authentifizierung, was man theoretisch über die .NET Credentials lösen könnte. Leider bekam ich beim Faxversenden immer wieder den Fehler, dass die Benutzerrechte nicht korrekt sein.
Laut Rechereche im Internet hat das auch noch keiner hinbekommen, also blieb mir nichts anderes übrig, als wieder auf das Domino COM-Objekt zu verweisen und damit zu arbeiten.
Herausgekommen dabei sind einige Klassen, mit denen man relativ einfach E-Mails und Faxe über den Server verschicken kann.
Zuerst einmal die Helfer-Klassen:
Hier die Anhangs-Klasse für Dateianhänge:
Public Class LotusNotesMailAttachment Public FullFilename As String Public DisplayName As String Public Sub New() End Sub Public Sub New(ByVal aFullFilename As String) Me.FullFilename = aFullFilename End Sub Public Sub New(ByVal aFullFilename As String, ByVal aDisplayName As String) Me.FullFilename = aFullFilename Me.Displayname = aDisplayName End Sub End Class
Die Liste der Anhänge:
Public Class LotusNotesMailAttachmentList Inherits List(Of LotusNotesMailAttachment) End Class
Die Klase LotusNotesMailData enthält einfach nur Absender, Empfänger, Betreff usw.
Diese Daten werden später an die Factory zum Versenden weitergereicht.
Public Class LotusNotesMailData Public Subject As String Private _To As List(Of String) Public Property [To]() As List(Of String) Get If _To Is Nothing Then _To = New List(Of String) End If Return _To End Get Set(ByVal value As List(Of String)) _To = value End Set End Property Public From As String Private _CC As List(Of String) Public Property CC() As List(Of String) Get If _CC Is Nothing Then _CC = New List(Of String) End If Return _CC End Get Set(ByVal value As List(Of String)) _CC = value End Set End Property Public Body As String Private _Attachments As LotusNotesMailAttachmentList Public Property Attachments() As LotusNotesMailAttachmentList Get If _Attachments Is Nothing Then _Attachments = New LotusNotesMailAttachmentList End If Return _Attachments End Get Set(ByVal value As LotusNotesMailAttachmentList) _Attachments = value End Set End Property End Class
Die folgende Klasse "MailAccount" beinhaltet einfach die "Login-Daten" für den Domino-Server und Infos über das Postfach, das zum Senden verwendet werden soll.
Klasse Mailaccount:
Public Class MailAccount ''' <summary> ''' Hostname of the Domino Server ''' </summary> ''' <remarks></remarks> Public Host As String ''' <summary> ''' Filename with Path of the Notes Mail File ''' </summary> ''' <remarks>e.g. 'mail\user.nsf'</remarks> Public DatabaseFilename As String Public Password As String Public Sub New() End Sub Public Sub New(ByVal aHost As String, ByVal aDatabaseFilename As String, ByVal aPassword As String) Me.Host = aHost Me.DatabaseFilename = aDatabaseFilename Me.Password = aPassword End Sub End Class
Hier nun meine Notes Factory, die das eigentliche Versenden der E-Mails und Faxe bewerkstelligt. Faxe werden dabei wie E-Mails gehandhabt. Bei unserer Fax-Software für Domino (Ferrari-Fax (übrigens sehr zu empfehlen)) wird statt der E-Mail Adresse einfach die Faxnummer mit dem Zusatz "@Fax" angegeben. Die Faxsoftware wandelt daraufhin alle Anhänge in TIFF um und sendet diese als Fax an den/die Empfänger.
Man erhält zudem das versendete Fax in Form einer E-Mail im "Gesendet" Ordner von Lotus Notes.
Public Class LotusNotesMailFactory Public Shared Function SendMail(ByVal aMailAccount As MailAccount, ByVal aMaildata As LotusNotesMailData) As Boolean ' Die Session starten Dim Session As New Domino.NotesSession Session.Initialize(aMailAccount.Password) ' Datenbank öffnen Dim MailDB As Domino.NotesDatabase Dim MailServer As String = Session.GetEnvironmentString("MailServer", True) MailDB = Session.GetDatabase(MailServer, aMailAccount.DatabaseFilename) If Not MailDB.IsOpen Then MailDB.Open() End If Dim MailDoc As Domino.NotesDocument = MailDB.CreateDocument Dim Body As Domino.NotesRichTextItem = MailDoc.CreateRichTextItem("Body") MailDoc.ReplaceItemValue("Form", "Memo") For Each toadr As String In aMaildata.To MailDoc.ReplaceItemValue("SendTo", toadr) 'MailDoc.AppendItemValue("SendTo", aMaildata.To) Next MailDoc.ReplaceItemValue("Subject", aMaildata.Subject) 'MailDoc.AppendItemValue("Subject", aMaildata.Subject) ' CC (Carbon Copy) For Each ccadr As String In aMaildata.CC MailDoc.AppendItemValue("CopyTo", ccadr) Next ' Create and set the Body content Body.AppendText(String.Empty) Body.AppendText(aMaildata.Body) ' Attachment For Each lnma As LotusNotesMailAttachment In aMaildata.Attachments Body.AddNewLine(2) Body.EmbedObject(1454, String.Empty, lnma.FullFilename, lnma.DisplayName) Next ' Example to save the message (optional) MailDoc.SaveMessageOnSend = True ' Send the document ' Gets the mail to appear in the Sent items folder MailDoc.ReplaceItemValue("PostedDate", Now) MailDoc.Send(False) ' Clean Up MailDB = Nothing MailDoc = Nothing Body = Nothing Session = Nothing Return True End Function End Class
Wer Verbesserungen hat, oder gar weiß, wie man über die .NET Bordmittel das ganze bewerkstellingen kann, ist herzlich eingeladen, zu kommentieren.
Sollte ich dazukommen, werde ich das ganze noch etwas besser dokumentieren, aufräumen und verbessern.


