2016-08-10 2 views
0

Ich arbeite an einem Outlook-VSTO in C# mit Ausrichtung auf Outlook 2010. Ich muss den MIME-Inhaltstyp einer Nachricht abrufen (denken Sie an text/plain oder die exotischeren Alternativen). Die einzige Stelle, die ich finden kann, ist in den Nachrichtenheadern, was eine lange Zeichenfolge ist, die ich lieber nicht manuell lesen und parsen möchte.Abrufen des Inhaltstyps eines Outlook-Mail-Elements

MSDN dokumentiert die PidNameContentType Eigenschaft (alternate link), aber ich kann es nicht zum Funktionieren bringen. So etwas scheitert immer (nicht gefunden).

String ct = mail.PropertyAccessor.GetProperty(
    "urn:schemas:mailheader:content-type"); // Not found 
String ct2 = mail.PropertyAccessor.GetProperty(
    "http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/content-type"); // Not found 

Weirdly, dies nicht auch für ein documented example, die ähnlich ist:

String ct2 = mail.PropertyAccessor.GetProperty(
    "http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/content-class"); // Not found 

Auf der anderen Seite, einige der "häufiger" Header, wie urn:schemas:mailheader:subject, gut funktionieren.

Bin ich gerade mit der PropertyAccessor falsch? Kopiert Outlook den Content-Type-Header nicht wirklich, und ich muss das einfach manuell tun? Gibt es eine andere Möglichkeit, den Inhalt dieses Headers zu erhalten?

Antwort

0

Content-Typ einer Nachricht wird, naja, Nachricht, oder?

Werfen Sie einen Blick auf die verfügbaren Eigenschaften mit OutlookSpy (klicken Sie auf IMessage) oder MFCMAPI, um die verfügbaren Eigenschaften zu sehen.

+0

Nein, Content-Type (wie in dem MIME-Header) wird so etwas wie 'text/plain' (oder, interessanterweise' multipart/signed; \ n \ tboundary = "Apple-Mail = _E0EEB558-0782-4701-B076-26B88FDF6612"; \ n \ tprotocol = "application/pgp-Signatur"; micalg = pgp-sha512'). – CBHacking

+0

Outlook benötigt dies nicht - es analysiert immer den Nachrichtentext in einfache (PR_BODY), HTML (PR_HTML) und RTF (PER_RTF_COMPRESSED) Teile. Wenn HTML und RTF aus reinem Text erstellt wurden, gibt es einen Kommentar in HTML- und RTF-Textstellen, die den Text als einfachen Text markieren. –

+0

Leider gibt es mehr E-Mails als die reinen Text- und HTML- (und RTF-) Körpern ... besonders im Umgang mit signierten und verschlüsselten Nachrichten. Mehr leider, Outlook versteht PGP/MIME-Nachrichten * nur * gut genug, um sie zu einem völligen Bär zu machen (siehe jede Frage auf dieser Website mit der Zeichenfolge "smime.p7m", von denen die meisten betreffen eigentlich PGP/MIME). In diesem Fall ist das, was ich suche, eine Möglichkeit, PGP/MIME-signierte und/oder verschlüsselte E-Mails schnell zu identifizieren, ohne Zeit mit Raten und Prüfen zu verschwenden. Zum Glück ist es im MIME-Header "Content-Type" angegeben ... wenn ich es nur bekommen könnte! – CBHacking

0

Wie wäre es, den gesamten Header zuerst und dann durch diese Zeichenfolge zu suchen, um zu bekommen, was Sie brauchen?

Const PR_TRANSPORT_MESSAGE_HEADERS = "http://schemas.microsoft.com/mapi/proptag/0x007D001E" 
Outlook.PropertyAccessor olPA = olkMsg.PropertyAccessor; 
String Header = olPA.GetProperty(PR_TRANSPORT_MESSAGE_HEADERS); 

Quelle: Code Project

+0

Völlig möglich, aber fällt unter die "" Outlook analysiert nicht wirklich die Content-Type-Header und ich muss es einfach manuell tun? "' Teil der Frage. Angesichts der Tatsache, wie viel Outlook automatisch parst, der Tatsache, dass es eine benannte Eigenschaft gibt, die genau das ist, was ich möchte, und der Tatsache, dass einer der Gründe, warum ich dieses Add-In schreibe, darin liegt, dass es schlecht ist Leistung, ich habe wirklich auf eine bessere Lösung gehofft. – CBHacking

Verwandte Themen