SAM | |
Legen Sie fest, mit welcher "Identität" Ihre Emails beim Empfänger erscheinen sollen. Mit SAM bestimmen Sie den Absender und Speicherort für Emails anhand von Regeln. |
Einige Eigenschaften des Outlook-Objektmodells sind aus Sicherheitsgründen gesperrt. Wenn Sie z.B. aus Excel heraus versuchen, eine Email über Outlook zu versenden, dann wird dem Anwender ein Hinweis angezeigt; der Anwender muss das Senden dann explizit erlauben. Seit Outlook 2003 gibt es die Möglichkeit, das zu umgehen. Dazu müssen Sie nur das vorhandene und bereits instanzierte Application-Objekt nutzen.
Da die meisten Beispiele aber sowohl für VBA als auch VB gültig sein sollen, wird häufig selbst für VBA-Projekte gezeigt, eine neue Instanz der eigenen Host-Anwendung zu starten. Das Vorgehen ist für alle VBA-Projekte überflüssig; im Falle von Outlook 2003 kann es sogar zum Deaktivieren der VBA-Unterstützung führen und führt auf jeden Fall dazu, dass ihrem eigenen Code nicht vertraut wird.
In Outlook 2003 brauchen Sie sich also keine weiteren Gedanken um das Sicherheitsmodell zu machen. Was ist aber, wenn Sie z.B. aus Excel heraus auf Outlook zugreifen wollen? Auch dann wollen Sie ja, dass Ihrem Code vertraut wird. Neben der Verwendung von Produkten von Drittherstellern gibt es eine weitere Möglichkeit. Diese ist aber inoffiziell, d.h. Microsoft könnte jederzeit und ohne Ankündigung beschlieÃen, eine Ãnderung einzuführen. Die einfache Lösung: Machen Sie das Application-Objekt öffentlich.
Fügen Sie die folgende Funkton ins Modul DieseOutlookSitzung ein. Wichtig ist, dass die Funktion als Public und die Rückgabe als Object deklariert wird.
Wichtiger Hinweis: Ich empfehle dringend, dass Sie sich selbst irgendeinen originellen Namen für die öffentliche Eigenschaft in Outlook ausdenken. Andernfalls bräuchte ein Angreifer nur zu testen, ob es bei Ihnen den hier vorgestellten Namen gibt und umgeht damit ebenfalls das Sicherheitsmodell!
Public Property Get EinGeheimerName() As Object Set EinGeheimerName = Application End Property
Das folgende Beispiel zeigt das Problem: Beim üblichen Aufruf des Outlook-Objektmodells aus Excel heraus tritt eine Sicherheitsmeldung auf, wenn versucht wird, die Email-Adresse des Empfängers einer Email im Posteingang zu lesen. (Es wird davon ausgegangen, dass Outlook bereits läuft.)
Private Sub Test() Dim Outlook As Outlook.Application Dim Mail as Outlook.MailItem Dim Folder As Outlook.MAPIFolder Set Outlook = GetObject(, "Outlook.Application") Set Folder = Outlook.Session.GetDefaultFolder(olFolderInbox) Set Mail = Folder.Items(1) Debug.Print Mail.Recipients(1).Address End Sub
OLKeeper | |
Der OLKeeper verhindert zuverlässig, dass Sie Microsoft Outlook unbeabsichtigt schlieÃen und so etwa wichtige Emails verpassen würden. |
Statt die Email über das Outlook.Application-Objekt zu referenzieren, das von der GetObject-Function für jedermann zugänglich ist, wird die Email über das Objekt referenziert, dass Sie zuvor im Outlook-Modul DieseOutlookSitzung selbst öffentlich gemacht haben.
Private Sub Test() Dim LockedOutlook As Outlook.Application Dim Outlook As Object Dim Mail as Outlook.MailItem Dim Folder As Outlook.MAPIFolder 'GetObject liefert den Verweis, der dem Sicherheitsmodell unterliegt Set LockedOutlook = GetObject(, "Outlook.Application") 'Ãber den öffentlichen Verweis, den GetObject geliefert hat, können wir auf unsere 'geheime Eigenschaft zugreifen. Diesem Verweis vertraut Outlook. Weil Outlook die Eigenschaft 'nicht kennt, muss die Variable als Object, nicht als Outlook.Application, deklariert sein. Set Outlook = LockedOutlook.EinGeheimerName Set Folder = Outlook.Session.GetDefaultFolder(olFolderInbox) Set Mail = Folder.Items(1) Debug.Print Mail.Recipients(1).Address End Sub
SAM | |
Legen Sie fest, mit welcher "Identität" Ihre Emails beim Empfänger erscheinen sollen. Mit SAM bestimmen Sie den Absender und Speicherort für Emails anhand von Regeln. |