MailMsgProps.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:26k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*
  2.         @doc MAILMSG PROPERTIES
  3.         @module mailmsgprops.h | MailMsg Properties for SMTP and NNTP
  4. */
  5. /*++
  6. Copyright (c) 1999  Microsoft Corporation
  7. Module Name:
  8.     mailmsgprops.h
  9. Abstract:
  10.     This module contains the definitions for the MailMsg 
  11.     Object property ID's.
  12. --*/
  13. #ifndef __MAILMSGPROPS_H__
  14. #define __MAILMSGPROPS_H__
  15. /*=======================================================================*/
  16. // These macros are used to define the tables of property ID's.
  17. #define IMMPID_START_LIST(name,start,guid)    struct __declspec(uuid(guid)) tagIMMPID_##name##_STRUCT;
  18.                                             typedef enum tagIMMPID_##name##_ENUM {
  19.                                                 IMMPID_##name##_BEFORE__ = (start)-1,
  20. #define IMMPID_END_LIST(name)                    IMMPID_##name##_AFTER__
  21.                                             } IMMPID_##name##_ENUM;
  22. /*=======================================================================*/
  23. // These are the per-message properties.
  24. IMMPID_START_LIST(MP,0x1000,"13384CF0-B3C4-11d1-AA92-00AA006BC80B")
  25.     // @const IMMPID | IMMPID_MP_RECIPIENT_LIST | 
  26.     //   *** OBSOLETE ***
  27.     IMMPID_MP_RECIPIENT_LIST,
  28.     // @const IMMPID | IMMPID_MP_CONTENT_FILE_NAME | 
  29.     //   *** OBSOLETE ***
  30.     IMMPID_MP_CONTENT_FILE_NAME,
  31.     // @const IMMPID | IMMPID_MP_SENDER_ADDRESS_SMTP | 
  32.     //  ANSI String - SMTP Address of sender
  33.     IMMPID_MP_SENDER_ADDRESS_SMTP,
  34.     // @const IMMPID | IMMPID_MP_SENDER_ADDRESS_X500 | 
  35.     //  ANSI String - X500 Address of sender
  36.     IMMPID_MP_SENDER_ADDRESS_X500,
  37.     // @const IMMPID | IMMPID_MP_SENDER_ADDRESS_X400 | 
  38.     //  String - X400 Address of sender
  39.     IMMPID_MP_SENDER_ADDRESS_X400,
  40.     // @const IMMPID | IMMPID_MP_SENDER_ADDRESS_LEGACY_EX_DN | 
  41.     //  String - Legacy DN Address of sender
  42.     IMMPID_MP_SENDER_ADDRESS_LEGACY_EX_DN,
  43.     // @const IMMPID | IMMPID_MP_DOMAIN_LIST | 
  44.     //   *** OBSOLETE ***
  45.     IMMPID_MP_DOMAIN_LIST,
  46.     // @const IMMPID | IMMPID_MP_PICKUP_FILE_NAME | 
  47.     //  ANSI String - Filename of msg file in pickup directory
  48.     IMMPID_MP_PICKUP_FILE_NAME,
  49.     // @const IMMPID | IMMPID_MP_AUTHENTICATED_USER_NAME | 
  50.     //   *** OBSOLETE ***
  51.     IMMPID_MP_AUTHENTICATED_USER_NAME,
  52.     // @const IMMPID | IMMPID_MP_CONNECTION_IP_ADDRESS | 
  53.     //  ANSI String - IP address of MTA or client that submitted this message
  54.     IMMPID_MP_CONNECTION_IP_ADDRESS,
  55.     // @const IMMPID | IMMPID_MP_HELO_DOMAIN | 
  56.     //  ANSI String - Domain name used in HELO/EHLO when message was submitted
  57.     IMMPID_MP_HELO_DOMAIN,
  58.     // @const IMMPID | IMMPID_MP_EIGHTBIT_MIME_OPTION | 
  59.     //  BOOL - TRUE if message body is 8-bit MIME
  60.     IMMPID_MP_EIGHTBIT_MIME_OPTION,
  61.     // @const IMMPID | IMMPID_MP_CHUNKING_OPTION | 
  62.     //   *** OBSOLETE ***
  63.     IMMPID_MP_CHUNKING_OPTION,
  64.     // @const IMMPID | IMMPID_MP_BINARYMIME_OPTION | 
  65.     //  BOOL - TRUE if message body is binary MIME
  66.     IMMPID_MP_BINARYMIME_OPTION,
  67.     // @const IMMPID | IMMPID_MP_REMOTE_AUTHENTICATION_TYPE | 
  68.     //   *** OBSOLETE ***
  69.     IMMPID_MP_REMOTE_AUTHENTICATION_TYPE,
  70.     // @const IMMPID | IMMPID_MP_ERROR_CODE | 
  71.     //   *** OBSOLETE ***
  72.     IMMPID_MP_ERROR_CODE,
  73.     // @const IMMPID | IMMPID_MP_DSN_ENVID_VALUE | 
  74.     //  Value of RFC1891 ENVID of submitted message
  75.     IMMPID_MP_DSN_ENVID_VALUE,
  76.     // @const IMMPID | IMMPID_MP_DSN_RET_VALUE | 
  77.     //  ANSI String of what follows ESMTP RET
  78.     IMMPID_MP_DSN_RET_VALUE,                
  79.     // @const IMMPID | IMMPID_MP_REMOTE_SERVER_DSN_CAPABLE | 
  80.     //   *** OBSOLETE ***
  81.     IMMPID_MP_REMOTE_SERVER_DSN_CAPABLE,    
  82.     // @const IMMPID | IMMPID_MP_ARRIVAL_TIME | 
  83.     //  FILETIME that message arrived in system
  84.     IMMPID_MP_ARRIVAL_TIME,
  85.     // @const IMMPID | IMMPID_MP_MESSAGE_STATUS | 
  86.     // MP_STATUS_* value describing status of message system 
  87.     IMMPID_MP_MESSAGE_STATUS,
  88.     // @const IMMPID | IMMPID_MP_EXPIRE_DELAY | 
  89.     //  FILETIME of Delay DSN Expiration
  90.     IMMPID_MP_EXPIRE_DELAY,         
  91.     // @const IMMPID | IMMPID_MP_EXPIRE_NDR | 
  92.     //  FILETIME of NDR DSN Expiration
  93.     IMMPID_MP_EXPIRE_NDR,           
  94.     // @const IMMPID | IMMPID_MP_LOCAL_EXPIRE_DELAY | 
  95.     //  FILETIME of Delay DSN Expiration for local recips
  96.     IMMPID_MP_LOCAL_EXPIRE_DELAY,   
  97.     // @const IMMPID | IMMPID_MP_LOCAL_EXPIRE_NDR | 
  98.     //  FILETIME of NDR DSN Expiration for local recips
  99.     IMMPID_MP_LOCAL_EXPIRE_NDR,     
  100.     // @const IMMPID | IMMPID_MP_ARRIVAL_FILETIME | 
  101.     //  FILETIME when message was submitted to queue
  102.     IMMPID_MP_ARRIVAL_FILETIME,     
  103.     // @const IMMPID | IMMPID_MP_HR_CAT_STATUS | 
  104.     //  HRESULT MsgCat status (ie CAT_W_SOME_UNDELIVERABLE_MSGS)
  105.     IMMPID_MP_HR_CAT_STATUS,        
  106.     // @const IMMPID | IMMPID_MP_MSG_GUID | 
  107.     //  String GUID ID which is only used if you want need to be able to replace 
  108.     //  this message with another newer version.  This property is only 
  109.     //  effective when used for a small amount of mail on the server, and is
  110.     //  best suited for versioned mail (like DS replication).
  111.     IMMPID_MP_MSG_GUID,        
  112.     // @const IMMPID | IMMPID_MP_SUPERSEDES_MSG_GUID | 
  113.     //  String GUID ID which this message superscedes.  If a message with with a 
  114.     //  IMMPID_MP_MSG_GUID equal to this property is still on the server, then
  115.     //  that message will not be sent out.
  116.     IMMPID_MP_SUPERSEDES_MSG_GUID,
  117.     // @const IMMPID | IMMPID_MP_SCANNED_FOR_CRLF_DOT_CRLF | 
  118.     //  Boolean which tells if the input was scanned for <CRLF>.<CRLF> in the msg
  119.     // body
  120.     IMMPID_MP_SCANNED_FOR_CRLF_DOT_CRLF,
  121.     // @const IMMPID | IMMPID_MP_FOUND_EMBEDDED_CRLF_DOT_CRLF | 
  122.     //  Boolean which tells if the input had any <CRLF>.<CRLF>
  123.     //
  124.     IMMPID_MP_FOUND_EMBEDDED_CRLF_DOT_CRLF, 
  125.     // @const IMMPID | IMMPID_MP_MSG_SIZE_HINT | 
  126.     //  Provides an approximate size of the message content.  Does not convert
  127.     //  message, or guarantee accuracy. For an accurate message size (but at 
  128.     //  a higher performance cost) use IMailMsgProperties::GetContentSize.
  129.     //
  130.     IMMPID_MP_MSG_SIZE_HINT, 
  131.     // @const IMMPID | IMMPID_MP_RFC822_MSG_ID | 
  132.     //  String -- RFC 822 Message Id header.
  133.     IMMPID_MP_RFC822_MSG_ID,
  134.     // @const IMMPID | IMMPID_MP_RFC822_MSG_SUBJECT | 
  135.     //  String -- RFC822 subject header
  136.     IMMPID_MP_RFC822_MSG_SUBJECT,
  137.     // @const IMMPID | IMMPID_MP_RFC822_FROM_ADDRESS | 
  138.     //  String -- RFC822 from address
  139.     IMMPID_MP_RFC822_FROM_ADDRESS,
  140.     // @const IMMPID | IMMPID_MP_RFC822_TO_ADDRESS | 
  141.     //  String -- RFC822 To address
  142.     IMMPID_MP_RFC822_TO_ADDRESS,
  143.     // @const IMMPID | IMMPID_MP_RFC822_CC_ADDRESS | 
  144.     //  String -- RFC822 Cc address
  145.     IMMPID_MP_RFC822_CC_ADDRESS,
  146.     // @const IMMPID | IMMPID_MP_RFC822_BCC_ADDRESS | 
  147.     //  String -- RFC822 Bcc address
  148.     IMMPID_MP_RFC822_BCC_ADDRESS,
  149.     // @const IMMPID | IMMPID_MP_CONNECTION_SERVER_IP_ADDRESS | 
  150.     //  String -- server IP Address
  151.     IMMPID_MP_CONNECTION_SERVER_IP_ADDRESS,
  152.     // @const IMMPID | IMMPID_MP_SERVER_NAME | 
  153.     //  String -- server name
  154.     IMMPID_MP_SERVER_NAME,
  155.     // @const IMMPID | IMMPID_MP_SERVER_VERSION | 
  156.     //  String -- server version
  157.     IMMPID_MP_SERVER_VERSION,
  158.     // @const IMMPID | IMMPID_MP_NUM_RECIPIENTS | 
  159.     //  DWORD -- number of recipients
  160.     IMMPID_MP_NUM_RECIPIENTS,
  161.     // @const IMMPID | IMMPID_MP_X_PRIORITY | 
  162.     //  DWORD -- the priority of message
  163.     IMMPID_MP_X_PRIORITY,
  164.     // @const IMMPID | IMMPID_MP_FROM_ADDRESS | 
  165.     //  String -- From: address, in form format:address 
  166.     //  (ie, smtp:foo@microsoft.com).  RFC822 address comments are stripped
  167.     IMMPID_MP_FROM_ADDRESS,
  168.     
  169.     // @const IMMPID | IMMPID_MP_SENDER_ADDRESS | 
  170.     //  String -- Sender: address, in form format:address 
  171.     //  (ie, smtp:foo@microsoft.com).  RFC822 address comments are stripped
  172.     IMMPID_MP_SENDER_ADDRESS,
  173.     // @const IMMPID | IMMPID_MP_DEFERRED_DELIVERY_FILETIME | 
  174.     //  FILETIME -- Universal time to wait until before allowing
  175.     //  message to be delivered.
  176.     IMMPID_MP_DEFERRED_DELIVERY_FILETIME,
  177.     // @const IMMPID | IMMPID_MP_SENDER_ADDRESS_OTHER | 
  178.     //  ANSI String - with the format "type:address"
  179.     IMMPID_MP_SENDER_ADDRESS_OTHER,
  180.     // @const IMMPID | IMMPID_MP_ORIGINAL_ARRIVAL_TIME | 
  181.     //  FILETIME that message arrived in first exchange system
  182.     IMMPID_MP_ORIGINAL_ARRIVAL_TIME,
  183.     // @const IMMPID | IMMPID_MP_MSG_CLASS | 
  184.     //  The Message class of the mail, e.g. syste, replication, etc...
  185.     IMMPID_MP_MSGCLASS,
  186.     // @const IMMPID | IMMPID_MP_CONTENT_TYPE | 
  187.     //  The content type of message.
  188.     //  ANSI STRING.
  189.     IMMPID_MP_CONTENT_TYPE,
  190.     //@const IMMPID | IMMPID_MP_ENCRYPTION_TYPE |
  191.     // DWORD - 0, no encryption
  192.     //         1, signed only
  193.     //         2, encrypted
  194.     IMMPID_MP_ENCRYPTION_TYPE,
  195.     //@const IMMPID | IMMPID_MP_CONNECTION_SERVER_PORT | 
  196.     // DOWRD - Port (if any) that this message was submitted on 
  197.     IMMPID_MP_CONNECTION_SERVER_PORT,
  198.     //@const IMMPID | IMMPID_MP_CLIENT_AUTH_USER | 
  199.     // ASCII STRING - Name of authenticated user
  200.     IMMPID_MP_CLIENT_AUTH_USER,
  201.     //@const IMMPID | IMMPID_MP_CLIENT_AUTH_TYPE | 
  202.     // ASCII STRING - Type of authentication used (AUTH keyword)
  203.     IMMPID_MP_CLIENT_AUTH_TYPE,
  204.     // Add new per-message properties above this line.
  205. IMMPID_END_LIST(MP)
  206. // Message classes
  207. // @const DWORD | MP_MSGCLASS_SYSTEM
  208. // for msgs of type -- system
  209. #define MP_MSGCLASS_SYSTEM       1
  210. // @const DWORD | MP_MSGCLASS_REPLICATION
  211. // for msgs of type -- replication
  212. #define MP_MSGCLASS_REPLICATION  2
  213. // @const DWORD | MP_MSGCLASS_DELIVERY_REPORT
  214. // for msgs of type -- delivery report
  215. #define MP_MSGCLASS_DELIVERY_REPORT     3
  216. // @const DWORD | MP_MSGCLASS_DELIVERY_REPORT
  217. // for msgs of type -- non-delivery report
  218. #define MP_MSGCLASS_NONDELIVERY_REPORT  4
  219. // Message status property values defined:
  220. // @const DWORD | MP_STATUS_SUCCESS | 
  221. //  Initial status of message
  222. #define MP_STATUS_SUCCESS                    0
  223. // @const DWORD | MP_STATUS_RETRY | 
  224. //  Status indicating retry.
  225. #define MP_STATUS_RETRY                      1
  226. // @const DWORD | MP_STATUS_ABORT_DELIVERY | 
  227. //  Delivery of this message should be aborted and the message deleted.
  228. #define MP_STATUS_ABORT_DELIVERY             2
  229. // @const DWORD | MP_STATUS_BAD_MAIL | 
  230. //  This message should be moved to badmail.
  231. #define MP_STATUS_BAD_MAIL                   3
  232. // @const DWORD | MP_STATUS_SUBMITTED | 
  233. //  Message has been submitted for delivery.
  234. #define MP_STATUS_SUBMITTED                  4
  235. // @const DWORD | MP_STATUS_CATEGORIZED | 
  236. //  Message has been categorized.
  237. #define MP_STATUS_CATEGORIZED                5
  238. // @const DWORD | MP_STATUS_ABANDON_DELIVERY | 
  239. //  Delivery of this message should be abandoned until the service restarts
  240. #define MP_STATUS_ABANDON_DELIVERY           6
  241. //Per recipient flags for IMMPID_RP_RECIPIENT_FLAGS
  242. // @const DWORD | RP_RECIP_FLAGS_RESERVED | 
  243. //  You should not modify / use these bits
  244. #define RP_RECIP_FLAGS_RESERVED     0x0000000F 
  245. // @const DWORD | RP_DSN_NOTIFY_SUCCESS | 
  246. //  Notify on success - set if RFC1891 NOTIFY=SUCCESS is used
  247. #define RP_DSN_NOTIFY_SUCCESS       0x01000000 
  248. // @const DWORD | RP_DSN_NOTIFY_FAILURE | 
  249. //  Notify on failure - set if RFC1891 NOTIFY=FAILURE is used
  250. #define RP_DSN_NOTIFY_FAILURE       0x02000000 
  251. // @const DWORD | RP_DSN_NOTIFY_DELAY | 
  252. //  Notify on delay - set if RFC1891 NOTIFY=DELAY is used
  253. #define RP_DSN_NOTIFY_DELAY         0x04000000 
  254. // @const DWORD | RP_DSN_NOTIFY_NEVER | 
  255. //  Never notify - set if RFC1891 NOTIFY=NEVER is used
  256. #define RP_DSN_NOTIFY_NEVER         0x08000000 
  257. // @const DWORD | RP_DSN_NOTIFY_MASK | 
  258. //  Mask of all notify parameters
  259. #define RP_DSN_NOTIFY_MASK          0x0F000000
  260. //The following flags can be used in searches, but should not be set directly
  261. // @const DWORD | RP_HANDLED | 
  262. //  Recipient has either been delivered or should not be delivered
  263. //  (this flag is provided to check status of recipient... it should never be used
  264. //  directly)
  265. #define RP_HANDLED                  0x00000010 
  266. // @const DWORD | RP_GENERAL_FAILURE | 
  267. //  some form of hard failure happend
  268. //  (this flag is provided to check status of recipient... it should never be used
  269. //  directly)
  270. #define RP_GENERAL_FAILURE          0x00000020 
  271. // @const DWORD | RP_DSN_HANDLED | 
  272. //  Final DSN has been sent (or no DSN needs to be sent)
  273. //  (this flag is provided to check status of recipient... it should never be used
  274. //  directly)
  275. #define RP_DSN_HANDLED              0x00000040 
  276. //The following constants define how a message can be RP_HANDLED
  277. // @const DWORD | RP_DELIVERED | 
  278. //  The recipient has been delivered successfully
  279. #define RP_DELIVERED                0x00000110 
  280. // @const DWORD | RP_DSN_SENT_NDR | 
  281. //  NDR (FAILED DSN) for this recipient has been sent
  282. #define RP_DSN_SENT_NDR             0x00000450 
  283. // @const DWORD | RP_FAILED | 
  284. //  Recipient has a hard failure
  285. #define RP_FAILED                   0x00000830 
  286. // @const DWORD | RP_UNRESOLVED | 
  287. //  This recipient was not resolved by categorization
  288. #define RP_UNRESOLVED               0x00001030 
  289. // @const DWORD | RP_ENPANDED | 
  290. //  ***OBSOLETE*** (replaced by RP_EXPANDED)
  291. #define RP_ENPANDED                 0x00002010 
  292. // @const DWORD | RP_EXPANDED | 
  293. //  This recipient is an expanded DL
  294. #define RP_EXPANDED                 0x00002010 
  295. // @const DWORD | RP_DSN_SENT_DELAYED | 
  296. //  At least one Delay DSN sent
  297. #define RP_DSN_SENT_DELAYED         0x00004000 
  298. // @const DWORD | RP_DSN_SENT_EXPANDED | 
  299. //  Expanded DSN has been sent
  300. #define RP_DSN_SENT_EXPANDED        0x00008040 
  301. // @const DWORD | RP_DSN_SENT_RELAYED | 
  302. //  Relayed DSN has been sent
  303. #define RP_DSN_SENT_RELAYED         0x00010040 
  304. // @const DWORD | RP_DSN_SENT_DELIVERED | 
  305. //  Delivered DSN has been sent
  306. #define RP_DSN_SENT_DELIVERED       0x00020040 
  307. // @const DWORD | RP_REMOTE_MTA_NO_DSN | 
  308. //  Remote MTA does not advertise DSN support (relay might be needed)
  309. #define RP_REMOTE_MTA_NO_DSN        0x00080000 
  310. // @const DWORD | RP_ERROR_CONTEXT_STORE | 
  311. //  Error happened in store driver
  312. #define RP_ERROR_CONTEXT_STORE      0x00100000 
  313. // @const DWORD | RP_ERROR_CONTEXT_CAT | 
  314. //  Error happened during categorization
  315. #define RP_ERROR_CONTEXT_CAT        0x00200000 
  316. // @const DWORD | RP_ERROR_CONTEXT_MTA | 
  317. //  Error happened in a MTA (eg SMTP stack)
  318. #define RP_ERROR_CONTEXT_MTA        0x00400000 
  319. // @const DWORD | RP_VOLATILE_FLAGS_MASK | 
  320. //  Flags that can be used for temp storage
  321. #define RP_VOLATILE_FLAGS_MASK      0xF0000000 
  322.                                                //while a component has access to recipients
  323.                                                //Once control of recipients is passed, value
  324.                                                //is un-defined.
  325. // @const DWORD | RP_DSN_NOTIFY_INVALID | 
  326. //  *** OBSOLETE ***
  327. #define RP_DSN_NOTIFY_INVALID       0x00000000 
  328. /*=======================================================================*/
  329. // These are the per-recipient properties.
  330. IMMPID_START_LIST(RP,0x2000,"79E82048-D320-11d1-9FF4-00C04FA37348")
  331.     // @const IMMPID | IMMPID_RP_DSN_NOTIFY_SUCCESS | 
  332.     //   *** OBSOLETE ***
  333.     IMMPID_RP_DSN_NOTIFY_SUCCESS,
  334.     // @const IMMPID | IMMPID_RP_DSN_NOTIFY_INVALID | 
  335.     //   *** OBSOLETE ***
  336.     IMMPID_RP_DSN_NOTIFY_INVALID,    
  337.     // @const IMMPID | IMMPID_RP_ADDRESS_TYPE | 
  338.     //   *** OBSOLETE ***
  339.     IMMPID_RP_ADDRESS_TYPE,            
  340.     // @const IMMPID | IMMPID_RP_ADDRESS | 
  341.     //   *** OBSOLETE ***
  342.     IMMPID_RP_ADDRESS,                
  343.     // @const IMMPID | IMMPID_RP_ADDRESS_TYPE_SMTP | 
  344.     //   *** OBSOLETE ***
  345.     IMMPID_RP_ADDRESS_TYPE_SMTP,    
  346.     // @const IMMPID | IMMPID_RP_ERROR_CODE | 
  347.     //   HRESULT status code
  348.     IMMPID_RP_ERROR_CODE,            
  349.     // @const IMMPID | IMMPID_RP_ERROR_STRING | 
  350.     //   *** OBSOLETE ***
  351.     IMMPID_RP_ERROR_STRING,            
  352.     // @const IMMPID | IMMPID_RP_DSN_NOTIFY_VALUE | 
  353.     //   *** OBSOLETE ***
  354.     IMMPID_RP_DSN_NOTIFY_VALUE,        
  355.     // @const IMMPID | IMMPID_RP_DSN_ORCPT_VALUE | 
  356.     //   ANSI string - <address type>;<address>
  357.     IMMPID_RP_DSN_ORCPT_VALUE,        
  358.     // @const IMMPID | IMMPID_RP_ADDRESS_SMTP | 
  359.     //   ANSI string - SMTP address
  360.     IMMPID_RP_ADDRESS_SMTP,            
  361.     // @const IMMPID | IMMPID_RP_ADDRESS_X400 | 
  362.     //   ANSI string - X.400 address
  363.     IMMPID_RP_ADDRESS_X400,            
  364.     // @const IMMPID | IMMPID_RP_ADDRESS_X500 | 
  365.     //   ANSI string - X.500 address
  366.     IMMPID_RP_ADDRESS_X500,            
  367.     // @const IMMPID | IMMPID_RP_LEGACY_EX_DN | 
  368.     //   ANSI string - DN for Exchange 5.5 and prev
  369.     IMMPID_RP_LEGACY_EX_DN,            
  370.     // @const IMMPID | IMMPID_RP_RECIPIENT_FLAGS | 
  371.     //   Per-recipient DSN/delivery flags. Flag constansts start with RP_.
  372.     IMMPID_RP_RECIPIENT_FLAGS,      
  373.     // @const IMMPID | IMMPID_RP_SMTP_STATUS_STRING | 
  374.     //   ANSI string - SMTP status string... if defined
  375.     IMMPID_RP_SMTP_STATUS_STRING,   
  376.                                     // *must* start with 3-digit status code
  377.     // @const IMMPID | IMMPID_RP_DSN_PRE_CAT_ADDRESS | 
  378.     //   Original address as received by MTA in
  379.     IMMPID_RP_DSN_PRE_CAT_ADDRESS,  
  380.                                     // IMMPID_RP_DSN_ORCPT_VALUE format
  381.     // @const IMMPID | IMMPID_RP_MDB_GUID | 
  382.     //   Categorizer stamps the MDB guid
  383.     IMMPID_RP_MDB_GUID,             
  384.                                     // for this recipient here
  385.     // @const IMMPID | IMMPID_RP_USER_GUID | 
  386.     //   Categorizer stamps the
  387.     IMMPID_RP_USER_GUID,            
  388.                                     // objectGUID of the user object here
  389.     // @const IMMPID | IMMPID_RP_DOMAIN | 
  390.     //   Alternate SMTP domain for categorization
  391.     IMMPID_RP_DOMAIN,            
  392.     // @const IMMPID | IMMPID_RP_ADDRESS_OTHER | 
  393.     //   ANSI string - other address type
  394.     IMMPID_RP_ADDRESS_OTHER,            
  395.     // Add new per-recipient properties above this line.
  396. IMMPID_END_LIST(RP)
  397. /*=======================================================================*/
  398. // These are per-message volatile properties - they are not persisted to
  399. // the property stream.
  400. IMMPID_START_LIST(MPV,0x3000,"CBE69706-C9BD-11d1-9FF2-00C04FA37348")
  401.     // @const IMMPID | IMMPID_MPV_STORE_DRIVER_HANDLE | 
  402.     //  Store driver context for this message.
  403.     IMMPID_MPV_STORE_DRIVER_HANDLE,
  404.     // @const IMMPID | IMMPID_MPV_MESSAGE_CREATION_FLAGS | 
  405.     //  Flags set at creation of mailmsg.
  406.     IMMPID_MPV_MESSAGE_CREATION_FLAGS,
  407.     // @const IMMPID | IMMPID_MPV_MESSAGE_OPEN_HANDLES | 
  408.     // The number of handles (property and content) open for this message.
  409.     //   0 means no handles open.
  410.     //   1 means property or content open.
  411.     //   2 means both property and content open.
  412.     IMMPID_MPV_MESSAGE_OPEN_HANDLES,
  413.     // @const IMMPID | IMMPID_MPV_TOTAL_OPEN_HANDLES | 
  414.     // The current total number of open message handles (of any type) 
  415.     // on this server. 
  416.     IMMPID_MPV_TOTAL_OPEN_HANDLES,
  417.     // @const IMMPID | IMMPID_MPV_TOTAL_OPEN_PROPERTY_STREAM_HANDLES | 
  418.     // The current total number of open property streams on this server. 
  419.     IMMPID_MPV_TOTAL_OPEN_PROPERTY_STREAM_HANDLES,
  420.     // @const IMMPID | IMMPID_MPV_TOTAL_OPEN_CONTENT_HANDLES | 
  421.     // The current total number of open content handles on this server. 
  422.     IMMPID_MPV_TOTAL_OPEN_CONTENT_HANDLES,
  423.     // Add new per-message volatile properties above this line.
  424. IMMPID_END_LIST(MPV)
  425. // This is the structure for the IMMPID_MPV_STORE_DRIVER_HANDLE property.
  426. typedef struct tagIMMP_MPV_STORE_DRIVER_HANDLE {
  427.     GUID guidSignature;    // signature of the store driver whose handle this is
  428. } IMMP_MPV_STORE_DRIVER_HANDLE;
  429. // Define message object creation flags
  430. // @const DWORD | MPV_INBOUND_CUTOFF_EXCEEDED | 
  431. //  Mailmsg configured cutoff has been exceeded... if this is an external 
  432. //  delivery attempt, we should indicate that we do not have sufficient 
  433. //  resources to accept the mail.
  434. #define MPV_INBOUND_CUTOFF_EXCEEDED            0x00000001
  435. // @const DWORD | MPV_WRITE_CONTENT |
  436. //  Indicates that the content of this message can be modified.
  437. #define MPV_WRITE_CONTENT                      0x00000002
  438. /*=======================================================================*/
  439. // These are per-recipient volatile properties - they are not persisted to
  440. // the property stream.
  441. IMMPID_START_LIST(RPV,0x4000,"79E82049-D320-11d1-9FF4-00C04FA37348")
  442.     // @const IMMPID | IMMPID_RPV_DONT_DELIVER | 
  443.     //  IMMPID_RPV_DONT_DELIVER is a boolean.  If set to TRUE, mailmsg 
  444.     //  ignores this recipient when doing WriteList() (the recipient will 
  445.     //  not exist in the new list).
  446.     IMMPID_RPV_DONT_DELIVER,
  447.     // @const IMMPID | IMMPID_RPV_NO_NAME_COLLISIONS | 
  448.     //  IMMPID_RPV_NO_NAME_COLLISIONS is a boolean.  If set to TRUE, mailmsg 
  449.     //  does not detect duplicates with this recipient on future calls to 
  450.     //  AddSecondary().
  451.     IMMPID_RPV_NO_NAME_COLLISIONS,
  452.     // Add new per-recipient volatile properties above this line.
  453. IMMPID_END_LIST(RPV)
  454. // These are defined for backwards-compatability.  They will be removed
  455. // ASAP...
  456. // @const DWORD | IMMPID_RP_DONT_DELIVER | 
  457. //   *** OBSOLETE ***
  458. #define IMMPID_RP_DONT_DELIVER            IMMPID_RPV_DONT_DELIVER
  459. // @const DWORD | IMMPID_RP_NO_NAME_COLLISIONS | 
  460. //   *** OBSOLETE ***
  461. #define IMMPID_RP_NO_NAME_COLLISIONS    IMMPID_RPV_NO_NAME_COLLISIONS
  462. /*=======================================================================*/
  463. // These are the per-message properties for NNTP
  464. IMMPID_START_LIST(NMP,0x6000,"7433a9aa-20e2-11d2-94d6-00c04fa379f1")
  465.     // @const IMMPID | IMMPID_NMP_SECONDARY_GROUPS | 
  466.     //  An array of pointers to INNTPPropertyBag objects for each of
  467.     //  the newsgroups that the article is being posted into for the
  468.     //  current driver.
  469.     IMMPID_NMP_SECONDARY_GROUPS,        
  470.     // @const IMMPID | IMMPID_NMP_SECONDARY_ARTNUM | 
  471.     //  An array of article numbers for each of the newsgroups that
  472.     //  the article is being posted into for the current driver.
  473.     IMMPID_NMP_SECONDARY_ARTNUM,
  474.     // @const IMMPID | IMMPID_NMP_PRIMARY_GROUP | 
  475.     //  A pointer to the INNTPPropertyBag object which represents the
  476.     //  primary group for the current driver.
  477.     IMMPID_NMP_PRIMARY_GROUP,
  478.     // @const IMMPID | IMMPID_NMP_PRIMARY_ARTID | 
  479.     //  The primary article number for the primary group.
  480.     IMMPID_NMP_PRIMARY_ARTID,
  481.     // @const IMMPID | IMMPID_NMP_POST_TOKEN | 
  482.     //   The HTOKEN representing the client context.
  483.     IMMPID_NMP_POST_TOKEN,                
  484.     // @const IMMPID | IMMPID_NMP_NEWSGROUP_LIST | 
  485.     //   The string of newsgroups which this article is being stored in.
  486.     IMMPID_NMP_NEWSGROUP_LIST,            
  487.     // @const IMMPID | IMMPID_NMP_HEADERS | 
  488.     //   A string containing the headers of the message.
  489.     IMMPID_NMP_HEADERS,                    
  490.     // @const IMMPID | IMMPID_NMP_NNTP_PROCESSING | 
  491.     //   Flags which describe how the message should be processed.  The 
  492.     //   possible values are: NMP_PROCESS_POST, NMP_PROCESS_CONTROL, 
  493.     //   and NMP_PROCESS_MODERATOR.  
  494.     IMMPID_NMP_NNTP_PROCESSING,            
  495.     // @const IMMPID | IMMPID_NMP_NNTP_APPROVED_HEADER | 
  496.     //   A string containing the Approved: header of the message  
  497.     IMMPID_NMP_NNTP_APPROVED_HEADER,            
  498.     // Add new per-message properties above this line.
  499. IMMPID_END_LIST(NMP)
  500. // flags for IMMPID_NMP_NNTP_PROCESSING
  501. // @const DWORD | NMP_PROCESS_POST | 
  502. //  Set this flag to allow the NNTP server to post this message.
  503. #define NMP_PROCESS_POST            0x00000001
  504. // @const DWORD | NMP_PROCESS_CONTROL | 
  505. //  Set this flag to allow the NNTP server to process control headers in this
  506. //  message.
  507. #define NMP_PROCESS_CONTROL            0x00000002
  508. // @const DWORD | NMP_PROCESS_MODERATOR | 
  509. //  Set this flag to allow the NNTP server to run this message through the
  510. //  default moderated posting path.
  511. #define NMP_PROCESS_MODERATOR        0x00000004
  512. /*=======================================================================*/
  513. // This is the starting range for user-reserved properties
  514. IMMPID_START_LIST(CPV,0x8000,"A2A76B2A-E52D-11d1-AA64-00C04FA35B82")
  515.     // @const IMMPID | IMMPID_CP_START | 
  516.     //  Start of range
  517.     IMMPID_CP_START,
  518. IMMPID_END_LIST(CPV)
  519. /*=======================================================================*/
  520. // This table collects the data about the properties so that range-
  521. // checking can be performed.  If any new property ranges are
  522. // defined, they must be added to this structure.
  523. #define IMMPID_DECLARE_ENTRY(name)    {&_uuidof(tagIMMPID_##name##_STRUCT),
  524.                                      IMMPID_##name##_BEFORE__+1,
  525.                                      IMMPID_##name##_AFTER__-1}
  526. extern const __declspec(selectany) struct tagIMMPID_GUIDLIST_ITEM {
  527.                                        const GUID *pguid;
  528.                                        DWORD dwStart;
  529.                                        DWORD dwLast;
  530.                                    } IMMPID_GUIDS[] = {IMMPID_DECLARE_ENTRY(MP),
  531.                                                        IMMPID_DECLARE_ENTRY(RP),
  532.                                                        IMMPID_DECLARE_ENTRY(MPV),
  533.                                                        IMMPID_DECLARE_ENTRY(RPV),
  534.                                                        {&GUID_NULL,0,0}};
  535. #endif // _MAILMSGPROPS_H_