Evolution Connector for Microsoft Exchange Programmer’s Reference Manual |
---|
Mail Architecture |
Mail-related WebDAV properties
Most mail-related WebDAV properties are in either the
urn:schemas:mailheader:
or
urn:schemas:httpmail:
namespaces. In fact, many
properties are available in both of those
namespaces. Every RFC 822 header in the message is copied
literally to a property in the
urn:schemas:mailheader:
namespace with the same
name. urn:schemas:httpmail:
on the other hand
has only a subset of headers, but in a more processed form. (For
example, if there are non-ASCII characters in the subject of a
message, urn:schemas:httpmail:subject
will have
a UTF-8 representation of the subject, while
urn:schemas:mailheader:subject
will have the
MIME-encoded ASCII representation.)
A few important mail-related WebDAV properties are:
urn:schemas:httpmail:read
(akaE2K_PR_HTTPMAIL_READ
),urn:schemas:httpmail:hasattachment
(akaE2K_PR_HTTPMAIL_HAS_ATTACHMENT
), andPR_ACTION_FLAG
, which are used to generate the Camel message flags.urn:schemas:httpmail:messageflag
(akaE2K_PR_HTTPMAIL_MESSAGE_FLAG
),urn:schemas:mailheader:reply-by
(akaE2K_PR_MAILHEADER_REPLY_BY
), andurn:schemas:mailheader:completed
(akaE2K_PR_MAILHEADER_COMPLETED
), to determine "flag for followup" information.DAV:getcontentlength
(akaE2K_PR_DAV_CONTENT_LENGTH
), which tells the message size.
MIME messages
Normal message/rfc822
messages delivered by
SMTP, or copied into the folder with a PUT (eg,
by Connector) are the easiest type of mail item to deal with.
The PR_TRANSPORT_MESSAGE_HEADERS
property of a
real MIME message contains the complete MIME structure of the
message with none of the actual content. (Eg, all of the RFC822
and MIME headers, plus multipart boundary delimeters.) This can be
used to create most of the summary information for a message.
MAPI messages
Messages sent by other local users using
Outlook, and some messages generated by
Exchange itself, are not represented as
MIME messages internally. While
Exchange will fake up MIME headers if
you GET the message, these messages don't have
a PR_TRANSPORT_MESSAGE_HEADERS
property, so to
create summary information, we have to fetch
urn:schemas:mailheader:
properties and fake up
the headers from there.
A few types of MAPI messages get additional special handling:
-
Delegated meeting requests
When you set up your delegates to get copies of your meeting requests, Exchange mangles the
message/rfc822
body in various ways. (In Connector,mail_util_demangle_delegated_meeting
fixes things for us.) -
Sticky notes
Technically, these aren't in mail folders, but they're handled by the mail code. This is a silly hack because I was bored one day. If the folder is a stickynotes folders instead of a mail folder, Connector fetches some additional properties and uses
mail_util_stickynote_to_rfc822
to make an HTML message simulating the stickynote.
Non-mail Documents
Public folders that are not calendar, contact, or task folders are treated as mail folders by default, but are sometimes used for things other than mail, such as storing Word documents.
These objects have basically no email properties at all, and when
you GET the bodies, they're
application/x-msword
or whatever instead of
message/rfc822
.
Sometimes these items will have a
PR_INTERNET_FREE_DOC_INFO
property that
contains a Content-Type
header, but not always.
So in that case, we get the
E2K_PR_DAV_CONTENT_TYPE
and make
Content-*
headers ourselves. Then we fake up
the rest of the headers to make the document look like an email
message with an attached document.