MAPI (Structures)
Last changed: -155.140.133.253

.
Summary
MAPI Structures

C# Definition:

  /// <summary>
  /// A MapiFileDesc structure contains information about a file containing a message attachment
  /// stored as a temporary file.
  ///
  /// The file can contain a static OLE object, an embedded OLE object, an embedded message,
  /// and other types of files.
  /// </summary>
  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
  public class MapiFileDesc {
    /// <summary>
    /// Reserved; must be zero.
    /// </summary>
    public uint ulReserved = 0;

    /// <summary>
    /// Bitmask of attachment flags. Flags are MAPI_OLE and MAPI_OLE_STATIC.
    ///
    /// If neither flag is set, the attachment is treated as a data file.
    /// </summary>
    public uint flFlags = 0;

    /// <summary>
    /// An integer used to indicate where in the message text to render the attachment.
    ///
    /// Attachments replace the character found at a certain position in the message text.
    /// That is, attachments replace the character in the MapiMessage structure field
    /// lpszNoteText[nPosition]. A value of – 1 (0xFFFFFFFF) means the attachment position is
    /// not indicated; the client application will have to provide a way for the user to
    /// access the attachment.
    /// </summary>
    public uint nPosition = 0xffffffff;

    /// <summary>
    /// Pointer to the fully qualified path of the attached file.
    ///
    /// This path should include the disk drive letter and directory name.
    /// </summary>
    public string lpszPathName = string.Empty;

    /// <summary>
    /// Pointer to the attachment filename seen by the recipient, which may differ from the filename in
    /// the lpszPathName member if temporary files are being used.
    ///
    /// If the lpszFileName member is empty or NULL, the filename from lpszPathName is used.
    /// </summary>
    public string lpszFileName = string.Empty;

    /// <summary>
    /// Pointer to the attachment file type, which can be represented with a MapiFileTagExt
    /// structure.
    ///
    /// A value of NULL indicates an unknown file type or a file type determined by the operating system.
    /// </summary>
    public IntPtr lpFileType = IntPtr.Zero;
  }

  /// <summary>
  /// MapiFileTagExt structure specifies a message attachment's type at its creation
  /// and its current form of encoding so that it can be restored to its original type at its destination.
  ///
  /// A MapiFileTagExt structure defines the type of an attached file for purposes such as encoding and
  /// decoding the file, choosing the correct application to launch when opening it, or any use that
  /// requires full information regarding the file type.
  ///
  /// Client applications can use information in the lpTag and lpEncoding
  /// members of this structure to determine what to do with an attachment.
  /// </summary>
  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
  public class MapiFileTagExt {
    /// <summary>
    /// Reserved; must be zero.
    /// </summary>
    public uint ulReserved = 0;

    /// <summary>
    /// The size, in bytes, of the value defined by the lpTag member.
    /// </summary>
    public uint cbTag = 0;

    /// <summary>
    /// Pointer to an X.400 object identifier indicating the type of the attachment in its original form,
    /// for example "Microsoft Excel worksheet".
    /// </summary>
    public IntPtr lpTag = IntPtr.Zero;

    /// <summary>
    /// The size, in bytes, of the value defined by the lpEncoding member.
    /// </summary>
    public uint cbEncoding = 0;

    /// <summary>
    /// Pointer to an X.400 object identifier indicating the form in which the attachment is currently
    /// encoded, for example MacBinary, UUENCODE, or binary.
    /// </summary>
    public IntPtr lpEncoding = IntPtr.Zero;
  }

  /// <summary>
  /// A MapiMessage structure contains information about a message.
  /// </summary>
  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
  public class MapiMessage {
    /// <summary>
    /// Reserved; must be zero.
    /// </summary>
    public uint ulReserved = 0;

    /// <summary>
    /// Pointer to the text string describing the message subject,
    /// typically limited to 256 characters or less.
    ///
    /// If this member is empty or NULL, the user has not entered subject text.
    /// </summary>
    public string lpszSubject = string.Empty;

    /// <summary>
    /// Pointer to a string containing the message text.
    ///
    /// If this member is empty or NULL, there is no message text.
    /// </summary>
    public string lpszNoteText = string.Empty;

    /// <summary>
    /// Pointer to a string indicating a non-IPM type of message.
    ///
    /// Client applications can select message types for their non-IPM messages.
    ///
    /// Clients that only support IPM messages can ignore the lpszMessageType member
    /// when reading messages and set it to empty or NULL when sending messages.
    /// </summary>
    public string lpszMessageType = null;

    /// <summary>
    /// Pointer to a string indicating the date when the message was received.
    ///
    /// The format is YYYY/MM/DD HH:MM, using a 24-hour clock.
    /// </summary>
    public string lpszDateReceived = DateTime.Now.ToString("yyyy/MM/dd hh:mm");

    /// <summary>
    /// Pointer to a string identifying the conversation thread to which the message belongs.
    ///
    /// Some messaging systems can ignore and not return this member.
    /// </summary>
    public string lpszConversationID = string.Empty;

    /// <summary>
    /// Bitmask of message status flags.
    ///
    /// The flags are MAPI_RECEIPT_REQUESTED , MAPI_SENT,
    /// and MAPI_UNREAD.
    /// </summary>
    public uint flFlags = 0;

    /// <summary>
    /// Pointer to a MapiRecipDesc structure containing information about the
    /// sender of the message.
    /// </summary>
    public IntPtr lpOriginator = IntPtr.Zero;

    /// <summary>
    /// The number of message recipient structures in the array pointed to by the
    /// lpRecips member.
    ///
    /// A value of zero indicates no recipients are included.
    /// </summary>
    public uint nRecipCount = 0;

    /// <summary>
    /// Pointer to an array of MapiRecipDesc structures, each containing
    /// information about a message recipient.
    /// </summary>
    public IntPtr lpRecips = IntPtr.Zero;

    /// <summary>
    /// The number of structures describing file attachments in the array pointed to by the
    /// lpFiles member.
    ///
    /// A value of zero indicates no file attachments are included.
    /// </summary>
    public uint nFileCount = 0;

    /// <summary>
    /// Pointer to an array of MapiFileDesc structures, each containing
    /// information about a file attachment.
    /// </summary>
    public IntPtr lpFiles = IntPtr.Zero;
  }

  /// <summary>
  /// A MapiRecipDesc structure contains information about a message sender or recipient.
  /// </summary>
  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
  public class MapiRecipDesc {
    /// <summary>
    /// Reserved; must be zero.
    /// </summary>
    public uint ulReserved = 0;

    /// <summary>
    /// Contains a numeric value that indicates the type of recipient.
    ///
    /// Possible values are:
    ///
    ///   Value  Constant   Meaning
    ///
    ///     0    MAPI_ORIG  Indicates the original sender of the message.
    ///     1    MAPI_TO    Indicates a primary message recipient.
    ///     2    MAPI_CC    Indicates a recipient of a message copy.
    ///     3    MAPI_BCC   Indicates a recipient of a blind copy.
    ///
    /// </summary>
    public uint ulRecipClass = MAPI_ORIG;

    /// <summary>
    /// Pointer to the display name of the message recipient or sender.
    /// </summary>
    public string lpszName = string.Empty;

    /// <summary>
    /// Optional pointer to the recipient or sender's address; this address is provider-specific message
    /// delivery data. Generally, the messaging system provides such addresses for inbound messages.
    ///
    /// For outbound messages, the lpszAddress member can point to an address entered by the user for
    /// a recipient not in an address book (that is, a custom recipient).
    ///
    /// The format of an address pointed to by the lpszAddress member is [address type][e-mail address].
    /// Examples of valid addresses are FAX:206-555-1212 and SMTP:M@X.COM.
    /// </summary>
    public string lpszAddress = string.Empty;

    /// <summary>
    /// The size, in bytes, of the entry identifier pointed to by the lpEntryID member.
    /// </summary>
    public uint ulEIDSize = 0;

    /// <summary>
    /// Pointer to an opaque entry identifier used by a messaging system service provider to identify the
    /// message recipient. Entry identifiers have meaning only for the service provider;
    /// client applications will not be able to decipher them. The messaging system uses this member
    /// to return valid entry identifiers for all recipients or senders listed in the address book.
    /// </summary>
    public IntPtr lpEntryID = IntPtr.Zero;
  }

VB Definition:

  Please add!

User-Defined Field Types:

None.

Notes:

None.

Documentation
MAPI on MSDN