MsgReader
Raised when it is not possible to remove the or from
the
Raised when the Microsoft Outlook message type or EML is not supported
Raised when a property is invalid
Raised when the Microsoft Outlook signed message is invalid
Raised when it is not possible to read the from
the
This class can be used to calculate the differences between 2 dates in years, months, weeks, days, hours and seconds
Returns the years, days, months, weeks, hours, minutes and seconds as a string.
E.g. 1 year, 2 months, 3 weeks, 4 days, 5 hours, 6 minutes
Calculates the difference between 2 dates in years, months, weeks, days, hours and seconds
This class contains helper methods for E-mail addresses
Return true when the E-mail address is valid
Removes trailing en ending single quotes from an E-mail address when they exist
Get the complete inner exception tree
The exception object
This class contains file management functions that are not available in the .NET framework
The max path length in Windows
Check if there is a backslash at the end of the string and if not add it
Validates the length of , when this is longer then chars it will be truncated.
The filename with path
Optional extra truncate size, when not used the filename is truncated until it fits
Raised when no path or file name is given in the
Raised when it is not possible to truncate the
Returns the extension of the specified string
The path of the file
Raised when no path is given
Returns the file name of the specified string without the extension
The path of the file
Returns the directory information for the specified string
The path of a file or directory
Checks if a file already exists and if so adds a number until the file is unique
The file to check
When true validation will be performed on the max path lengt
Raised when no path or file name is given in the
Raised when it is not possible to truncate the
Removes illegal filename characters
Gives the size of a file in Windows format (GB, MB, KB, Bytes)
Filesize in bytes
This class is used as a placeholder for the filetype information
The magic bytes
The magic bytes as a string
The file type extension that belongs to the magic bytes (e.g. doc, xls, msg)
Description of the file
Constructor
The magic bytes
The file type extension that belongs to the magic bytes (e.g. doc, xls, msg)
Description of the file (e.g. Word document, Outlook message, etc...)
This class can be used to recognize files by their magic bytes
Contains all the magic bytes and their description
Converts a string to a byte array
String to convert
Byte array
A list with most of the used file types and their magic bytes
IndexOf function for byte arrays
Returns a object by looking to the magic bytes of the array.
A object
The bytes of the file
Tries to recognize an Microsoft Office file by looking to it's internal bytes
The bytes of the file
Tries to recognize an Microsoft Office 2007+ file by looking to it's internal bytes
The bytes of the file
Strips the BOM from the magic bytes array
Byte array without BOM
This class contains all known mimetypes
Returns the file extension for the given . An empty string
is returned when the mimetype is not found.
The mime type
Returns the stream as an byte array
Returns true when the end of the has been reached
Utility to help reading bytes and strings of a
Read a line from the stream.
A line is interpreted as all the bytes read until a CRLF or LF is encountered.
CRLF pair or LF is not included in the string.
The stream from which the line is to be read
A line read from the stream returned as a byte array or if no bytes were readable from the stream
If is
Read a line from the stream. for more documentation.
The stream to read from
A line read from the stream or if nothing could be read from the stream
If is
Reads from the until a null terminated char is read
Reads from the until a null terminated char is read
The
Reads from the until a null terminated char is read
The
A strongly-typed resource class, for looking up localized strings, etc.
Returns the cached ResourceManager instance used by this class.
Overrides the current thread's CurrentUICulture property for all
resource lookups using this strongly typed resource class.
Looks up a localized string similar to Attachments.
Looks up a localized string similar to Categories.
Looks up a localized string similar to Declined.
Looks up a localized string similar to Acting as delegate for the organizer of the meeting.
Looks up a localized string similar to Deleted exception with no response.
Looks up a localized string similar to Deleted meeting with no response.
Looks up a localized string similar to Declined.
Looks up a localized string similar to Meeting status.
Looks up a localized string similar to Organizer of the meeting.
Looks up a localized string similar to Modified end time.
Looks up a localized string similar to Modified location.
Looks up a localized string similar to Modified start time.
Looks up a localized string similar to Accepted.
Looks up a localized string similar to Declined.
Looks up a localized string similar to Exception declined.
Looks up a localized string similar to Tentative.
Looks up a localized string similar to End.
Looks up a localized string similar to Location.
Looks up a localized string similar to Mandatory participants.
Looks up a localized string similar to Optional participants.
Looks up a localized string similar to Organizer.
Looks up a localized string similar to Daily.
Looks up a localized string similar to Monthly.
Looks up a localized string similar to (None).
Looks up a localized string similar to Weekly.
Looks up a localized string similar to Yearly.
Looks up a localized string similar to Recurrence patern type.
Looks up a localized string similar to Recurrence patern.
Looks up a localized string similar to Resources.
Looks up a localized string similar to Start.
Looks up a localized string similar to Subject.
Looks up a localized string similar to Assistant.
Looks up a localized string similar to Assistant.
Looks up a localized string similar to Pager.
Looks up a localized string similar to Birthday.
Looks up a localized string similar to Business fax.
Looks up a localized string similar to Business 2.
Looks up a localized string similar to Business.
Looks up a localized string similar to Callback.
Looks up a localized string similar to Car.
Looks up a localized string similar to Mobile.
Looks up a localized string similar to Company.
Looks up a localized string similar to Company main phone.
Looks up a localized string similar to MM-dd-yyyy.
Looks up a localized string similar to F.
Looks up a localized string similar to days.
Looks up a localized string similar to day.
Looks up a localized string similar to hours.
Looks up a localized string similar to hour.
Looks up a localized string similar to minutes.
Looks up a localized string similar to minute.
Looks up a localized string similar to months.
Looks up a localized string similar to month.
Looks up a localized string similar to seconds.
Looks up a localized string similar to second.
Looks up a localized string similar to weeks.
Looks up a localized string similar to week.
Looks up a localized string similar to years.
Looks up a localized string similar to year.
Looks up a localized string similar to Department.
Looks up a localized string similar to Full name.
Looks up a localized string similar to E-mail display as.
Looks up a localized string similar to E-mail.
Looks up a localized string similar to E-mail 2 display as.
Looks up a localized string similar to E-mail 2.
Looks up a localized string similar to E-mail 3 display as.
Looks up a localized string similar to E-mail 3.
Looks up a localized string similar to Attachments.
Looks up a localized string similar to BCC.
Looks up a localized string similar to Categories.
Looks up a localized string similar to CC.
Looks up a localized string similar to Completed.
Looks up a localized string similar to Flag.
Looks up a localized string similar to Follow up.
Looks up a localized string similar to Follow up status.
Looks up a localized string similar to From.
Looks up a localized string similar to on behalf of.
Looks up a localized string similar to Sent on.
Looks up a localized string similar to Signed by.
Looks up a localized string similar to on.
Looks up a localized string similar to Subject.
Looks up a localized string similar to To.
Looks up a localized string similar to Job title.
Looks up a localized string similar to First name.
Looks up a localized string similar to Home address.
Looks up a localized string similar to Home fax.
Looks up a localized string similar to Home 2.
Looks up a localized string similar to Home.
Looks up a localized string similar to Web page.
Looks up a localized string similar to High.
Looks up a localized string similar to Urgent.
Looks up a localized string similar to Low.
Looks up a localized string similar to .
Looks up a localized string similar to IM address.
Looks up a localized string similar to ISDN.
Looks up a localized string similar to Nameless.
Looks up a localized string similar to Other address.
Looks up a localized string similar to Other fax.
Looks up a localized string similar to Other.
Looks up a localized string similar to Other fax.
Looks up a localized string similar to Primary phone.
Looks up a localized string similar to Profession.
Looks up a localized string similar to Radio.
Looks up a localized string similar to Spouse/Partner.
Looks up a localized string similar to Date.
Looks up a localized string similar to Last name.
Looks up a localized string similar to Actual work.
Looks up a localized string similar to Billing information.
Looks up a localized string similar to Company.
Looks up a localized string similar to Contacts.
Looks up a localized string similar to Completed on.
Looks up a localized string similar to Due date.
Looks up a localized string similar to Total work.
Looks up a localized string similar to Mileage.
Looks up a localized string similar to Owner.
Looks up a localized string similar to Percentage complete.
Looks up a localized string similar to Requested by.
Looks up a localized string similar to Start date.
Looks up a localized string similar to Complete.
Looks up a localized string similar to In progress.
Looks up a localized string similar to Status.
Looks up a localized string similar to Not started.
Looks up a localized string similar to Waiting.
Looks up a localized string similar to Subject.
Looks up a localized string similar to Telex.
Looks up a localized string similar to TTY/TDD phone.
Looks up a localized string similar to Anniversary.
Looks up a localized string similar to Business address.
Utility class for dealing with Base64 encoded strings
Decodes a base64 encoded string into the bytes it describes
The string to decode
A byte array that the base64 string described
Decodes a Base64 encoded string using a specified
Source string to decode
The encoding to use for the decoded byte array that describes
A decoded string
If or is
If is not a valid base64 encoded string
Utility class for dealing with encoded word strings
EncodedWord encoded strings are only in ASCII, but can embed information
about characters in other character sets.
It is done by specifying the character set, an encoding that maps from ASCII to
the correct bytes and the actual encoded string.
It is specified in a format that is best summarized by a BNF:
"=?" character_set "?" encoding "?" encoded-text "?="
=?ISO-8859-1?Q?=2D?=
Here ISO-8859-1 is the character set.
Q is the encoding method (quoted-printable). B is also supported (Base 64).
The encoded text is the =2D part which is decoded to a space.
Decode text that is encoded with the encoding.
This method will decode any encoded-word found in the string.
All parts which is not encoded will not be touched.
From RFC 2047:
Generally, an "encoded-word" is a sequence of printable ASCII
characters that begins with "=?", ends with "?=", and has two "?"s in
between. It specifies a character set and an encoding method, and
also includes the original text encoded as graphic ASCII characters,
according to the rules for that encoding method.
Example:
=?ISO-8859-1?q?this=20is=20some=20text?= other text here
See RFC 2047 section 2 "Syntax of encoded-words" for more details
Source text. May be content which is not encoded.
Decoded text
If is
Utility class used by OpenPop for mapping from a characterSet to an .
The functionality of the class can be altered by adding mappings
using and by adding a .
Given a characterSet, it will try to find the Encoding as follows:
-
If a mapping for the characterSet was added, use the specified Encoding from there. Mappings can be added using .
-
Try to parse the characterSet and look it up using for codepages or for named encodings.
-
If an encoding is not found yet, use the if defined. The is user defined.
Delegate that is used when the EncodingFinder is unable to find an encoding by
using the or general code.
This is used as a last resort and can be used for setting a default encoding or
for finding an encoding on runtime for some .
The character set to find an encoding for.
An encoding for the or if none could be found.
Last resort decoder.
Mapping from charactersets to encodings.
Initialize the EncodingFinder
Used to reset this static class to facilite isolated unit testing.
Parses a character set into an encoding.
The character set to parse
An encoding which corresponds to the character set
If is
Puts a mapping from to
into the 's internal mapping Dictionary.
The string that maps to the
The that should be mapped from
If is
If is
Used for decoding Quoted-Printable text.
This is a robust implementation of a Quoted-Printable decoder defined in RFC 2045 and RFC 2047.
Every measurement has been taken to conform to the RFC.
Decodes a Quoted-Printable string according to RFC 2047.
RFC 2047 is used for decoding Encoded-Word encoded strings.
Quoted-Printable encoded string
Specifies which encoding the returned string will be in
A decoded string in the correct encoding
If or is
Decodes a Quoted-Printable string according to RFC 2045.
RFC 2045 specifies the decoding of a body encoded with Content-Transfer-Encoding of quoted-printable.
Quoted-Printable encoded string
A decoded byte array that the Quoted-Printable encoded string described
If is
This is the actual decoder.
The string to be decoded from Quoted-Printable
If , specifies that RFC 2047 quoted printable decoding is used.
This is for quoted-printable encoded words
If , specifies that RFC 2045 quoted printable decoding is used.
This is for quoted-printable Content-Transfer-Encoding
A decoded byte array that was described by
If is
See RFC 2047 section 4.2 for RFC details
Writes all bytes in a byte array to a stream
The stream to write to
The bytes to write to the
RFC 2045 states about robustness:
Control characters other than TAB, or CR and LF as parts of CRLF pairs,
must not appear. The same is true for octets with decimal values greater
than 126. If found in incoming quoted-printable data by a decoder, a
robust implementation might exclude them from the decoded data and warn
the user that illegal characters were discovered.
Control characters are defined in RFC 2396 as
control = US-ASCII coded characters 00-1F and 7F hexadecimal
String to be stripped from illegal control characters
A string with no illegal control characters
If is
This method will remove any \r and \n which is not paired as \r\n
String to remove lonely \r and \n's from
A string without lonely \r and \n's
If is
RFC 2045 says that a robust implementation should handle:
An "=" cannot be the ultimate or penultimate character in an encoded
object. This could be handled as in case (2) above.
Case (2) is:
An "=" followed by a character that is neither a
hexadecimal digit (including "abcdef") nor the CR character of a CRLF pair
is illegal. This case can be the result of US-ASCII text having been
included in a quoted-printable part of a message without itself having
been subjected to quoted-printable encoding. A reasonable approach by a
robust implementation might be to include the "=" character and the
following character in the decoded data without any transformation and, if
possible, indicate to the user that proper decoding was not possible at
this point in the data.
The string to decode which cannot have length above or equal to 3
and must start with an equal sign.
A decoded byte array
If is
Thrown if a the parameter has length above 2 or does not start with an equal sign.
This helper method will decode a string of the form "=XX" where X is any character.
This method will never fail, unless an argument of length not equal to three is passed.
The length 3 character that needs to be decoded
A decoded byte array
If is
Thrown if a the parameter does not have length 3 or does not start with an equal sign.
This class is responsible for decoding parameters that has been encoded with:
-
Continuation
This is where a single parameter has such a long value that it could
be wrapped while in transit. Instead multiple parameters is used on each line.
Example
From: Content-Type: text/html; boundary="someVeryLongStringHereWhichCouldBeWrappedInTransit"
To: Content-Type: text/html; boundary*0="someVeryLongStringHere" boundary*1="WhichCouldBeWrappedInTransit"
-
Encoding
Sometimes other characters then ASCII characters are needed in parameters.
The parameter is then given a different name to specify that it is encoded.
Example
From: Content-Disposition attachment; filename="specialCharsÆØÅ"
To: Content-Disposition attachment; filename*="ISO-8859-1'en-us'specialCharsC6D8C0"
This encoding is almost the same as encoding, and is used to decode the value.
-
Continuation and Encoding
Both Continuation and Encoding can be used on the same time.
Example
From: Content-Disposition attachment; filename="specialCharsÆØÅWhichIsSoLong"
To: Content-Disposition attachment; filename*0*="ISO-8859-1'en-us'specialCharsC6D8C0"; filename*1*="WhichIsSoLong"
This could also be encoded as:
To: Content-Disposition attachment; filename*0*="ISO-8859-1'en-us'specialCharsC6D8C0"; filename*1="WhichIsSoLong"
Notice that filename*1 does not have an * after it - denoting it IS NOT encoded.
There are some rules about this:
- The encoding must be mentioned in the first part (filename*0*), which has to be encoded.
- No other part must specify an encoding, but if encoded it uses the encoding mentioned in the first part.
- Parts may be encoded or not in any order.
More information and the specification is available in RFC 2231.
Decodes a string of the form:
value0; key1=value1; key2=value2; key3=value3
The returned List of key value pairs will have the key as key and the decoded value as value.
The first value0 will have a key of .
If continuation is used, then multiple keys will be merged into one key with the different values
decoded into on big value for that key.
Example:
title*0=part1
title*1=part2
will have key and value of:
title=decode(part1)decode(part2)
The string to decode.
A list of decoded key value pairs.
If is
Decodes the list of key value pairs into a decoded list of key value pairs.
There may be less keys in the decoded list, but then the values for the lost keys will have been appended
to the new key.
The pairs to decode
A decoded list of pairs
This will decode a single value of the form: ISO-8859-1'en-us'%3D%3DIamHere
Which is basically a form just using % instead of =
Notice that 'en-us' part is not used for anything.
If the single value given is not on the correct form, it will be returned without
being decoded and will be set to .
The encoding used to decode with - it is given back for later use.
if input was not in the correct form.
The value to decode
The decoded value that corresponds to or if
is not on the correct form, it will be non-decoded.
If is
This will decode a single value of the form: %3D%3DIamHere
Which is basically a form just using % instead of =
The value to decode
The encoding used to decode with
The decoded value that corresponds to
If is
If is
Class used to decode RFC 2822 Date header fields.
Timezone formats that aren't +-hhmm, e.g. UTC, or K. See MatchEvaluator method for conversions
Matches any +=hhmm timezone offset, e.g. +0100
Custom DateTime formats - will be tried if cannot parse the dateInput string using the default method
Specified using formats at http://msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29.aspx
One format per string in the array
Converts a string in RFC 2822 format into a object
The date to convert
A valid object, which represents the same time as the string that was converted.
If is not a valid date representation, then is returned.
If is
If the could not be parsed into a object
Adjust the object given according to the timezone specified in the .
The date to alter
The input date, in which the timezone can be found
An date altered according to the timezone
Convert timezones in older formats to [+-]dddd format.
The match that was found
The string to replace the matched string with
RFC 2822: http://www.rfc-base.org/rfc-2822.html
4.3. Obsolete Date and Time
The syntax for the obsolete date format allows a 2 digit year in the
date field and allows for a list of alphabetic time zone
specifications that were used in earlier versions of this standard.
It also permits comments and folding white space between many of the
tokens.
obs-day-of-week = [CFWS] day-name [CFWS]
obs-year = [CFWS] 2*DIGIT [CFWS]
obs-month = CFWS month-name CFWS
obs-day = [CFWS] 1*2DIGIT [CFWS]
obs-hour = [CFWS] 2DIGIT [CFWS]
obs-minute = [CFWS] 2DIGIT [CFWS]
obs-second = [CFWS] 2DIGIT [CFWS]
obs-zone = "UT" / "GMT" / ; Universal Time
Resnick Standards Track [Page 31]
RFC 2822 Internet Message Format April 2001
; North American UT
; offsets
"EST" / "EDT" / ; Eastern: - 5/ - 4
"CST" / "CDT" / ; Central: - 6/ - 5
"MST" / "MDT" / ; Mountain: - 7/ - 6
"PST" / "PDT" / ; Pacific: - 8/ - 7
%d65-73 / ; Military zones - "A"
%d75-90 / ; through "I" and "K"
%d97-105 / ; through "Z", both
%d107-122 ; upper and lower case -- imported lower and upper
Extracts the date and time parts from the
The date input string, from which to extract the date and time parts
The extracted date part or if is not recognized as a valid date.
If is
Strips and removes all comments and excessive whitespace from the string
The input to strip from
The stripped string
If is
Converts date time string in very wrong date time format:
Tue Feb 18 10:23:30 2014 (MSK)
to
Feb 18 2014 10:23:30 MSK
The date to convert
The corrected string
Thanks to http://stackoverflow.com/a/7333402/477854 for inspiration
This class can convert from strings like "104 kB" (104 kilobytes) to bytes.
It does not know about differences such as kilobits vs kilobytes.
Contains common operations needed while decoding.
Remove quotes, if found, around the string.
Text with quotes or without quotes
Text without quotes
If is
Split a string into a list of strings using a specified character.
Everything inside quotes are ignored.
A string to split
The character to use to split with
A List of strings that was delimited by the character
that describes the ContentTransferEncoding header field
See RFC 2045 section 6 for more details
7 bit Encoding
8 bit Encoding
Quoted Printable Encoding
Base64 Encoding
Binary Encoding
Utility class that divides a message into a body and a header.
The header is then parsed to a strongly typed object.
Extract the headers from the given headers string and gives it back
as a MessageHeader object
The string with the header information
Find the end of the header section in a byte array.
The headers have ended when a blank line is found
The full message stored as a byte array
The position of the line just after the header end blank line
If is
Extract the header part and body part of a message.
The headers are then parsed to a strongly typed object.
The full message in bytes where header and body needs to be extracted from
The extracted header parts of the message
The body part of the message
If is
Method that takes a full message and extract the headers from it.
The message to extract headers from. Does not need the body part. Needs the empty headers end line.
A collection of Name and Value pairs of headers
If is
Check if the next line is part of the current header value we are parsing by
peeking on the next character of the .
This should only be called while parsing headers.
The reader from which the header is read from
if multi-line header. otherwise
Separate a full header line into a header name and a header value.
The raw header line to be separated
If is
Class that can parse different fields in the header sections of a MIME message.
Parses the Content-Transfer-Encoding header.
The value for the header to be parsed
A
If is
If the could not be parsed to a
Parses an ImportanceType from a given Importance header value.
The value to be parsed
A . If the is not recognized, Normal is returned.
If is
Parses a the value for the header Content-Type to
a object.
The value to be parsed
A object
If is
Parses a the value for the header Content-Disposition to a object.
The value to be parsed
A object
If is
Parses an ID like Message-Id and Content-Id.
Example:
<test@test.com>
into
test@test.com
The id to parse
A parsed ID
Parses multiple IDs from a single string like In-Reply-To.
The value to parse
A list of IDs
Class that holds all headers for a message
Headers which are unknown the the parser will be held in the collection.
This class cannot be instantiated from outside the library.
See RFC 4021 for a large list of headers.
All headers which were not recognized and explicitly dealt with.
This should mostly be custom headers, which are marked as X-[name].
This list will be empty if all headers were recognized and parsed.
If you as a user, feels that a header in this collection should
be parsed, feel free to notify the developers.
A human readable description of the body
if no Content-Description header was present in the message.
ID of the content part (like an attached image). Used with MultiPart messages.
if no Content-ID header field was present in the message.
For an ID of the message
Message keywords
The list will be empty if no Keywords header was present in the message
A List of emails to people who wishes to be notified when some event happens.
These events could be email:
- deletion
- printing
- received
- ...
The list will be empty if no Disposition-Notification-To header was present in the message
See RFC 3798 for details
This is the Received headers. This tells the path that the email went.
The list will be empty if no Received header was present in the message
Importance of this email.
The importance level is set to normal, if no Importance header field was mentioned or it contained
unknown information. This is the expected behavior according to the RFC.
This header describes the Content encoding during transfer.
If no Content-Transfer-Encoding header was present in the message, it is set
to the default of SevenBit in accordance to the RFC.
See RFC 2045 section 6 for details
Carbon Copy. This specifies who got a copy of the message.
The list will be empty if no Cc header was present in the message
Blind Carbon Copy. This specifies who got a copy of the message, but others
cannot see who these persons are.
The list will be empty if no Received Bcc was present in the message
Specifies who this mail was for
The list will be empty if no To header was present in the message
Specifies who sent the email
if no From header field was present in the message
Specifies who a reply to the message should be sent to
if no Reply-To header field was present in the message
The message identifier(s) of the original message(s) to which the
current message is a reply.
The list will be empty if no In-Reply-To header was present in the message
The message identifier(s) of other message(s) to which the current
message is related to.
The list will be empty if no References header was present in the message
This is the sender of the email address.
if no Sender header field was present in the message
The RFC states that this field can be used if a secretary
is sending an email for someone she is working for.
The email here will then be the secretary's email, and
the Reply-To field would hold the address of the person she works for.
RFC states that if the Sender is the same as the From field,
sender should not be included in the message.
The Content-Type header field.
If not set, the ContentType is created by the default "text/plain; charset=us-ascii" which is
defined in RFC 2045 section 5.2.
If set, the default is overridden.
Used to describe if a is to be displayed or to be though of as an attachment.
Also contains information about filename if such was sent.
if no Content-Disposition header field was present in the message
The Date when the email was sent.
This is the raw value. for a parsed up value of this field.
if no Date header field was present in the message or if the date could not be parsed.
See RFC 5322 section 3.6.1 for more details
The Date when the email was sent.
This is the parsed equivalent of .
Notice that the of the object is in UTC and has NOT been converted
to local .
See RFC 5322 section 3.6.1 for more details
An ID of the message that is SUPPOSED to be in every message according to the RFC.
The ID is unique.
if no Message-ID header field was present in the message
The Mime Version.
This field will almost always show 1.0
if no Mime-Version header field was present in the message
A single with no username inside.
This is a trace header field, that should be in all messages.
Replies should be sent to this address.
if no Return-Path header field was present in the message
The subject line of the message in decoded, one line state.
This should be in all messages.
if no Subject header field was present in the message
Parses a to a MessageHeader
The collection that should be traversed and parsed
A valid MessageHeader object
If is
Parses a to a
The collection that should be traversed and parsed
A valid object
If is
Parses a single header and sets member variables according to it.
The name of the header
The value of the header in unfolded state (only one line)
If or is
Class that hold information about one "Received:" header line.
Visit these RFCs for more information:
RFC 5321 section 4.4
RFC 4021 section 3.6.7
RFC 2822 section 3.6.7
RFC 2821 section 4.4
The date of this received line.
Is if not present in the received header line.
A dictionary that contains the names and values of the
received header line.
If the received header is invalid and contained one name
multiple times, the first one is used and the rest is ignored.
If the header lines looks like:
from sending.com (localMachine [127.0.0.1]) by test.net (Postfix)
then the dictionary will contain two keys: "from" and "by" with the values
"sending.com (localMachine [127.0.0.1])" and "test.net (Postfix)".
The raw input string that was parsed into this class.
Parses a Received header value.
The value for the header to be parsed
If is
Parses the Received header name-value-list into a dictionary.
The full header value for the Received header
A dictionary where the name-value-list has been parsed into
This class is used for RFC compliant email addresses.
The class cannot be instantiated from outside the library.
The does not cover all the possible formats
for RFC 5322 section 3.4 compliant email addresses.
This class is used as an address wrapper to account for that deficiency.
The email address of this
It is possibly string.Empty since RFC mail addresses does not require an email address specified.
Example header with email address:
To: Test test@mail.com
Address will be test@mail.com
Example header without email address:
To: Test
Address will be .
The display name of this
It is possibly since RFC mail addresses does not require a display name to be specified.
Example header with display name:
To: Test test@mail.com
DisplayName will be Test
Example header without display name:
To: test@test.com
DisplayName will be
This is the Raw string used to describe the .
The associated with the .
The value of this property can be in instances where the cannot represent the address properly.
Use property to see if this property is valid.
Specifies if the object contains a valid reference.
Constructs an object from a object.
This constructor is used when we were able to construct a from a string.
The address that was parsed into
The raw unparsed input which was parsed into the
If or is
When we were unable to parse a string into a , this constructor can be
used. The Raw string is then used as the .
The raw unparsed input which could not be parsed
If is
A string representation of the object
Returns the string representation for the object
Parses an email address from a MIME header
Examples of input:
Eksperten mailrobot <noreply@mail.eksperten.dk>
"Eksperten mailrobot" <noreply@mail.eksperten.dk>
<noreply@mail.eksperten.dk>
noreply@mail.eksperten.dk
It might also contain encoded text, which will then be decoded.
The value to parse out and email and/or a username
A
If is
RFC 5322 section 3.4 for more details on email syntax.
For more information about encoded text.
Parses input of the form
Eksperten mailrobot <noreply@mail.eksperten.dk>, ...
to a list of RFCMailAddresses
The input that is a comma-separated list of EmailAddresses to parse
A List of objects extracted from the parameter.
If is
This is the root of the email tree structure.
for a description about the structure.
A Message (this class) contains the headers of an email message such as:
- To
- From
- Subject
- Content-Type
- Message-ID
which are located in the property.
Use the property to find the actual content of the email message.
Returns the ID of the message when this is available in the
(as specified in [RFC2822]). Null when not available
Headers of the Message.
This is the body of the email Message.
If the body was parsed for this Message, this property will never be .
This will return the first where the
is set to "html/text". This will return when there is no "html/text"
found.
This will return the first where the
is set to "text/plain". This will be when there is no "text/plain"
found.
This will return all the message parts that are flagged as
.
This will be when there are no message parts
that are flagged as .
The raw content from which this message has been constructed.
These bytes can be persisted and later used to recreate the Message.
Convenience constructor for .
Creates a message from a byte array. The full message including its body is parsed.
The byte array which is the message contents to parse
Constructs a message from a byte array.
The headers are always parsed, but if is , the body is not parsed.
The byte array which is the message contents to parse
if the body should be parsed,
if only headers should be parsed out of the byte array
Returns the list of as a normal or html string
A list with one or more objects
When true the E-mail addresses are converted to hyperlinks
Set this to true when the E-mail body format is html
Save this to a file.
Can be loaded at a later time using the method.
The File location to save the to. Existent files will be overwritten.
If is
Other exceptions relevant to using a might be thrown as well
Save this to a stream.
The stream to write to
If is
Other exceptions relevant to might be thrown as well
Loads a from a file containing a raw email.
The File location to load the from. The file must exist.
If is
If does not exist
Other exceptions relevant to a might be thrown as well
A with the content loaded from the
Loads a from a containing a raw email.
The from which to load the raw
If is
Other exceptions relevant to might be thrown as well
A with the content loaded from the
A MessagePart is a part of an email message used to describe the whole email parse tree.
Email messages are tree structures:
Email messages may contain large tree structures, and the MessagePart are the nodes of the this structure.
A MessagePart may either be a leaf in the structure or a internal node with links to other MessageParts.
The root of the message tree is the class.
Leafs:
If a MessagePart is a leaf, the part is not a MultiPart message.
Leafs are where the contents of an email are placed.
This includes, but is not limited to: attachments, text or images referenced from HTML.
The content of an attachment can be fetched by using the property.
If you want to have the text version of a MessagePart, use the method which will
convert the into a string using the encoding the message was sent with.
Internal nodes:
If a MessagePart is an internal node in the email tree structure, then the part is a MultiPart message.
The property will then contain links to the parts it contain.
The property of the MessagePart will not be set.
See the example for a parsing example.
This class cannot be instantiated from outside the library.
This example illustrates how the message parse tree looks like given a specific message
The message source in this example is:
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="frontier"
This is a message with multiple parts in MIME format.
--frontier
Content-Type: text/plain
This is the body of the message.
--frontier
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
PGh0bWw+CiAgPGHLYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg
Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==
--frontier--
The tree will look as follows, where the content-type media type of the message is listed
- Message root
- multipart/mixed MessagePart
- text/plain MessagePart
- application/octet-stream MessagePart
It is possible to have more complex message trees like the following:
- Message root
- multipart/mixed MessagePart
- text/plain MessagePart
- text/plain MessagePart
- multipart/parallel
- audio/basic
- image/tiff
- text/enriched
- message/rfc822
But it is also possible to have very simple message trees like:
- Message root
- text/plain
The Content-Type header field.
If not set, the ContentType is created by the default "text/plain; charset=us-ascii" which is
defined in RFC 2045 section 5.2.
If set, the default is overridden.
A human readable description of the body
if no Content-Description header was present in the message.
This header describes the Content encoding during transfer.
If no Content-Transfer-Encoding header was present in the message, it is set
to the default of SevenBit in accordance to the RFC.
See RFC 2045 section 6 for details
ID of the content part (like an attached image). Used with MultiPart messages.
if no Content-ID header field was present in the message.
Used to describe if a is to be displayed or to be though of as an attachment.
Also contains information about filename if such was sent.
if no Content-Disposition header field was present in the message
This is the encoding used to parse the message body if the
is not a MultiPart message. It is derived from the character set property.
This is the parsed body of this .
It is parsed in that way, if the body was ContentTransferEncoded, it has been decoded to the
correct bytes.
It will be if this is a MultiPart message.
Use to check if this is a MultiPart message.
This will be set to true if this is the first found Text . This way it
indicates that this is the text variant of the E-mail body.
This will be set to true if this is the first found Html . This way it
indicates that this is the html variant of the E-mail body.
Describes if this is a MultiPart message
The is a MultiPart message if the media type property starts with "multipart/"
A is considered to be holding text in it's body if the MediaType
starts either "text/" or is equal to "message/rfc822"
A is considered to be an inline attachment, if
it is has the Inline set to True
A is considered to be an attachment, if
- it is not holding text and is not a MultiPart message
or
- it has a Content-Disposition header that says it is an attachment
This is a convenient-property for figuring out a FileName for this .
If the is a MultiPart message, then it makes no sense to try to find a FileName.
The FileName can be specified in the , or
properties.
If none of these places two places tells about the FileName, a default is returned.
If this is a MultiPart message, then this property
has a list of each of the Multiple parts that the message consists of.
It is if it is not a MultiPart message.
Use to check if this is a MultiPart message.
Used to construct the topmost message part
The body that needs to be parsed
The headers that should be used from the message
If or
is
Parses a character set into an encoding
The character set that needs to be parsed. is allowed.
The encoding specified by the parameter, or ASCII if the character set
was or empty
Figures out the filename of this message part.
property.
The body that needs to be parsed
The headers that should be used from the message
The default filename to use, if no other could be found
The filename found, or the default one if not such filename could be found in the headers
if is
Parses a byte array as a body of an email message.
The byte array to parse as body of an email message. This array may not contain headers.
Parses the byte array as a MultiPart message.
It is not valid to call this method if returned .
Fills the property of this .
The byte array which is to be parsed as a MultiPart message
Given a byte array describing a full message.
Parses the byte array into a .
The byte array containing both headers and body of a message
A which was described by the byte array
Gets a list of byte arrays where each entry in the list is a full message of a message part
The raw byte array describing the body of a message which is a MultiPart message
The delimiter that splits the different MultiPart bodies from each other
A list of byte arrays, each a full message of a
If is
Method that is able to find a specific MultiPart boundary in a Stream.
The Stream passed should not be used for anything else then for looking for MultiPart boundaries
The stream to find the next MultiPart boundary in. Do not use it for anything else then with this method.
The MultiPart boundary to look for. This should be found in the header
Is set to if the next MultiPart boundary was indicated to be the last one, by having -- appended to it. Otherwise set to
The position of the first character of the line that contained MultiPartBoundary or -1 if no (more) MultiPart boundaries was found
Decodes a byte array into another byte array based upon the Content Transfer encoding
The byte array to decode into another byte array
The of the byte array
A byte array which comes from the being used on the
If is
Thrown if the is unsupported
Gets this MessagePart's as text.
This is simply the being used on the raw bytes of the property.
This method is only valid to call if it is not a MultiPart message and therefore contains a body.
The property as a string
Save this 's contents to a file.
There are no methods to reload the file.
The File location to save the to. Existent files will be overwritten.
If is
Other exceptions relevant to using a might be thrown as well
Save this 's contents to a stream.
The stream to write to
If is
Other exceptions relevant to might be thrown as well
This is an abstract class which handles traversing of a tree structure.
It runs through the message structure using a depth-first traversal.
The answer you want from traversing the message tree structure
Call this when you want an answer for a full message.
The message you want to traverse
An answer
if is
Call this method when you want to find an answer for a
The part you want an answer from.
An answer
if is
For a concrete implementation an answer must be returned for a leaf , which are
MessageParts that are not MultiParts.
The message part which is a leaf and thereby not a MultiPart
An answer
For a concrete implementation, when a MultiPart has fetched it's answers from it's children, these
answers needs to be merged. This is the responsibility of this method.
The answer that the leafs gave
A merged answer
Finds all s which are considered to be attachments
Finds the first which have a given MediaType in a depth first traversal.
This will be flagged as the or
according to the searched MediaType ("text/html" or "text/plain")
Finds the first with the given MediaType
The to start looking in
The MediaType to look for. Case is ignored.
A with the given MediaType or if no such was found
Finds the first with the given MediaType
The to start looking in
The MediaType to look for. Case is ignored.
A with the given MediaType or if no such was found
This interface describes a MessageTraverser which is able to traverse a Message hierarchy structure
and deliver some answer.
This is the type of the answer you want to have delivered.
Call this when you want to apply this traverser on a .
The which you want to traverse. Must not be .
An answer
Call this when you want to apply this traverser on a .
The which you want to traverse. Must not be .
An answer
This interface describes a MessageTraverser which is able to traverse a Message structure
and deliver some answer given some question.
This is the type of the answer you want to have delivered.
This is the type of the question you want to have answered.
Call this when you want to apply this traverser on a .
The which you want to traverse. Must not be .
The question
An answer
Call this when you want to apply this traverser on a .
The which you want to traverse. Must not be .
The question
An answer
An abstract class that implements the MergeLeafAnswers method.
The method simply returns the union of all answers from the leaves.
Adds all the in one big answer
The answers to merge
A list with has all the elements in the lists
if is
An Address Book EntryID structure specifies several types of Address Book objects, including
individual users, distribution lists, containers, and templates.
See https://msdn.microsoft.com/en-us/library/ee160588(v=exchg.80).aspx
Flags (4 bytes): This value MUST be set to 0x00000000. Bits in this field indicate under
ProviderUID (16 bytes): The identifier for the provider that created the EntryID. This value is used to route
EntryIDs to the correct provider and MUST be set to %xDC.A7.40.C8.C0.42.10.1A.B4.B9.08.00.2B.2F.E1.82.
Version (4 bytes): This value MUST be set to %x01.00.00.00.
Type (4 bytes): An integer representing the type of the object. It MUST be one of the values from the following
table.
The X500 DN of the Address Book object.
A distinguished name (DN), in Teletex form, of an object that is in an address book. An X500 DN can be more limited
in the size and number of relative distinguished names (RDNs) than a full DN.
The recurrence type of an appointment
There is no reccurence
The appointment is daily
The appointment is weekly
The appointment is monthly
The appointment is yearly
The intent of an appointment
The user is the owner of the Meeting object's
The user is a delegate acting on a Meeting object in a delegator's Calendar folder. If this bit is set, the
ciManager bit SHOULD NOT be set
The user deleted the Meeting object with no response sent to the organizer
The user deleted an exception to a recurring series with no response sent to the organizer
Appointment accepted as tentative
Appointment accepted
Appointment declined
The user modified the start time
The user modified the end time
The user changed the location of the meeting
The user declined an exception to a recurring series
The user declined an exception to a recurring series
The user canceled an exception to a recurring serie
The base class for reading an Outlook MSG file
Class used to contain all the appointment information of a .
Returns the location for the appointment, null when not available
Returns the start time for the appointment, null when not available
Returns the end time for the appointment, null when not available
Returns a string with all the attendees (To and CC), if you also want their E-mail addresses then
get the from the message, null when not available
Returns a string with all the TO (mandatory) attendees. If you also want their E-mail addresses then
get the from the and filter this
one on . Null when not available
Returns a string with all the CC (optional) attendees. If you also want their E-mail addresses then
get the from the and filter this
one on . Null when not available
Returns A value of true for the PidLidAppointmentNotAllowPropose property ([MS-OXPROPS] section 2.17)
indicates that attendees are not allowed to propose a new date and/or time for the meeting. A value of
false or the absence of this property indicates that the attendees are allowed to propose a new date
and/or time. This property is meaningful only on Meeting objects, Meeting Request objects, and Meeting
Update objects. Null when not available
Returns a object with all the unsendable attendees. Null when not available
Returns the reccurence type (daily, weekly, monthly or yearly) for the
Returns the reccurence type (daily, weekly, monthly or yearly) for the as a
string,
null when not available
Returns the reccurence patern for the , null when not available
The clients intention for the the as a list,
null when not available
of
The for the the as text
Initializes a new instance of the class.
The message.
Class represents an attachment
contains the data of the attachment as an byte array
The name of the that contains this attachment
Returns the filename of the attachment
Retuns the data
Returns the content id or null when not available
Returns the rendering position or -1 when unknown
True when the attachment is inline
True when the attachment is a contact photo. This can only be true
when the object is an
object.
Returns the date and time when the attachment was created or null
when not available
Returns the date and time when the attachment was last modified or null
when not available
Returns the MAPI Property Hidden, the value may only exist when it has been set True
Returns true when the attachment is an OLE attachment
Creates an attachment object from a
Initializes a new instance of the class.
The message.
The name of the that contains this attachment
Tries to resolve an attachment when the is of the type
, or
Tries to save an attachment as a png file with the user specified buffer
Class used to contain all the contact information
Returns the full name (e.g. De heer Kees van Spelde), null when not available
Returns the prefix of the name (e.g. De heer), null when not available
Returns the initials, null when not available
Returns the sur name (e.g. Spelde), null when not available
Returns the given name (e.g. Kees), null when not available
Returns the generation (e.g. Jr.), null when not available
Returns the function, null when not available
Returns the department, null when not available
Returns the name of the company, null when not available
Returns the named propery work (business) address (Outlook 2007 or higher), null when not available
Returns the street of the business address, null when not available
Returns the city of the business address, null when not available
Returns the state of the business address, null when not available
Returns the postal code of the business address, null when not available
Returns the country of the business address, null when not available
Returns the business telephone number, null when not available
Returns the business second telephone number, null when not available
Returns the business fax number, null when not available
Returns the business home page, null when not available
Returns the named propery home address (Outlook 2007 or higher)
Returns the street of the home address, null when not available
Returns the city of the home address, null when not available
Returns the state of the home address, null when not available
Returns the postal code of the home address, null when not available
Returns the country of the home address, null when not available
Returns the home telephone number, null when not available
Returns the home second telephone number, null when not available
Returns the home fax number, null when not available
Returns the named propery other address (Outlook 2007 or higher)
Returns the street of the other address, null when not available
Returns the city of the other address, null when not available
Returns the state of the other address, null when not available
Returns the postal code of the other address, null when not available
Returns the country of the other address, null when not available
Returns the other telephone number, null when not available
Returns the primary telephone number, null when not available
Returns the primary fax number, null when not available
Returns the name of the assistant, null when not available
Returns the telephone number of the assistant, null when not available
Return the instant messaging address, null when not available
Returns the company main telephone number, null when not available
Returns the cellular telephone number, null when not available
Returns the car telephone number, null when not available
Returns the radio telephone number, null when not available
Returns the beeper telephone number, null when not available
Returns the callback telephone number, null when not available
Returns the telex number, null when not available
Returns the text telephone (TTYTDD), null when not available
Returns the ISDN number, null when not available
Returns the name property e-mail address 1 (Outlook 2007 or higher), null when not available
Returns the name property e-mail displayname 1 (Outlook 2007 or higher), null when not available
Returns the name property e-mail address 2 (Outlook 2007 or higher), null when not available
Returns the name property e-mail displayname 2 (Outlook 2007 or higher), null when not available
Returns the name property e-mail address 3 (Outlook 2007 or higher), null when not available
Returns the name property e-mail displayname 3 (Outlook 2007 or higher), null when not available
Returns the birthday, null when not available
Returns the wedding/anniversary, null when not available
Returns the name of the spouse, null when not available
Returns the profession, null when not available
Returns the homepage (html), null when not available
Initializes a new instance of the class.
The message.
Class used to contain all the flag (follow up) information of a .
Returns the flag request text
Returns the Status of the flag
Initializes a new instance of the class.
The message.
Class that is used as a placeholder for the found mapped named mapi tags
Contains the named property identifier
Contains the identifier that is found in the entry or string stream
Class used to map known MAPI tags to the internal used values
Initializes a new instance of the class.
The message.
Returns a dictionary with all the property mappings
List with all the named property idents, e.g 8005, 8006, 801C, etc...
Class represent a MSG object
The name of the stream that contains this message
Contains the of this Message
contains the name of the file
Contains the date and time when the message was created or null
when not available
Contains the name of the last user (or creator) that has changed the Message object or
null when not available
Contains the date and time when the message was created or null
when not available
contains all the objects
Contains an URL to the help page of a mailing list
Contains an URL to the subscribe page of a mailing list
Contains an URL to the unsubscribe page of a mailing list
Contains the date/time in UTC format when the object has been sent,
null when not available
Contains the date/time in UTC format when the object has been received,
null when not available
Contains the of the object,
null when not available
Contains all the and objects.
Contains the subject prefix of the object
Contains the subject of the object
Contains the normalized subject of the object
Contains the text body of the object
Contains the html body of the object
Contains the rtf body of the object
Contains the that is used for the or .
It will contain null when the codepage could not be read from the
Contains the that is used for the .
It will contain null when the codepage could not be read from the
Contains the the Windows LCID of the end user who created this
Contains the object
Contains the object
Contains the object
Contains the object
Contains the object
The conversation index
The conversation topic
The message size
The transport message headers
Returns the ID of the message when the MSG file has been sent across the internet
(as specified in [RFC2822]). Null when not available
Gives the type of this message object
Returns the filename of the message object. For message objects Outlook uses the subject. It strips
invalid filename characters. When there is no filename the name from
will be used
Returns the date and time when the message was created or null
when not available
Returns the name of the last user (or creator) that has changed the Message object or
null when not available
Returns the date and time when the message was last modified or null
when not available
Returns the raw Transport Message Headers
Returns the sender of the Message
Returns the representing sender of the Message, null when not available
Returns the list of recipients in the message object
Returns an URL to the help page of an mailing list when this message is part of a mailing
or null when not available
Returns an URL to the subscribe page of an mailing list when this message is part of a mailing
or null when not available
Returns an URL to the unsubscribe page of an mailing list when this message is part of a mailing
Returns the date/time in UTC format when the message object has been sent, null when not available
PR_MESSAGE_DELIVERY_TIME is the time that the message was delivered to the store and
PR_CLIENT_SUBMIT_TIME is the time when the message was sent by the client (Outlook) to the server.
Now in this case when the Outlook is offline, it refers to the local store. Therefore when an email is sent,
it gets submitted to the local store and PR_MESSAGE_DELIVERY_TIME gets set the that time. Once the Outlook is
online at that point the message gets submitted by the client to the server and the PR_CLIENT_SUBMIT_TIME gets stamped.
Null when not available
Returns the of the object, null when not available
Returns the of the object object as text
Returns a list with and/or
objects that are attachted to the object
Returns the rendering position of this object when it was added to another
object and the body type was set to RTF
Returns or sets the subject prefix of the E-mail
Returns the subject of the object
Returns the normalized subject of the E-mail
Returns the available E-mail headers. These are only filled when the message
has been sent accross the internet. Returns null when there aren't any message headers
Returns a object when a flag has been set on the .
Returns null when not available.
Returns an object when the is a .
Returns null when not available.
Returns a object. This property is only available when:
- The is an and the object is not null
- The is an or
Returns a object when the is a .
Returns null when not available.
Returns the categories that are placed in the Outlook message.
Only supported for outlook messages from Outlook 2007 or higher
Returns the body of the Outlook message in plain text format.
The body of the Outlook message in plain text format.
Returns the body of the Outlook message in RTF format.
The body of the Outlook message in RTF format.
Returns the body of the Outlook message in HTML format.
The body of the Outlook message in HTML format.
Returns the that is used for the
or . It will return when the
codepage could not be read from the
See the property when dealing with the
Returns the that is used for the .
It will return the systems default encoding when the codepage could not be read from
the
See the property when dealing with the
Returns the the for the Windows LCID of the end user who created this
It will return null when the the Windows LCID could not be
read from the
Returns true when the signature is valid when the is a .
It will return null when the signature is invalid or the has another
Returns the name of the person who signed the when the is a
. It will return null when the signature is invalid or the
has another
Returns the date and time when the has been signed when the is a
. It will return null when the signature is invalid or the
has another
Returns the certificate that has been used to sign the when the is a
. It will return null when the signature is invalid or the
has another
Returns information about who has received this message. This information is only
set when a message has been received and when the message provider stamped this
information into this message. Null when not available.
Returns the index of the conversation. When not available null is returned
Returns the topic of the conversation. When not available null is returned
Returns the size of the message. When not available null is returned
Initializes a new instance of the class from a msg file.
The msg file to load
FileAcces mode, default is Read
Initializes a new instance of the class from a containing an IStorage.
The containing an IStorage.
FileAcces mode, default is Read
Initializes a new instance of the class on the specified .
The storage to create the on.
The name of the that contains this message
Try's to read the E-mail transport headers. They are only there when a msg file has been
sent over the internet. When a message stays inside an Exchange server there are not any headers
Processes sub storages on the specified storage to capture attachment and recipient data.
The storage to check for attachment and recipient data.
Processes the signed content
Load's and parses a signed message. The signed message should be in an attachment called smime.p7m
Load's and parses a signed message
Loads the attachment data out of the specified storage.
The attachment storage.
The name of the
Removes the given from the object.
message.DeleteAttachment(message.Attachments[0]);
Raised when it is not possible to remove the or from
the
Copies the given to the given
Saves this to the specified
Name of the file.
Saves this to the specified
The stream to save to.
Gets the and from the
object and sets the and
Returns the E-mail sender address in RFC822 format, e.g.
"Pan, P (Peter)" <Peter.Pan@neverland.com>
Returns the E-mail sender address in a human readable format
Set to true to return the E-mail address as an html string
Set to true to convert the E-mail addresses to a hyperlink.
Will be ignored when is set to false
Returns all the recipient for the given
The to return
Returns the E-mail recipients in RFC822 format, e.g.
"Pan, P (Peter)" <Peter.Pan@neverland.com>
Selects the Recipient type to retrieve
Returns the E-mail recipients in a human readable format
Selects the Recipient type to retrieve
Set to true to return the E-mail address as an html string
Set to true to convert the E-mail addresses to hyperlinks.
Will be ignored when is set to false
Returns the attachments names as a comma seperated string
This class contains information about the person that has received this message
Returns the address type (e.g. SMTP)
Returns the E-mail address, null when not available
Returns the display name, null when not available
Initializes a new instance of the class.
Class used to contain To, CC and BCC recipients of a
Returns the E-mail address, null when not available
Returns the display name, null when not available
Returns the , null when not available
Returns the addresstype, null when not available
Initializes a new instance of the class.
The message.
Class used to contain the Sender of a
Returns the E-mail address
Returns the display name
Initializes a new instance of the class.
The E-mail address of the sender
The displayname of the sender
Class used to contain the representing sender of a
Returns the E-mail address
Returns the display name
Returns the addresstype, null when not available
Initializes a new instance of the class.
The E-mail address of the representing sender
The displayname of the representing sender
The address type
The statistics for all streams in the Storage associated with this instance
The statistics for all storgages in the Storage associated with this instance
Header size of the property stream in the IStorage associated with this instance
A reference to the parent message that this message may belong to
The opened compound file
The root storage associated with this instance.
Will contain all the named MAPI properties when the class that inherits the class
is a class. Otherwhise the List will be null
mapped to
Gets the top level Outlook message from a sub message at any level.
The top level outlook message.
Gets a value indicating whether this instance is the top level Outlook message.
true if this instance is the top level outlook message; otherwise, false .
The way the storage is opened
Initializes a new instance of the class from a file.
The file to load.
FileAcces mode, default is Read
Initializes a new instance of the class from a containing an IStorage.
The containing an IStorage.
FileAcces mode, default is Read
Initializes a new instance of the class on the specified .
The storage to create the on.
Releases unmanaged resources and performs other cleanup operations before the
is reclaimed by garbage collection.
Processes sub streams and storages on the specified storage.
The storage to get sub streams and storages for.
Gets the data in the specified stream as a byte array.
Returns null when the does not exists.
Name of the stream to get data for.
A byte array containg the stream data.
Gets the data in the specified stream as a string using the specifed encoding to decode the stream data.
Returns null when the does not exists.
Name of the stream to get string data for.
The encoding to decode the stream data with.
The data in the specified stream as a string.
Gets the raw value of the MAPI property.
The 4 char hexadecimal prop identifier.
The raw value of the MAPI property.
Gets the MAPI property value from a stream or storage in this storage.
The 4 char hexadecimal prop identifier.
The value of the MAPI property or null if not found.
Gets the MAPI property value from the property stream in this storage.
The 4 char hexadecimal prop identifier.
The value of the MAPI property or null if not found.
Gets the value of the MAPI property as an
The 4 char hexadecimal prop identifier.
The value of the MAPI property as a string.
Gets the value of the MAPI property as a string.
The 4 char hexadecimal prop identifier.
The value of the MAPI property as a string.
Gets the value of the MAPI property as a list of string.
The 4 char hexadecimal prop identifier.
The value of the MAPI property as a list of string.
Gets the value of the MAPI property as a integer.
The 4 char hexadecimal prop identifier.
The value of the MAPI property as a integer.
Gets the value of the MAPI property as a double.
The 4 char hexadecimal prop identifier.
The value of the MAPI property as a double.
Gets the value of the MAPI property as a datetime.
The 4 char hexadecimal prop identifier.
The value of the MAPI property as a datetime or null when not set
Gets the value of the MAPI property as a bool.
The 4 char hexadecimal prop identifier.
The value of the MAPI property as a boolean or null when not set.
Gets the value of the MAPI property as a byte array.
The 4 char hexadecimal prop identifier.
The value of the MAPI property as a byte array.
Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
Class used to contain all the task information. A task can also be added to an E-mail () when
the FollowUp flag is set.
Returns the start datetime of the , null when not available
Returns the due datetime of the , null when not available
Returns the Status of the ,
null when not available
Returns the Status of the as a string,
null when not available
Returns the estimated effort (in minutes) that is needed for task,
null when not available
Returns true when the has been completed, null when not available
Returns the estimated effort that is needed for the as a ,
null when no available
Returns the estimated effort that is needed for the as a string (e.g. 11 weeks),
null when no available
Returns the actual effort that is spent on the as a ,
null when not available
Returns the actual effort that is spent on the as a string (e.g. 11 weeks),
null when no available
Returns the owner of the , null when not available
Returns the contacts of the , null when not available
Returns the name of the company for who the task is done,
null when not available
Returns the billing information for the , null when not available
Returns the mileage that is driven to do the , null when not available
Returns the datetime when the was completed,
only set when is true.
Otherwise null
Initializes a new instance of the class.
The message.
The flag state of an message
The msg object has been flagged as completed
The msg object has been flagged and marked as a task
Used as a temporary placeholder for information about the inline attachents
Returns the rendering position for the attachmnt
Returns the name of the icon when this attachment is part of an RTF body and is
shown as an icon
Returns the name for the attachment
Returns the full name for the attachment
The type of a
Any: this property type value matches any type; a server MUST return the actual type in its response. Servers
MUST NOT return this type in response to a client request other than NspiGetIDsFromNames or the
RopGetPropertyIdsFromNamesROP request ([MS-OXCROPS] section 2.2.8.1). (PT_UNSPECIFIED)
None: This property is a placeholder. (PT_NULL)
2 bytes; a 16-bit integer (PT_I2, i2, ui2)
4 bytes; a 32-bit integer (PT_LONG, PT_I4, int, ui4)
4 bytes; a 32-bit floating point number (PT_FLOAT, PT_R4, float, r4)
8 bytes; a 64-bit floating point number (PT_DOUBLE, PT_R8, r8)
8 bytes; a 64-bit floating point number in which the whole number part represents the number of days since
December 30, 1899, and the fractional part represents the fraction of a day since midnight (PT_APPTIME)
4 bytes; a 32-bit integer encoding error information as specified in section 2.4.1. (PT_ERROR)
1 byte; restricted to 1 or 0 (PT_BOOLEAN. bool)
The property value is a Component Object Model (COM) object, as specified in section 2.11.1.5. (PT_OBJECT)
8 bytes; a 64-bit integer (PT_LONGLONG, PT_I8, i8, ui8)
8 bytes; a 64-bit integer (PT_LONGLONG, PT_I8, i8, ui8)
Variable size; a string of Unicode characters in UTF-16LE format encoding with terminating null character
(0x0000). (PT_UNICODE, string)
Variable size; a string of multibyte characters in externally specified encoding with terminating null
character (single 0 byte). (PT_STRING8) ... ANSI format
8 bytes; a 64-bit integer representing the number of 100-nanosecond intervals since January 1, 1601
(PT_SYSTIME, time, datetime, datetime.tz, datetime.rfc1123, Date, time, time.tz)
16 bytes; a GUID with Data1, Data2, and Data3 fields in little-endian format
Variable size; a COUNT field followed by that many bytes. (PT_BINARY)
Variable size; a COUNT field followed by that many PT_MV_SHORT values. (PT_MV_SHORT, PT_MV_I2, mv.i2)
Variable size; a COUNT field followed by that many PT_MV_LONG values. (PT_MV_LONG, PT_MV_I4, mv.i4)
Variable size; a COUNT field followed by that many PT_MV_FLOAT values. (PT_MV_FLOAT, PT_MV_R4, mv.float)
Variable size; a COUNT field followed by that many PT_MV_DOUBLE values. (PT_MV_DOUBLE, PT_MV_R8)
Variable size; a COUNT field followed by that many PT_MV_CURRENCY values. (PT_MV_CURRENCY, mv.fixed.14.4)
Variable size; a COUNT field followed by that many PT_MV_APPTIME values. (PT_MV_APPTIME)
Variable size; a COUNT field followed by that many PT_MV_LONGLONGvalues. (PT_MV_I8, PT_MV_I8)
Variable size; a COUNT field followed by that many PT_MV_UNICODE values. (PT_MV_UNICODE)
Variable size; a COUNT field followed by that many PT_MV_UNICODE values. (PT_MV_UNICODE)
Variable size; a COUNT field followed by that many PT_MV_STRING8 values. (PT_MV_STRING8, mv.string)
Variable size; a COUNT field followed by that many PT_MV_SYSTIME values. (PT_MV_SYSTIME)
Variable size; a COUNT field followed by that many PT_MV_CLSID values. (PT_MV_CLSID, mv.uuid)
Variable size; a COUNT field followed by that many PT_MV_BINARY values. (PT_MV_BINARY, mv.bin.hex)
Contains all MAPI related constants
Contains the SMTP address for the address book object.
Second place to search for an E-mail address
Storage prefix tag
Prefix that is placed before an attachment tag
Sub storage version 1.0 streams
Stream that contains the internet E-mail headers
The stream that contains all the MAPI properties
Contains the streams needed to perform named property mapping
The GUID stream
The property stream
The string stream
http://msdn.microsoft.com/en-us/library/ee202480%28v=exchg.80%29.aspx
Stream properties begin for header or top
Stream properties begin for attachments or recipients
There is no attachment
The PR_ATTACH_DATA_BIN property contains the attachment data
The PR_ATTACH_PATHNAME or PR_ATTACH_LONG_PATHNAME property contains a fully qualified path
identifying the attachment to recipients with access to a common file server
The PR_ATTACH_PATHNAME or PR_ATTACH_LONG_PATHNAME property contains a fully qualified path identifying the attachment
The PR_ATTACH_PATHNAME or PR_ATTACH_LONG_PATHNAME property contains a fully qualified path identifying the attachment
The attachment is a msg file
The attachment in an OLE object
The recipient is an TO E-mail address
The recipient is a CC E-mail address
The recipient is a BCC E-mail address
The recipient is a resource (e.g. a room)
The recipient is a room (uses PR_RECIPIENT_TYPE_EXE) needs Exchange 2007 or higher
E-mail follow up flag (named property)
Specifies the flag state of the message object; Not present, 1 = Completed, 2 = Flagged.
Only available from Outlook 2007 and up.
Contains the date when the task was completed. Only filled when is true.
Only available from Outlook 2007 and up.
of the task (named property)
Start date of the task (named property)
Due date of the task (named property)
True when the task is complete (named property)
The actual task effort in minutes (named property)
The estimated task effort in minutes (named property)
The complete percentage of the task (named property)
The contacts of the task (named property)
The companies for the task (named property)
The task billing information (named property)
The task mileage information (named property)
The task owner (named property)
Appointment location (named property)
Appointment reccurence type (named property)
Appointment reccurence pattern (named property)
Appointment start time (greenwich time) (named property)
Appointment end time (greenwich time) (named property)
Appointment all attendees string (named property)
Appointment to attendees string (named property)
Contains a list of all the sendable attendees who are also required attendees.
The value for each attendee is the PR_DISPLAY_NAME (PidTagDisplayName) property of the attendee’s
address book. Separate entries must be delimited by a semicolon followed by a space. This
property is not required.
Indicates whether attendees are not allowed to propose a new date/time for the meeting.
Contains a list of unsendable attendees.
This property is not required but should be set. Its format is detailed in [MS-OXOCAL].
The PidLidClientIntent property ([MS-OXPROPS] section 2.58) indicates what actions a user
has taken on a Meeting object
Instant messaging address (named property)
Home address (named property)
Work address (named property)
Other address (named property)
E-mail 1 address (named property)
E-mail 1 display name (named property
E-mail 2 address (named property)
E-mail 2 display name (named property
E-mail 3 address (named property)
E-mail 3 display name (named property)
Html (named property)
Categories (named property)
Contains the format of the Simple Mail Transport Protocol (SMTP) email address of the sending mailbox owner
Contains the Simple Mail Transport Protocol (SMTP) email address for the messaging
user who is represented by the sender
Contains the name of the last user (or creator) to change the Message object
Can contain the E-mail address of the sender (named property)
Unnamed property that may contain the SMTP email address of the sender
Contains the code page that is used in HTML when this is added in binary format
Contains the language client used to create the message.
Contains the code page that is used in the body
Indicates the code page used for PR_BODY (PidTagBody) or PR_BODY_HTML (PidTagBodyHtml) properties.
Corresponds to the message ID field as specified in [RFC2822].
The prefix for a property tag
The message types
The message type is unknown
The message is a normal E-mail
Non-delivery report for a standard E-mail (REPORT.IPM.NOTE.NDR)
Delivery receipt for a standard E-mail (REPORT.IPM.NOTE.DR)
Delivery receipt for a delayed E-mail (REPORT.IPM.NOTE.DELAYED)
Read receipt for a standard E-mail (REPORT.IPM.NOTE.IPNRN)
Non-read receipt for a standard E-mail (REPORT.IPM.NOTE.IPNNRN)
The message in an E-mail that is encrypted and can also be signed (IPM.Note.SMIME)
Non-delivery report for a Secure MIME (S/MIME) encrypted and opaque-signed E-mail (REPORT.IPM.NOTE.SMIME.NDR)
Delivery report for a Secure MIME (S/MIME) encrypted and opaque-signed E-mail (REPORT.IPM.NOTE.SMIME.DR)
The message is an E-mail that is clear signed (IPM.Note.SMIME.MultipartSigned)
The message is a secure read receipt for an E-mail (IPM.Note.Receipt.SMIME)
Non-delivery report for an S/MIME clear-signed E-mail (REPORT.IPM.NOTE.SMIME.MULTIPARTSIGNED.NDR)
Delivery receipt for an S/MIME clear-signed E-mail (REPORT.IPM.NOTE.SMIME.MULTIPARTSIGNED.DR)
The message is an E-mail that is generared signed (IPM.Note.BMA.Stub)
The message is a short message service (IPM.Note.Mobile.SMS)
The message is an appointment (IPM.Appointment)
The message is a notification for an appointment (IPM.Notification.Meeting)
The message is a schedule for an appointment (IPM.Schedule.Meeting)
The message is a request for an appointment (IPM.Schedule.Meeting.Request)
The message is a request for an appointment (REPORT.IPM.SCHEDULE.MEETING.REQUEST.NDR)
The message is a response to an appointment (IPM.Schedule.Response)
The message is a positive response to an appointment (IPM.Schedule.Resp.Pos)
Non-delivery report for a positive meeting response (accept) (REPORT.IPM.SCHEDULE.MEETING.RESP.POS.NDR)
The message is a negative response to an appointment (IPM.Schedule.Resp.Neg)
Non-delivery report for a negative meeting response (declinet) (REPORT.IPM.SCHEDULE.MEETING.RESP.NEG.NDR)
The message is a response to tentatively accept the meeting request (IPM.Schedule.Meeting.Resp.Tent)
Non-delivery report for a Tentative meeting response (REPORT.IPM.SCHEDULE.MEETING.RESP.TENT.NDR)
The message is a cancelation an appointment (IPM.Schedule.Meeting.Canceled)
Non-delivery report for a cancelled meeting notification (REPORT.IPM.SCHEDULE.MEETING.CANCELED.NDR)
The message is a contact card (IPM.Contact)
The message is a task (IPM.Task)
The message is a task request accept (IPM.TaskRequest.Accept)
The message is a task request decline (IPM.TaskRequest.Decline)
The message is a task request update (IPM.TaskRequest.Update)
The message is a sticky note (IPM.StickyNote)
The message is Cisco Unity Voice message (IPM.Note.Custom.Cisco.Unity.Voice)
IPM.NOTE.RIGHTFAX.ADV
The message is Skype for Business missed message (IPM.Note.Microsoft.Missed)
The message is a Skype for Business conversation (IPM.Note.Microsoft.Conversation)
The importancy of the message
Low
Normal
High
Pointer to a variable of type SPropValue that specifies the property value array describing the properties
for the recipient. The rgPropVals member can be NULL.
The id of the property
Returns the Property as a readable string without the streamprefix and type
Returns the Property as a readable string
The
Returns true when this property is part of a multivalue property
The property data
Returns as an integer when is set to
,
or
Raised when the is not or
Returns as a single when is set to
Raised when the is not
Returns as a single when is set to
Raised when the is not
Returns as a decimal when is set to
Raised when the is not
Returns as a datetime when is set to
or
Raised when the is not set to or
Returns as a boolean when is set to
Raised when the is not set to
Returns as a boolean when is set to
Raised when the is not set to
Returns as a string when is set to
or
Raised when the is not set to
or
Returns as a byte[] when is set to
Raised when the is not set to
Returns as a Guid when is set to
Raised when the is not set to
Converts a byte array to a decimal
The byte array
The offset to start reading
Creates this object and sets all its propertues
The id of the property
The
The property data
Set to true to indicate that this property is part of a
multivalue property
Recipient types
Recipient is unknown
The recipient is an TO E-mail address
The recipient is a CC E-mail address
The recipient is a BCC E-mail address
The recipient is a resource (e.g. a room)
The recipient is a room (uses PR_RECIPIENT_TYPE_EXE) needs Exchange 2007 or higher
Used as a placeholder for the recipients from the MSG file itself or from the "internet"
headers when this message is send outside an Exchange system
The E-mail address
The display name
Returns the addresstype, null when not available
Creates this object and sets all it's properties
The E-mail address
The display name
The address type
Class used to decompres compressed RTF
Contains the prebuf string
The lookup table used in the CRC32 calculation
Calculates the CRC32 of the given bytes.
The CRC32 calculation is similar to the standard one as demonstrated in RFC 1952,
but with the inversion (before and after the calculation) ommited.
The byte array to calculate CRC32 on
The offset within buf at which the CRC32 calculation will start
The number of bytes on which to calculate the CRC32
The CRC32 value
Returns an unsigned 32-bit value from little-endian ordered bytes.
Byte array from which byte values are taken
Offset the offset within buf from which byte values are taken
An unsigned 32-bit value as a lon
Returns an unsigned 8-bit value from a byte array.
A byte array from which byte value is taken
The offset within buf from which byte value is taken
An unsigned 8-bit value as an int
Decompresses the RTF or throws an IllegalArgumentException if src does
not contain valid compressed-RTF bytes.
Src the compressed-RTF data bytes
An array containing the decompressed byte
This class is used to convert RTF to HTML
Convert RTF to HTML
The rtf string
The status of a task
The task has not yet started
The task is in progress
The task is complete
The task is waiting on someone else
The
No type is set
X500DN
Ms mail
SMTP
Fax
Professional office system
Personal distribution list 1
Personal distribution list 2
An enumeration. This field MUST be present when the Type field
of the RecipientFlags field is set to X500DN(0x1) and MUST NOT be present otherwise.This
value specifies the display type of this address.Valid values for this field are specified in the
following table.
A messaging user
A distribution list
A forum, such as a bulletin board service or a public or shared folder
An automated agent
An Address Book object defined for a large group, such as helpdesk, accounting, coordinator, or
department
A private, personally administered distribution list
An Address Book object known to be from a foreign or remote messaging system
An integer representing the type of the object. It MUST be one of the values from the following table.
A local mail user
A distribution list
A bulletinboard or public folder
An automated mailbox
An organiztional mailbox
A private distribtion list
A remote mail user
A container
A template
One off user
Search
The PidLidAppointmentUnsendableRecipients property ([MS-OXPROPS] section 2.35) contains a list of
unsendable attendees. This property is not required but SHOULD be set
An integer that specifies the number of structures in the RecipientRow field
If this flag is b'1', a different transport is responsible for delivery to this recipient(1).
If this flag is b'1', the DisplayName (section 2.8.3.2) field is included
If this flag is b'1', the EmailAddress (section 2.8.3.2) field is included.
If this flag is b'1', this recipient (1) has a non-standard address type and the AddressType field is included.
If this flag is b'1', the SimpleDisplayName field is included.
If this flag is b'1', the value of the TransmittableDisplayName field is the same as the value of the DisplayName
field.
If this flag is b'1', the TransmittableDisplayName (section 2.8.3.2) field is included.
If this flag is b'1', the associated string properties are in Unicode with a 2-
byte terminating null character; if this flag is b'0', string properties are MBCS with a single
terminating null character, in the code page sent to the server in the EcDoConnectEx method,
as specified in [MS-OXCRPC] section 3.1.4.1, or the Connect request type 6, as specified in
[MS-OXCMAPIHTTP] section 2.2.4.1.
Returns all the recipient for the given
The to return
An array of RecipientRow structures, as specified in [MS-OXCDATA] section 2.8.3.
Each structure specifies an unsendable attendee. The RowCount field specifies the
number of structures contained in this field. For details about properties that can
be set on RecipientRow structures for Calendar objects and meeting-related objects,
see section 2.2.4.10.
See https://msdn.microsoft.com/en-us/library/ee179606(v=exchg.80).aspx
The or null when not available
The
The address prefix used
The
This field MUST be present when the field of the RecipientFlags
field is set to X500DN (0x1) and MUST NOT be present otherwise. This value specifies the X500 DN of
this recipient (1).
A distinguished name (DN), in Teletex form, of an object that is in an address book. An X500 DN can be more limited
in the size and number of relative distinguished names (RDNs) than a full DN.
This field MUST be present when the field of the RecipientFlags field is set to
PersonalDistributionList1 (0x6) or PersonalDistributionList2 (0x7). This field MUST
NOT be present otherwise. This value specifies the size of the EntryID field.
This field MUST be present when the field of the RecipientFlags field is set to
PersonalDistributionList1 (0x6) or PersonalDistributionList2 (0x7). This field MUST NOT be present otherwise. The
number of bytes in this field MUST be the same as specified in the EntryIdSize field. This array specifies the
address book EntryID structure, as specified in section 2.2.5.2, of the distribution list.
This field MUST be present when the field of the RecipientFlags field is set to
PersonalDistributionList1 (0x6) or PersonalDistributionList2 (0x7). This field MUST
NOT be present otherwise. This value specifies the size of the SearchKey field.
This field is used when the field of the RecipientFlags field is set to
PersonalDistributionList1 (0x6) or PersonalDistributionList2 (0x7). This field MUST
NOT be present otherwise. The number of bytes in this field MUST be the same as what
is specified in the SearchKeySize field and can be 0. This array specifies the search
key of the distribution list.
This field MUST be present when the field of the
RecipientsFlags field is set to NoType (0x0) and the O flag of the RecipientsFlags field
is set. This field MUST NOT be present otherwise. This string specifies the address type
of the recipient (1).
A null-terminated string. This field MUST be present when the E flag of the RecipientsFlags
field is set and MUST NOT be present otherwise. This field MUST be specified in Unicode
characters if the U flag of the RecipientsFlags field is set and in the 8-bit character set
otherwise. This string specifies the email address of the recipient (1).
This field MUST be present when the D flag of the RecipientsFlags
field is set and MUST NOT be present otherwise. This field MUST be specified in Unicode characters if the U flag of
the RecipientsFlags field is set and in the 8-bit character set otherwise. This string specifies the email address
of the recipient (1).
A null-terminated string. This field MUST be present when the I flag of the RecipientsFlags field is set and MUST
NOT be present otherwise. This field MUST be specified in Unicode characters if the U flag of the RecipientsFlags
field is set and in the 8-bit character set otherwise. This string specifies the email address of the recipient
(1).
This field MUST be present when the T flag of the RecipientsFlags field is set and MUST NOT be present otherwise.
This field MUST be specified in Unicode characters if the U flag of the RecipientsFlags field is set and in the
8-bit character set otherwise. This string specifies the email address of the recipient (1).
PropertyRow structures, as specified in section 2.8.1. The columns used for this row are those specified in
RecipientProperties.
Specifies that the recipient does support receiving rich text messages.
Creates this object and sets all it's properties
The
The
Set to true when the recipient in the
supports RTF
If this flag is b'1', the DisplayName (section 2.8.3.2) field is included
If this flag is b'1', the EmailAddress (section 2.8.3.2) field is included.
If this flag is b'1', this recipient (1) has a non-standard address type and the
AddressType field is included.
If this flag is b'1', the SimpleDisplayName field is included.
If this flag is b'1', the value of the TransmittableDisplayName
field is the same as the value of the DisplayName field.
If this flag is b'1', the TransmittableDisplayName (section 2.8.3.2)
field is included.
If this flag is b'1', the associated string properties are in Unicode with a 2-
byte terminating null character; if this flag is b'0', string properties are MBCS with a single
terminating null character, in the code page sent to the server in the EcDoConnectEx method,
as specified in [MS-OXCRPC] section 3.1.4.1, or the Connect request type 6, as specified in
[MS-OXCMAPIHTTP] section 2.2.4.1.
Interface to make Reader class COM exposable
Extract the input msg file to the given output folder
The msg file
The folder where to extract the msg file
When true then hyperlinks are generated for the To, CC, BCC and attachments
Sets the culture that needs to be used to localize the output of this class
String array containing the message body and its (inline) attachments
Get the last know error message. When the string is empty there are no errors
This class can be used to read an Outlook msg file and save the message body (in HTML or TEXT format)
and all it's attachments to an output folder.
Contains an error message when something goes wrong in the method.
This message can be retreived with the GetErrorMessage. This way we keep .NET exceptions inside
when this code is called from a COM language
Used to keep track if we already did write an empty line
Sets the culture that needs to be used to localize the output of this class.
Default the current system culture is set. When there is no localization available the
default will be used. This will be en-US.
The name of the cultere eg. nl-NL
Checks if the and is valid
Raised when the or is null or empty
Raised when the does not exists
Raised when the does not exist
Raised when the extension is not .msg or .eml
This method reads the and when the stream is supported it will do the following:
- Extract the HTML, RTF (will be converted to html) or TEXT body (in these order)
- Puts a header (with the sender, to, cc, etc... (depends on the message type) on top of the body so it looks
like if the object is printed from Outlook
- Reads all the attachents
And in the end returns everything to the output stream
The msg stream
When true hyperlinks are generated for the To, CC, BCC and attachments
This method reads the and when the file is supported it will do the following:
- Extract the HTML, RTF (will be converted to html) or TEXT body (in these order)
- Puts a header (with the sender, to, cc, etc... (depends on the message type) on top of the body so it looks
like if the object is printed from Outlook
- Reads all the attachents
And in the end writes everything to the given
The msg file
The folder where to save the extracted msg file
When true hyperlinks are generated for the To, CC, BCC and attachments
This method reads the and when the file is supported it will do the following:
- Extract the HTML, RTF (will be converted to html) or TEXT body (in these order)
- Puts a header (with the sender, to, cc, etc... (depends on the message type) on top of the body so it looks
like if the object is printed from Outlook
- Reads all the attachents
And in the end writes everything to the given
The msg file
The folder where to save the extracted msg file
When true hyperlinks are generated for the To, CC, BCC and attachments
Use this if you get the exception and
want to force this method to use a specific to parse this MSG file. This
is only used when the file is an MSG file
String array containing the full path to the message body and its attachments
Raised when the Microsoft Outlook message type is not supported
Raised when the Microsoft Outlook signed message is invalid
Raised when the or is null or empty
Raised when the does not exists
Raised when the does not exists
Extract a mail body in memory without saving data on the hard drive.
The message as a stream
When true then hyperlinks are generated for the To, CC, BCC and attachments
Content type, e.g. text/html; charset=utf-8
When true, a text/html table with information of To, CC, BCC and attachments will
be generated and inserted at the top of the text/html document
Body as string (can be html code, ...)
Extract a mail body in memory without saving data on the hard drive.
The message as a stream
When true then hyperlinks are generated for the To, CC, BCC and attachments
Content type, e.g. text/html; charset=utf-8
When true, a text/html table with information of To, CC, BCC and attachments will
be generated and inserted at the top of the text/html document
Body as string (can be html code, ...)
Method to replace the first occurence of the string with a
string
Returns the header information from the given e-mail
(not Appointments, Tasks, Contacts and Sticky notes!!)
The message
When set to true then hyperlinks are generated for To, CC and BCC
Returns the header information from the given e-mail
(not Appointments, Tasks, Contacts and Sticky notes!!)
The message
Indicates that the message has an HTML body
When set to true then hyperlinks are generated for To, CC and BCC
A list with attachments
Surrounds the String with HTML tags
Writes the start of the header
The object that is used to write a header
When true then html will be written into the otherwise text will be written
Writes a line into the header
The object that is used to write a header
When true then html will be written into the otherwise text will be written
Used to pad the label size, ignored when is true
The label text that needs to be written
The text that needs to be written after the
Writes a line into the header without Html encoding the
The object that is used to write a header
When true then html will be written into the otherwise text will be written
Used to pad the label size, ignored when is true
The label text that needs to be written
The text that needs to be written after the
Writes an empty header line
Writes the end of the header
The object that is used to write a header
When true then html will be written into the otherwise text will be written
Writes the body of the MSG E-mail to html or text and extracts all the attachments. The
result is returned as a List of strings
The folder where we need to write the output
When true then hyperlinks are generated for the To, CC, BCC and attachments
Writes the body of the MSG E-mail to html or text and extracts all the attachments. The
result is returned as a List of MemoryStream
The object
When true then hyperlinks are generated for the To, CC, BCC and attachments
Writes the body of the EML E-mail to html or text and extracts all the attachments. The
result is returned as a List of strings
The object
The folder where we need to write the output
When true then hyperlinks are generated for the To, CC, BCC and attachments
Writes the body of the MSG Appointment to html or text and extracts all the attachments. The
result is returned as a List of strings
The folder where we need to write the output
When true then hyperlinks are generated for the To, CC, BCC and attachments
Writes the task body of the MSG Task to html or text and extracts all the attachments. The
result is return as a List of strings
The folder where we need to write the output
When true then hyperlinks are generated attachments
Writes the body of the MSG Contact to html or text and extracts all the attachments. The
result is return as a List of strings
The folder where we need to write the output
When true then hyperlinks are generated for the To, CC, BCC and attachments
Writes the body of the MSG StickyNote to html or text and extracts all the attachments. The
result is return as a List of strings
The folder where we need to write the output
This method reads the body of a message object and returns it as an html body
The object
Returns true when an html body is returned, false
when the body is text based
True when the e-Mail has an HTML body
This function pre processes the Outlook MSG object, it tries to find the html (or text) body
and reads all the available objects. When an attachment is inline it tries to
map this attachment to the html body part when this is available
The object
When true then hyperlinks are generated for the To, CC, BCC and
attachments (when there is an html body)
The outputfolder where alle extracted files need to be written
Returns the filename for the html or text body
Returns true when the object did contain
an HTML body
Returns the html or text body
Returns the filename of the contact photo. This field will only
return a value when the object is a
type and the contains an object that has the
set to true, otherwise this field will always be null
Returns a list of names with the found attachment
Returns all the files that are generated after pre processing the object
This function pre processes the EML object, it tries to find the html (or text) body
and reads all the available attachment objects. When an attachment is inline it tries to
map this attachment to the html body part when this is available
The object
When true then hyperlinks are generated for the To, CC, BCC and
attachments (when there is an html body)
Returns true when the object did contain
an HTML body
Returns the html or text body
Returns a list of names with the found attachment
Returns all the attachments as a list of streams
Check for Valid Attachment
This function pre processes the EML object, it tries to find the html (or text) body
and reads all the available attachment objects. When an attachment is inline it tries to
map this attachment to the html body part when this is available
The object
When true then hyperlinks are generated for the To, CC, BCC and
attachments (when there is an html body)
The output folder where all extracted files need to be written
Returns the filename for the html or text body
Returns true when the object did contain
an HTML body
Returns the html or text body
Returns a list of names with the found attachment
Returns all the files that are generated after pre processing the object
Get the last know error message. When the string is empty there are no errors
Inject an Outlook style header into the top of the html
Content type
Rtf attribute
attribute's name
value
Initialize instance
RTF attribute list
Clone this object
Rtf boder style
Binary data buffer
Current contains validate bytes
byte array
Clear object's data
Reset current position without clear buffer
Set of get byte at special index which starts with 0
Validate bytes count
Add a byte
byte data
Add bytes
bytes
Add bytes
Bytes
Start index
Length
Get validate bytes array
bytes array
Convert bytes data to a string
string encoding
string data
Fix inner buffer so it can fit to new size of buffer
new size
Rtf color table
Get color at special index
Check color value exist when add color to list
Count the items in the color table
Get color at special index , if index out of range , return default color
index
default value
color value
Add color to list
New color value
Remove special color
color value
Get color index
color
index , if not found return -1
Clear
Write
Clone the object
The RTF keywords as constants
RTF Document format information
If this instance is created by Clone , return the parent instance
Display left border line
Display top border line
Display right border line
Display bottom border line
Border line color
Border line width
Border style
Border thicknes
Border spacing
Word wrap
Standard tab width
indent of first line in a paragraph
Indent of wholly paragraph
character spacing
line spacing
Current line spacing is multiple extractly line spacing.
Spacing before paragrah
Spacing after paragraph
Text alignment
Page break
Nest level in native rtf document
Font name
Font size
Bold style
Italic style
Underline style
Strickout style
Hidden text
Text color
Back color
Link
Superscript
Subscript
List override id
No wrap in word
Clone instance
new instance
Document information
Document title
Document subject
Document author
Document manager
Document company
Document operator
Document category
Document keywords
Document comment
Document doccomm
Document base
Total edit minutes
Document version
Document number of pages
Document number of words
Document number of characters , include whitespace
Document number of characters , exclude white space
Document inner id
Document Creation time
Document modified time
Document last print time
Document last backup time
get information specify name
name
value
set information specify name
name
value
RTF document writer
Base writer
Information about this Rtf document
Rtf font table
Rtf color table
System collectiong document's information , maby generating
font table and color table , not writting content.
How many nested groups do we have
When debug mode is turned on, raw information about the Rtf file is written
Initialize instance
Initialize instance with a text writer
Initialize instance from a file
Initialize instance from a stream
Open Rtf file from a textwriter
Open Rtf file from a file
Write rtf keyword
keyword
Write rtf keyword
Keyword is external
Write raw text
Write the style that is used by the borderline
Write the start of the document
Write the end of the document
Write start from header
Write end from header
Write start from footer
Write end from footer
Write start from paragraph
Write end of paragraph
format
end write paragraph
Write plain text
text
Write font format
font
Start write of formatted text
format
This function must assort with WriteEndString
End writing of a formatted string. WriteStartString and WriteString have to be called before this method
Write formatted string. Call WriteStartString before this method
text
format
End write string
Start write of bookmark
bookmark name
End write of bookmark
bookmark name
Write a line break
Write image
Image
Pixel width
Pixel height
Image binary data
Rtf bookmark
Name
RTF Document
This type is the root of RTF Dom tree structure
Progress event
default font name
text encoding of associate font
The default rtf encoding
Text encoding of current font
initialize instance
Following characters
Leading characters
Text encoding
Font table
Color table
Document information
Document generator
Paper width,unit twips
Paper height,unit twips
Left margin,unit twips
Top margin,unit twips
Right margin,unit twips
Bottom margin,unit twips
Landscape
Header's distance from the top of the page( Twips)
Footer's distance from the bottom of the page( twips)
Client area width,unit twips
Convert "Times new roman" to default font when parse rtf content
Default row's height, in twips.
HTML content in RTF
Raise progress event
Progress max value
Progress value
Progress message
User cancel
Load a rtf file and parse
file name
Load a rtf document from a stream and parse content
stream
Load a rtf document from a text reader and parse content
text reader
Load a rtf document from a string in rtf format and parse content
text
Parse an RTF element
Fixes invalid paragraphs
Fixes invalid dom elements
Get the last element
Complete the paragraph
Add content element
Convert a hex string to a byte array
hex string
byte array
Combine tables
The parent element
Create table
table rows
new table
Read and ignore data , until just the end of the current group, preserve the end.
Read font table
Read color table
Read document information
Read datetime
reader
datetime value
Read a rtf emb object
reader
format
rtf emb object instance
Read field
Read the following plain text in the current level
RTF reader
whether read the text in the sub level
Read the following plain text in the current level
RTF reader
whether read the text in the sub level
text
Read embedded Html content from rtf
RTF dom element (this is the most base element type)
Native level in RTF document
RTF native attribute
child elements list
The document which owned this element
Parent element
Whether element is locked , if element is lock , it can not append chidl element
Append child element
child element
index of element
Set attribute
name
value
RTF element's list
Get the last element in the list
Get the element at special index
index
element
Add element
element
index
Insert element
special index
element
Get the index of special element that starts with 0.
element
index , if not find element , then return -1
Remove element
element
Return element array
array
Document field element
Method
Instructions
Result
Rtf dom header
Header style
If the header has a content element
Footer style
If the footer has a content element
Image element
Id
Data
Data as base64 format
Scale rate at the X coordinate, in percent unit.
Scale rate at the Y coordinate , in percent unit.
Desired width
Desired height
Width
Height
Picture type
format
Rtf line element
initialize instance
RTF Dom object
Custom attributes
Type
Class name
Name
Content as byte array
Content type
Width
Height
Scaling X factor
Scaling Y factor
Result
Rtf dom page break
Initialize this instance
Rtf paragraph element
If it is generated from a template
Format
Rtf shape element
Left position
Top position
Width
Height
Z index
Shape id
Ext attribute
Rtf shape group
External attributes
Rtf table
column list
Dom table cell
Row span
Col span
Left padding
Left padding in fact
Top padding
Top padding in fact
Right padding
Right padding in fact
Bottom padding
Bottom padding in fact
Vertial alignment
Format
Allow multiline
Left position
Width
Height
Cell merged by another cell which this property specified
Initialize instance
Rtf table column
Width
Table row
Cell settings
Format
Document level
row index
Is the last row
Is header row
Height
Padding left
Top padding
Right padding
Bottom padding
Width
Rtf text element
Format
Text
Inner text
Initialize instance
RTF element container
Name
Text alignment
left
center
right
justify
Source of the picture is an EMF (enhanced metafile).
Source of the picture is a PNG.
Source of the picture is a JPEG.
ource of the picture is QuickDraw.
Source of the picture is an OS/2 metafile. The N argument identifies the metafile type. The N values are described in the \pmmetafile table further on in this section.
Source of the picture is a Windows metafile. The N argument identifies the metafile type (the default type is 1).
Source of the picture is a Windows device-independent bitmap. The N argument identifies the bitmap type, which must equal 0.
The information to be included in RTF from a Windows device-independent bitmap is the concatenation of the BITMAPINFO structure followed by the actual pixel data.
Source of the picture is a Windows device-dependent bitmap. The N argument identifies the bitmap type (must equal 0).
The information to be included in RTF from a Windows device-dependent bitmap is the result of the GetBitmapBits function.
Rtf token type
Rtf dom field method
root
keyword, etc /marginl
external keyword node , etc. /*/keyword
control
plain text
group , etc . { }
nothing
Rtf vertical alignment
top alignment
middle alignment
bottom alignment
Arabic (1, 2, 3)
Uppercase Roman numeral (I, II, III)
Lowercase Roman numeral (i, ii, iii)
Uppercase letter (A, B, C)
Lowercase letter (a, b, c)
Ordinal number (1st, 2nd, 3rd)
Cardinal text number (One, Two Three)
Ordinal text number (First, Second, Third)
Kanji numbering without the digit character (*dbnum1)
Kanji numbering with the digit character (*dbnum2)
46 phonetic double_byte katakana characters (*aiueo*dbchar)
46 phonetic double_byte katakana characters (*iroha*dbchar)
46 phonetic katakana characters in "aiueo" order (*aiueo)
46 phonetic katakana characters in "iroha" order (*iroha)
Double_byte character
Single_byte character
Kanji numbering 3 (*dbnum3)
Kanji numbering 4 (*dbnum4)
Circle numbering (*circlenum)
Double_byte Arabic numbering
Arabic with leading zero (01, 02, 03, ..., 10, 11)
Bullet (no number at all)
Korean numbering 2 (*ganada)
Korean numbering 1 (*chosung)
Chinese numbering 1 (*gb1)
Chinese numbering 2 (*gb2)
Chinese numbering 3 (*gb3)
Chinese numbering 4 (*gb4)
Chinese Zodiac numbering 1 (* zodiac1)
Chinese Zodiac numbering 2 (* zodiac2)
Chinese Zodiac numbering 3 (* zodiac3)
Taiwanese double_byte numbering 1
Taiwanese double_byte numbering 2
Taiwanese double_byte numbering 3
Taiwanese double_byte numbering 4
Chinese double_byte numbering 1
Chinese double_byte numbering 2
Chinese double_byte numbering 3
Chinese double_byte numbering 4
Korean double_byte numbering 1
Korean double_byte numbering 2
Korean double_byte numbering 3
Korean double_byte numbering 4
Hebrew non_standard decimal
Arabic Alif Ba Tah
Hebrew Biblical standard
Arabic Abjad style
No number
Font table
Get font information special index
Get font object special name
font name
font object
Get font object special font index
Font index
font object
Add font
Font name
Add font
font name
Add font
special font index
font name
Add font
Font object
Remove font
font name
Get font index special font name
font name
font index
Write font table rtf
rtf text writer
Clone object
new object
Rtf font information
Font index
font name
Charset
Encoding
Initialize instance
font index
font name
Internal encoding for ansi
Rtf raw lay
Checks if Uc value count is greater then zero
True when greater
Rtf lex
Initialize instance
reader
Peek to see what kind of token we have
TokenType
Read next token
token
Parse keyword from token
Parse text after char
Read chars until another non white space char is found
List override count
Internal Id
Rtf list table
Rtf list table item
RTF parser node
parent node
raw document which owner this node
Keyword
Whether this node has parameters
Paramter value
Child nodes
Index
node type
Previous node in parent nodes list
Next node in parent nodes list
initialize instance
Write to rtf document
RTF text writer
RTF node group
child node list
initialize instance
child node list
first child node
Get all child node deeply
contains group type node
child nodes list
Write content to rtf document
RTF text writer
Search child node with special keyword
Special keyword
Whether search deeply
Found node
Append child node
node
Remove child
node
Insert node
index
node
RTF node list
Get node by index
Get node by keyword
Get node by type
Get the node text
Get node's parameter value special keyword, if it is not found , return default value.
Keyword
Default value
Parameter value
Detect whether the node exist in this list
keyword
True or false
Get index of node in this list
node
index , if node does no in this list , return -1
Add node list range
A node list
Add node
Node
Remove node
Node
Insert node
Index
Node
Progress event handler type
sender
event arguments
Progress event arguments
Progress max value
Current value
Progress message
Cancel operation
RTF raw document
Text encoding for current associated font
Color table
Text encoding for current font
font table
document information
The owner of this document
No parent node
color table
font table
Document information
Text encoding
Current text encoding
Initialize instance
Read font table
Read color table
Read document information
Read date and time from node
Load rtf from string
Text in rtf format
Load rtf from file
file name
Load rtf from text reader
Load rtf from rtf reader
RTF text reader
Write rtf
RTF writer
Save rtf to a file
file name
Save rtf to a stream
stream
Rtf reader
Current token
The
Current token's type
Current keyword
If current token has a parameter
Current parameter
Current token is the first token in owner group
Lost token
Total of this object handle tokens
When set to true then we are parsing an RTF unicode
high - low surrogate
When is set to true
then this will containt the high surrogate value when we are
parsing the low surrogate value
Initialize instance
Initialize instance from file
Initialize instance from stream
Initialize instance from text reader
Dispose this object
Load rtf from file
spcial file name
is operation successful
Load rtf from reader
text reader
is operation successful
Load rtf from string
RTF text
is operation successful
Close the inner reader
Get next token type
Read token
token read
Read and ignore data , until just the end of the current group, preserve the end.
Name of the attribute
Value of the attribute
Add's an item to the list and returns the index
Removes an item from the list
Rtf plain text container
Owner document
Check if this container has some text
text value
Initialize instance
owner document
Append text content
Accept rtf token
RTF token
Is accept it?
Clear value
Check if buffer still contains any text
Rtf token type
Type
Key
True when the token has a param
Param value
Parent token
True when the token contains text
Some utility functions
Checks if the root element has content elemens
True when there are content elements
Rtw writer, use it to write a new Rtf document
Hex characters
Inner text writer
Text encoding
current line head
Current position
Whether output rtf code with indent style
In rtf formation , recommend do not use indent . this option just to debugger ,
in software development , use this option can genereate indented rtf code friendly to read,
but after debug , recommend clear this option and set this attribute = false.
String used to indent
Level of nested groups
Initialize instance
text writer
Initialize instance
File name
Write completed group wich one keyword
keyword
Begin write group
End write group
Write raw text
text
Write keyword
keyword
Write keyword
keyword
True if it is an external keyword
Write plain text
Text
Write plain text, with the option to automaticly add a white space character
Text
Write a white space automatic
Write binary data
Binary data
Write a byte
byte