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>
      /// Creates a new instance of MapiFileTagExt.
      /// </summary>
      public MapiFileTagExt() {
      }
  }

  /// <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