Messageclass
Das Gespann aus Exchange und Outlook hat eine Besonderheit, die klassische Internet Mail Systeme so nicht haben. Outlook kennt nicht nur "Mails", sondern auch Aufgaben, Termine, Journaleinträge o.ä. Und stellt dafür auch ein entsprechendes Feld im Objekt Modell bereit.
Nachrichtenklasse anzeigen
Die Nachrichtenklasse können Sie sich in Outlook übrigens ganz einfach anzeigen lassen. Klicken Sie dazu mit der rechten Maustaste auf die Überschriftenzeile und wählen Sie im Kontextmenü "Feldauswahl" an. In der dann sichtbaren Liste finden Sie die Nachrichtenklasse, wenn Sie im oberen Teil "Alle E-Mail-Felder" auswählen. Ziehen Sie dann einfach das Feld Nachrichtenklasse in die Überschriftenzeile
Natürlich können Sie dann nach diesem Feld auch gruppieren etc. Diese Funktion ist z.B.: sehr hilfreich, wenn eine Mail mit einem besonderen Format erhalten und Outlook dennoch nur das Standardformular zur Anzeige verwendet. Denn die Nachrichtenklasse ist auch der Schlüssel zu eigenen Formularen.
Bekannte Klassen
Die ist nur eine Auswahl von Nachrichten, die ich so bei einem Blick durch meine Mailbox gefunden haben. Das sind sicher nicht alle Klassen, die Outlook so verwendet. Die
Klasse | Icons | Quelle | Verwendung |
---|---|---|---|
IPM.Post |
|
Outlook Standard |
Outlook "Notizen" |
IPM.Note |
|
Outlook Standard |
Normale Outlook Mails |
IPM.Note.SMIME.MultipartSigned |
|
Outlook Standard |
digital signierte Mails. Meist aus dem Internet per MIME Empfangen |
REPORT.IPM.Note.DR |
|
Outlook Standard |
"Zugestellt"-Quittung für normale Nachrichten |
REPORT.IPM.Note.IPNRN |
|
Outlook Standard |
"Gelesen" Quittung für interne und externe Nachrichten |
IPM.Note.SMIME |
|
Outlook Standard |
Per SMIME codierte Mitteilung. Üblich bei Übertagungen per SMTP, auch intern. |
IPM.Schedule.Meeting.Request |
|
Outlook Standard |
Einladung zu einem Termin |
IPM.Note.Fax |
|
Outlook Standard |
Häufig verwendete Klasse für eingehende Faxnachrichten. |
IPM.Note.Fax.Report |
|
Outlook Standard |
Quittung für ein ausgegangenes Fax |
IPM.Sticky.Note |
|
Outlook Standard |
Outlook Standard für Notizen |
IPM.Contact |
|
Outlook Standard |
Formular für Kontakte und abhängige Kontakte |
IPM.DistList |
|
Outlook Standard |
Private Verteiler im Kontaktordner |
IPM.Activity |
|
Outlook Standard |
z.B. eingehende Telefonanrufe, die über einen Voice Server oder TAPI und Journalfunktion eingetragen werden. Man sieht hier jede Menge Icons, die für die verschiedenen unterarten vergeben werden. |
IPM.Schedule.Meeting.Resp.Neg |
|
Outlook Standard |
Absage auf eine Terminanfrage |
IPM.Schedule.Meeting.Resp.Pos |
|
Outlook Standard |
Terminzusage |
IPM.Schedule.Meeting.Resp.Tent |
|
Outlook Standard |
Terminzusage mit Vorbehalt |
IPM.Schedule.Meeting.Cancelled |
|
Outlook Standard |
|
IPM.Schedule.Meeting.Request |
|
Outlook Standard |
|
IPM.TastRequest.Update |
|
Outlook Standard |
|
IPM.Notes.Oof.Template.Microsoft |
|
Outlook Standard |
Format für eine Abwesenheitsnotiz, die ich intern erhalten habe. |
IPM.Post.RSS |
|
Outlook 2007 Standard |
Format für per RSS-Feed herunter geladene Inhalte |
IPM.Note.Microsoft.Conversation |
|
OCS |
Office Communications Server |
IPM.Appointment.Live Meeting Request |
|
Livemeeting |
Livemeeting |
Microsoft nutzt selbst auch noch weitere Nachrichtenkassen, die von Outlook gar nicht angezeigt werden. Teils sind sie aber auch "versteckte" Nachrichten oder im "Associated Content" hintelegt, z.B.
Klasse | Ordner | Verwendung |
---|---|---|
IPM.MessageManager |
/Top/Posteingang (Associated) |
|
IPM.Sharing.Index.In |
/Top/Posteingang (Associated) |
|
IPM.Microsoft.Migrationstatus |
/Top/Posteingang (Associated) |
Eventuell speichern Migrationsprozesse hier Verwaltungsinformationen ? |
IPM.RuleOrganizer |
/Top/Posteingang (Associated) |
|
IPM.RuleMessage |
/Top/Posteingang (Associated) |
Vermutlich die Vorlage zur selbst erstellten automatischen Antwort |
IPM.Configuration.RssRule |
/Top//Posteingang (Associated) |
möglicherweise die zentrale Konfiguration der abzurufenden RSS-Feeds |
IPM.Rule.Message |
/Top/Posteingang (Associated) |
|
IPM.ExtendedRule.Message |
/Top/Posteingang (Associated) |
|
IPM.Configuration.WorkHours |
/Top/Kalender (Associated) |
|
IPM.Configuration.HomeTimeZone |
/Top/Kalender (Associated) |
|
IPM.Configuration.Calendar |
/Top/Kalender (Associated) |
|
IPM.Configuration.AvailabilityOptions |
/Top/Kalender (Associated) |
|
IPM.Microsoft.WunderBar.SFInfo |
/Common Views |
|
IPM.Microsoft.WunderBar.Persistence |
/Common Views |
|
IPM.Microsoft.SniffData |
/FreeBusy Data (content) |
Siehe auch Outlook Sniffer |
IPM.Microsoft.ScheduleData.FreeBusy |
/FreeBusy Data (content) |
|
IPM.Microsoft.RssLock |
/FreeBusy Data (content) |
Anscheinend steuern so Outlooks, welcher Client die RSS-Feeds abfragt. Im Property 0x6002001E steht der PC-Name |
IPM.Microsoft.FolderDesign.FormDescription |
|
|
IPM.Microsoft.FolderDesign.NamedView |
|
|
Daneben steht es natürlich auch anderen Herstellern frei, eigene Nachrichtenklassen zu definieren und mit eigenen Formularen zu verwenden. Hier eine kleine Auswahl.
MRS.Fax |
|
MRS |
Eigene Klassen des MRS-Systems (Fax, SMS, Voice). |
IPM.Note.PamMessage |
Exchange@PAM |
Eigene Klasse für Archivierte Elemente von Exchange@PAM |
Die Bedeutung von PR_ICON_INDEX
Auf den ersten Blick scheint es so zu sein, dass das Formular auch zugleich das Icon in Outlook bestimmt. Wenn Sie aber mal genauer hinschauen, dann ist das nur die halbe Wahrheit. Einige Formularklassen haben mehrere Icons und wenn Sie z.B. auf eine Mail antworten, dann wird aus dem Brief-Icon () z.B. ein Brief mit rotem Pfeil nach Links oder bei einer Weiterleitung ein blauer Pfeil nach rechts. Sobald eine Mail gelesen wird, wird nicht nur der Status auf "unread=false" gesetzt, sondern auch wieder das Icon geändert ().
Ich habe mich dann auf die Suche gemacht, weil ich im Rahmen eines Skripts zum analysieren von Mails auch erkennen musste, ob diese schon beantwortet oder weiter geleitet wurden. Leider kann man am Icon nur den letzten Vorgang erkennen.
Mit MFCMAPI bin ich dann auf die Pirsch gegangen und haben tatsächlich ein Feld gefunden, welches das Icon repräsentiert.
PropertyName: PR_ICON_INDEX PropertyTag: : 0x10800003 PropertyTyp PTLong DASL: http://schemas.microsoft.com/mapi/proptag/0x10800003
Mit MFCMAPI kann man das Feld sogar wunderbar ändern und damit alle Icons durch probieren. Ich habe nur bislang keine vollständige Auflistung gesehen und daher möge diese Liste ein Anfang sein, zumal das Feld als "Long" sehr viele Werte annehmen kann
Wert | Icon |
---|---|
Nicht belegt |
Standard Mail |
-1 |
Icon des Formulars (PR_MESSAGE_CLASS ) wird angewendet. |
0 |
geschlossene Mail |
1 |
Notiz |
2 |
Konflikt |
261 |
Mail wurde beantwortet |
262 |
Mail wurde weiter geleitet |
276 |
signierte Mail wurde beantwortet |
277 |
verschlüsselte Mail wurde weiter geleitet |
278 |
signierte Mail wurde weiter geleitet |
306 |
Mail mit Verbotsschild |
514 |
Gruppensymbol (kennen ich so nur von CRM) |
1021 |
Termineinladung |
1024 |
Termin |
1026 |
Termin: Livemeeting Request |
Aus anderen Quellen habe ich erfahren, dass Outlook zuerst dieses Feld liest und wenn es vorhanden und nicht -1 ist, dann das in Outlook fest hinterlegte Icon verwendet.
Achtung:
Das Icon hat nichts mit dem "gelesen Status" zu tun. Sie können per
Skript auch eine gelesene Mail mit dem Icon 0 (geschlossene Mail)
versehen etc. Outlook setzt das Feld PR_ICON_INDEX nach eigenen Regeln,
die ich nicht kenne. Daher beschränke ich mich auf das Auslesen.
Messageclass beim Senden setzen
Folgendes VBScript ist ein kleines Beispiel, wie sie eine Nachricht mit ihrer ganz persönlichen Nachrichtenklasse versenden. Das Script sendet eine Mail der gewünschten Nachrichtenklasse an den angegebenen Empfänger. Sie müssen dazu ein paar Werte eintragen:
- Mailserver und Mailboxname des Senders
- SMTP-Adresse des Empfängers
- Gewünschte Nachrichtenklasse
Die Nachricht wird per Einschreiben mit Rückschein versendet, d.h. Sie erhalten nach dem Versand auch eine Quittung bei der Zustellung und beim Lesen der Mail.
'~ option explicit '~ On Error Resume Next Dim objSession, objMessage, objFields, objOneRecip, objField const ExServer = "SERVERNAME" const logonUser = "ALIAS DES SENDERS" const CreatorDN = "SMTPADRESSE DES EMPFAENGERS" const MessageClass = "MSXFAQ.Test" const CdoPR_MESSAGE_CLASS = &H001A001E ' MAPI Sitzung initialisieren und dynamisch ein Profil anlegen Set objSession = CreateObject("MAPI.Session") objSession.Logon ,,False,True,0,True,ExServer & vbLf & LogonUser ' MAPI Nachricht mittels Outlook Object erstellen und Eigenschaften setzen Set objMessage = objSession.Outbox.Messages.Add objMessage.Subject = "Dies ist der Betreff" objMessage.Text = "Dies ist die eigentliche Mitteilung" objMessage.ReadReceipt = true objMessage.DeliveryReceipt = true Set objFields = objMessage.Fields objFields.SetNamespace "" Set objField = objFields.Add (CdoPR_MESSAGE_CLASS, MessageClass) Set objField = objFields.Add ("MS_EXCHANGE_01", vbBoolean , True ) Set objOneRecip = objMessage.Recipients.Add objOneRecip.Type = 1 'CdoTo objOneRecip.Name = CreatorDN objOneRecip.Resolve ' Nachricht ohne weiteren Dialog versenden objMessage.Send showDialog = False 'MAPI Sitzung wieder sauber schließen objSession.Logoff
Mit diesem kleinen Script können Sie Nachrichten beliebiger Nachrichtenklassen versenden. Dies kann z.B. erforderlich sein, um die Funktion eines Formulars oder einen Connectors zu prüfen.
Achtung: Das Script legt dynamisch ein MAPI-Profil an. Das bedeutet aber auch, dass Outlook nicht gestartet sein darf bzw. die Verbindung nicht RPCover HTTP sein kann, da dies beim automatischen Profil nicht genutzt wird. Sie können aber die Zeile mit dem "objSession.Logon" ändern und ein bestehendes Profil angeben, z.B.
objSession.Logon "Profilename",Kennwort,False,False,0,True
Details zur Bedeutung der Parameter finden Sie z.B.: auf http://msdn.Microsoft.com/library/en-us/cdo/html/2e5e5030-9478-46e8-8271-27266ac44ec6.asp?frame=true.
Wenn Sie aber damit die Mail versenden, dann wird ihr bestehendes Outlook verwendet und wird sich mit folgenden Warnungen melden:
Wenn Sie so eine Mail mit einer für Outlook nicht bekannten Nachrichtenklasse senden, dann können die Empfänger eventuell folgende Meldung beim öffnen erhalten.
Sie sehen damit, dass die Nachrichtenklasse tatsächlich geändert wurde. Nun liegt es an ihnen ein Outlook Formular für diesen eigenen Nachrichtentyp anzulegen.
Nachrichtenklassen und das Internet
Im Internet wurden früher einfache Textnachrichten verwendet, die von Empfänger und Sender problemlos zu lesen und zu verarbeiten waren. Mehrwertfunktionen werden oft über Anlagen (z.B. VCS für Visitenkarten) realisiert. Auch über die MIME-Deklaration können auch über das Internet unterschiedliche Nachrichtenklassen genutzt werden. Allerdings gibt es hier nur wenig Standards, so dass es nicht immer sichergestellt ist, dass die Empfängerseite mit der Mail auch etwas anfangen kann.
Wenn Sie eine Internet Mail sich mal genauer anschauen, dann finden Sie bei der Betrachtung der Rohdaten oft Zeilen wie folgende:
Content-class: urn:content-classes:message
--9B095B5ADSN=_01C663B8AF3C0E5E00000300server01.de
Content-Type: text/plain; charset=unicode-1-1-utf-7
--9B095B5ADSN=_01C663B8AF3C0E5E00000300server01.de
Content-Type: message/delivery-status
--9B095B5ADSN=_01C663B8AF3C0E5E00000300server01.de
Content-Type: message/rfc822
Content-Type: multipart/report;
report-type=delivery-status;
boundary="9B095B5ADSN=_01C65ED7614039A7000019D4gate.netatwork.d"
Subject: Benachrichtigung =?unicode-1-1-utf-7?Q?+APw-ber Zustellstatus
(Erfolg)?=
--9B095B5ADSN=_01C65ED7614039A7000019D4gate.netatwork.d
Content-Type: text/plain; charset=unicode-1-1-utf-7
--9B095B5ADSN=_01C65ED7614039A7000019D4gate.netatwork.d
Content-Type: message/delivery-status
--9B095B5ADSN=_01C65ED7614039A7000019D4gate.netatwork.d
Content-Type: text/rfc822-headers
--9B095B5ADSN=_01C65ED7614039A7000019D4gate.netatwork.d--
Sie sehen, dass auch eine SMTP-Mail bei der Nutzung von MIME diverse unterscheidungen erlaubt. Exchange und Outlook setzen die MIME-Informationen meist sogar korrekt um, d.h. aus einem multipart/report; report-type=delivery-status; wird dann ein REPORT.IPM.POST
Weitere Links
- Outlook Formulare
- VBScript
- WSH - Mail per CDO Senden
- DocMessageClass
-
Outlook 2000 Existing Items Converter
http://office.microsoft.com/en-us/ork2000/HA011384301033.aspx -
Auflistung sehr vieler Icons
http://www.howto-outlook.com/howto/icons.htm
http://www.planet-outlook.de/symbole.htm