修改为东南天坐标系
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,216 @@
|
||||
"""Constant definitions, mostly property ids (PIDs) and property types (PTYPs)."""
|
||||
|
||||
# -- Property IDs - These names are formed by upper-snake-casing the Microsoft name for each
|
||||
# -- property-id, dropping the "Tag" segment. E.g. "PidTagAttachSize" -> "PID_ATTACH_SIZE"
|
||||
|
||||
PID_ACCESS = 0x0FF4
|
||||
PID_ACCESS_LEVEL = 0x0FF7
|
||||
PID_ACKNOWLEDGEMENT_MODE = 0x0001
|
||||
PID_ADDRESS_BOOK_FOLDER_PATHNAME = 0x8004
|
||||
PID_ADDRESS_BOOK_HOME_MESSAGE_DATABASE = 0x8006
|
||||
PID_ADDRESS_BOOK_IS_MEMBER_OF_DISTRIBUTION_LIST = 0x8008
|
||||
PID_ADDRESS_BOOK_MANAGER_DISTINGUISHED_NAME = 0x8005
|
||||
PID_ADDRESS_BOOK_MEMBER = 0x8009
|
||||
PID_ADDRESS_TYPE = 0x3002
|
||||
PID_ALTERNATE_RECIPIENT_ALLOWED = 0x0002
|
||||
PID_ATTACHMENT_FLAGS = 0x7FFD
|
||||
PID_ATTACHMENT_HIDDEN = 0x7FFE
|
||||
PID_ATTACHMENT_LINK_ID = 0x7FFA
|
||||
PID_ATTACH_CONTENT_ID = 0x3712
|
||||
PID_ATTACH_DATA_BINARY = 0x3701
|
||||
PID_ATTACH_ENCODING = 0x3702
|
||||
PID_ATTACH_EXTENSION = 0x3703
|
||||
PID_ATTACH_FILENAME = 0x3704
|
||||
PID_ATTACH_FLAGS = 0x3714
|
||||
PID_ATTACH_LONG_FILENAME = 0x3707
|
||||
PID_ATTACH_METHOD = 0x3705
|
||||
PID_ATTACH_MIME_SEQUENCE = 0x3710
|
||||
PID_ATTACH_MIME_TAG = 0x370E
|
||||
PID_ATTACH_NUMBER = 0x0E21
|
||||
PID_ATTACH_RENDERING = 0x3709
|
||||
PID_ATTACH_RENDERING_POSITION = 0x370B
|
||||
PID_ATTACH_SIZE = 0x0E20
|
||||
PID_ATTACH_TAG = 0x370A
|
||||
PID_AUTHORIZING_USERS = 0x0003
|
||||
PID_AUTO_FORWARDED = 0x0005
|
||||
PID_AUTO_FORWARD_COMMENT = 0x0004
|
||||
PID_BODY = 0x1000
|
||||
PID_BODY_HTML = 0x1013
|
||||
PID_CHANGE_KEY = 0x65E2
|
||||
PID_CLIENT_SUBMIT_TIME = 0x0039
|
||||
PID_CONTENT_CONFIDENTIALITY_ALGORITHM_ID = 0x0006
|
||||
PID_CONTENT_CORRELATOR = 0x0007
|
||||
PID_CONTENT_IDENTIFIER = 0x0008
|
||||
PID_CONTENT_LENGTH = 0x0009
|
||||
PID_CONTENT_RETURN_REQUESTED = 0x000A
|
||||
PID_CONVERSATION_INDEX = 0x0071
|
||||
PID_CONVERSATION_INDEX_TRACKING = 0x3016
|
||||
PID_CONVERSATION_KEY = 0x000B
|
||||
PID_CONVERSATION_TOPIC = 0x0070
|
||||
PID_CONVERSION_EITS = 0x000C
|
||||
PID_CONVERSION_WITH_LOSS_PROHIBITED = 0x000D
|
||||
PID_CONVERTED_EITS = 0x000E
|
||||
PID_CREATION_TIME = 0x3007
|
||||
PID_CREATOR_ADDRESS_TYPE = 0x4022
|
||||
PID_CREATOR_EMAIL_ADDRESS = 0x4023
|
||||
PID_CREATOR_SIMPLE_DISPLAY_NAME = 0x4038
|
||||
PID_DEFERRED_DELIVERY_TIME = 0x000F
|
||||
PID_DELEGATION = 0x007E
|
||||
PID_DELETE_AFTER_SUBMIT = 0x0E01
|
||||
PID_DELIVER_TIME = 0x0010
|
||||
PID_DISCARD_REASON = 0x0011
|
||||
PID_DISCLOSURE_OF_RECIPIENTS = 0x0012
|
||||
PID_DISPLAY_BCC = 0x0E02
|
||||
PID_DISPLAY_CC = 0x0E03
|
||||
PID_DISPLAY_NAME = 0x3001
|
||||
PID_DISPLAY_TO = 0x0E04
|
||||
PID_DISTRIBUTION_LIST_EXPANSION_HISTORY = 0x0013
|
||||
PID_DISTRIBUTION_LIST_EXPANSION_PROHIBITED = 0x0014
|
||||
PID_EMAIL_ADDRESS = 0x3003
|
||||
PID_END_DATE = 0x0061
|
||||
PID_ENTRY_ID = 0x0FFF
|
||||
PID_EXCEPTION_END_TIME = 0x7FFC
|
||||
PID_EXCEPTION_START_TIME = 0x7FFB
|
||||
PID_EXPIRY_TIME = 0x0015
|
||||
PID_FLAG_STATUS = 0x1090
|
||||
PID_HAS_ATTACHMENTS = 0x0E1B
|
||||
PID_HTML = 0x1013
|
||||
PID_ICON_INDEX = 0x1080
|
||||
PID_IMPLICIT_CONVERSION_PROHIBITED = 0x0016
|
||||
PID_IMPORTANCE = 0x0017
|
||||
PID_INITIAL_DETAILS_PANE = 0x3F08
|
||||
PID_INSTANCE_KEY = 0x0FF6
|
||||
PID_INTERNET_CODEPAGE = 0x3FDE
|
||||
PID_INTERNET_MESSAGE_ID = 0x1035
|
||||
PID_INTERNET_REFERENCES = 0x1039
|
||||
PID_IN_REPLY_TO_ID = 0x1042
|
||||
PID_LAST_MODIFICATION_TIME = 0x3008
|
||||
PID_LAST_MODIFIER_NAME = 0x3FFA
|
||||
PID_LATEST_DELIVERY_TIME = 0x0019
|
||||
PID_LID_CONTACT_ITEM_DATA = 0x8007
|
||||
PID_MESSAGE_CC_ME = 0x0058
|
||||
PID_MESSAGE_CLASS = 0x001A
|
||||
PID_MESSAGE_CODEPAGE = 0x3FFD
|
||||
PID_MESSAGE_DELIVERY_ID = 0x001B
|
||||
PID_MESSAGE_DELIVERY_TIME = 0x0E06
|
||||
PID_MESSAGE_FLAGS = 0x0E07
|
||||
PID_MESSAGE_LOCALE_ID = 0x3FF1
|
||||
PID_MESSAGE_RECIPIENT_ME = 0x0059
|
||||
PID_MESSAGE_SECURITY_LABEL = 0x001E
|
||||
PID_MESSAGE_SIZE_EXTENDED = 0x0E08
|
||||
PID_MESSAGE_SUBMISSION_ID = 0x0047
|
||||
PID_MESSAGE_TO_ME = 0x0057
|
||||
PID_NATIVE_BODY = 0x1016
|
||||
PID_NON_RECEIPT_NOTIFICATION_REQUESTED = 0x0C06
|
||||
PID_NORMALIZED_SUBJECT = 0x0E1D
|
||||
PID_OBJECT_TYPE = 0x0FFE
|
||||
PID_OBSOLETED_MESSAGE_IDS = 0x001F
|
||||
PID_ORIGINALLY_INTENDED_RECIPIENT_NAME = 0x0020
|
||||
PID_ORIGINALLY_INTENDED_RECIP_ADDRTYPE = 0x007B
|
||||
PID_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS = 0x007C
|
||||
PID_ORIGINAL_AUTHOR_ADDRESS_TYPE = 0x0079
|
||||
PID_ORIGINAL_AUTHOR_EMAIL_ADDRESS = 0x007A
|
||||
PID_ORIGINAL_AUTHOR_ENTRY_ID = 0x004C
|
||||
PID_ORIGINAL_AUTHOR_NAME = 0x004D
|
||||
PID_ORIGINAL_DELIVERY_TIME = 0x0055
|
||||
PID_ORIGINAL_DISPLAY_BCC = 0x0072
|
||||
PID_ORIGINAL_DISPLAY_CC = 0x0073
|
||||
PID_ORIGINAL_DISPLAY_TO = 0x0074
|
||||
PID_ORIGINAL_EITS = 0x0021
|
||||
PID_ORIGINAL_MESSAGE_CLASS = 0x004B
|
||||
PID_ORIGINAL_MESSAGE_ID = 0x1046
|
||||
PID_ORIGINAL_SENDER_ADDRESS_TYPE = 0x0066
|
||||
PID_ORIGINAL_SENDER_EMAIL_ADDRESS = 0x0067
|
||||
PID_ORIGINAL_SENDER_ENTRY_ID = 0x005B
|
||||
PID_ORIGINAL_SENDER_NAME = 0x005A
|
||||
PID_ORIGINAL_SENDER_SEARCH_KEY = 0x005C
|
||||
PID_ORIGINAL_SENSITIVITY = 0x002E
|
||||
PID_ORIGINAL_SENT_REPRESENTING_ADDRESS_TYPE = 0x0068
|
||||
PID_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS = 0x0069
|
||||
PID_ORIGINAL_SENT_REPRESENTING_ENTRY_ID = 0x005E
|
||||
PID_ORIGINAL_SENT_REPRESENTING_NAME = 0x005D
|
||||
PID_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY = 0x005F
|
||||
PID_ORIGINAL_SUBJECT = 0x0049
|
||||
PID_ORIGINAL_SUBMIT_TIME = 0x004E
|
||||
PID_ORIGINATOR_CERTIFICATE = 0x0022
|
||||
PID_ORIGINATOR_DELIVERY_REPORT_REQUESTED = 0x0023
|
||||
PID_ORIGINATOR_RETURN_ADDRESS = 0x0024
|
||||
PID_ORIGIN_CHECK = 0x0027
|
||||
PID_OWNER_APPOINTMENT_ID = 0x0062
|
||||
PID_PARENT_DISPLAY = 0x0E05
|
||||
PID_PARENT_KEY = 0x0025
|
||||
PID_PREDECESSOR_CHANGE_LIST = 0x65E3
|
||||
PID_PRIORITY = 0x0026
|
||||
PID_PROOF_OF_SUBMISSION_REQUESTED = 0x0028
|
||||
PID_READ_RECEIPT_ENTRY_ID = 0x0046
|
||||
PID_READ_RECEIPT_REQUESTED = 0x0029
|
||||
PID_READ_RECEIPT_SEARCH_KEY = 0x0053
|
||||
PID_RECEIPT_TIME = 0x002A
|
||||
PID_RECEIVED_BY_ADDRESS_TYPE = 0x0075
|
||||
PID_RECEIVED_BY_EMAIL_ADDRESS = 0x0076
|
||||
PID_RECEIVED_BY_ENTRY_ID = 0x003F
|
||||
PID_RECEIVED_BY_NAME = 0x0040
|
||||
PID_RECEIVED_BY_SEARCH_KEY = 0x0051
|
||||
PID_RECEIVED_REPRESENTING_ADDRESS_TYPE = 0x0077
|
||||
PID_RECEIVED_REPRESENTING_EMAIL_ADDRESS = 0x0078
|
||||
PID_RECEIVED_REPRESENTING_ENTRY_ID = 0x0043
|
||||
PID_RECEIVED_REPRESENTING_NAME = 0x0044
|
||||
PID_RECEIVED_REPRESENTING_SEARCH_KEY = 0x0052
|
||||
PID_RECIPIENT_REASSIGNMENT_PROHIBITED = 0x002B
|
||||
PID_RECIPIENT_TYPE = 0x0C15
|
||||
PID_RECORD_KEY = 0x0FF9
|
||||
PID_REDIRECTION_HISTORY = 0x002C
|
||||
PID_REPLY_RECIPIENT_ENTRIES = 0x004F
|
||||
PID_REPLY_RECIPIENT_NAMES = 0x0050
|
||||
PID_REPLY_TIME = 0x0030
|
||||
PID_REPORT = 0x0031
|
||||
PID_REPORT_DISPOSITION = 0x0080
|
||||
PID_REPORT_DISPOSITION_MODE = 0x0081
|
||||
PID_REPORT_ENTRY_ID = 0x0045
|
||||
PID_REPORT_NAME = 0x003A
|
||||
PID_REPORT_SEARCH_KEY = 0x0054
|
||||
PID_REPORT_TIME = 0x0032
|
||||
PID_RESPONSE_REQUESTED = 0x0063
|
||||
PID_ROW_ID = 0x3000
|
||||
PID_RTF_COMPRESSED = 0x1009
|
||||
PID_RTF_IN_SYNC = 0x0E1F
|
||||
PID_SEARCH_KEY = 0x300B
|
||||
PID_SECURITY = 0x0034
|
||||
PID_SENDER_ADDRESS_TYPE = 0x0C1E
|
||||
PID_SENDER_EMAIL_ADDRESS = 0x0C1F
|
||||
PID_SENDER_ENTRY_ID = 0x0C19
|
||||
PID_SENDER_NAME = 0x0C1A
|
||||
PID_SENDER_SEARCH_KEY = 0x0C1D
|
||||
PID_SENDER_SMTP_ADDRESS = 0x5D01
|
||||
PID_SENSITIVITY = 0x0036
|
||||
PID_SENT_REPRESENTING_ADDRESS_TYPE = 0x0064
|
||||
PID_SENT_REPRESENTING_EMAIL_ADDRESS = 0x0065
|
||||
PID_SENT_REPRESENTING_ENTRY_ID = 0x0041
|
||||
PID_SENT_REPRESENTING_NAME = 0x0042
|
||||
PID_SENT_REPRESENTING_SEARCH_KEY = 0x003B
|
||||
PID_SMTP_ADDRESS = 0x39FE
|
||||
PID_START_DATE = 0x0060
|
||||
PID_STORE_SUPPORT_MASK = 0x340D
|
||||
PID_STORE_UNICODE_MASK = 0x340F
|
||||
PID_SUBJECT = 0x0037
|
||||
PID_SUBJECT_MESSAGE_ID = 0x0038
|
||||
PID_SUBJECT_PREFIX = 0x003D
|
||||
PID_TNEF_CORRELATION_KEY = 0x007F
|
||||
PID_TRANSPORT_MESSAGE_HEADERS = 0x007D
|
||||
|
||||
|
||||
# -- Property Data Types - These are detailed in the MS-OXCDATA spec --
|
||||
|
||||
PTYP_BINARY = 0x0102
|
||||
PTYP_BOOLEAN = 0x000B
|
||||
PTYP_FLOATING_32 = 0x0004
|
||||
PTYP_FLOATING_64 = 0x0005
|
||||
PTYP_GUID = 0x0048
|
||||
PTYP_INTEGER_16 = 0x0002
|
||||
PTYP_INTEGER_32 = 0x0003
|
||||
PTYP_MULTIPLE_INTEGER_32 = 0x1003
|
||||
PTYP_MULTIPLE_STRING = 0x101F
|
||||
PTYP_OBJECT = 0x000D
|
||||
PTYP_STRING = 0x001F
|
||||
PTYP_STRING8 = 0x001E
|
||||
PTYP_TIME = 0x0040
|
||||
@@ -0,0 +1,192 @@
|
||||
"""Mapping of Microsoft code-page-identifiers (ints) to Python character-encoding names.
|
||||
|
||||
Derived from the table at:
|
||||
https://learn.microsoft.com/en-us/windows/win32/intl/code-page-identifiers
|
||||
|
||||
Microsoft-supported code pages that do not have a built-in Python codec are indicated by the empty
|
||||
string. This allows a `.get()` on this mapping to distinguish between a codec that is unknown and
|
||||
one that is recognized but not supported.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from oxmsg.domain import model as m
|
||||
|
||||
|
||||
def encoding_from_codepage(codepage: int) -> str:
|
||||
"""Map `codepage` to Python character encoding like "iso-2022-jp".
|
||||
|
||||
- Raises `UnrecognizedCodePageError` when `codepage` is not a known Microsoft character
|
||||
codepage.
|
||||
- Raises `UnsupportedEncodingError` when `codepage` is recognized but Python has no builtin
|
||||
codec for that encoding.
|
||||
"""
|
||||
encoding = _CODE_PAGE_ENCODINGS.get(codepage)
|
||||
|
||||
if encoding is None:
|
||||
raise m.UnrecognizedCodePageError( # pragma: no cover
|
||||
"the code-page specified in this message is not a known Microsoft character encoding"
|
||||
)
|
||||
|
||||
if encoding == "":
|
||||
raise m.UnsupportedEncodingError( # pragma: no cover
|
||||
"the character-encoding used in this message is not supported by Python"
|
||||
)
|
||||
|
||||
return encoding
|
||||
|
||||
|
||||
_CODE_PAGE_ENCODINGS = {
|
||||
37: "IBM037", # -- IBM EBCDIC US-Canada --
|
||||
437: "IBM437", # -- OEM United States --
|
||||
500: "IBM500", # -- IBM EBCDIC International --
|
||||
708: "ASMO-708", # -- Arabic (ASMO 708) --
|
||||
709: "", # -- Arabic (ASMO-449+, BCON V4) --
|
||||
710: "", # -- Arabic - Transparent Arabic --
|
||||
720: "DOS-720", # -- Arabic (Transparent ASMO) --
|
||||
737: "cp737", # -- OEM Greek (formerly 437G) --
|
||||
775: "ibm775", # -- OEM Baltic --
|
||||
850: "ibm850", # -- OEM Multilingual Latin 1 --
|
||||
852: "ibm852", # -- OEM Latin 2 --
|
||||
855: "IBM855", # -- OEM Cyrillic (primarily Russian) --
|
||||
857: "ibm857", # -- OEM Turkish --
|
||||
858: "cp858", # -- OEM Multilingual Latin 1 + Euro symbol --
|
||||
860: "IBM860", # -- OEM Portuguese --
|
||||
861: "ibm861", # -- OEM Icelandic --
|
||||
862: "cp862", # -- OEM Hebrew --
|
||||
863: "IBM863", # -- OEM French Canadian --
|
||||
864: "IBM864", # -- OEM Arabic --
|
||||
865: "IBM865", # -- OEM Nordic --
|
||||
866: "cp866", # -- OEM Russian --
|
||||
869: "ibm869", # -- OEM Modern Greek --
|
||||
870: "cp870", # -- IBM EBCDIC Multilingual/ROECE (Latin 2) --
|
||||
874: "windows-874", # -- ANSI/OEM Thai (ISO 8859-11) --
|
||||
875: "cp875", # -- IBM EBCDIC Greek Modern --
|
||||
932: "shift_jis", # -- ANSI/OEM Japanese --
|
||||
936: "gb2312", # -- ANSI/OEM Simplified Chinese (PRC, Singapore) --
|
||||
949: "ks_c_5601-1987", # -- ANSI/OEM Korean (Unified Hangul Code) --
|
||||
950: "windows-950", # -- ANSI/OEM Traditional Chinese (Taiwan, Hong Kong SAR, PRC) --
|
||||
1026: "IBM1026", # -- IBM EBCDIC Turkish (Latin 5) --
|
||||
1047: "cp1047", # -- IBM EBCDIC Latin 1/Open System --
|
||||
1140: "cp1140", # -- IBM EBCDIC US-Canada (037 + Euro symbol) --
|
||||
1141: "cp1141", # -- IBM EBCDIC Germany (20273 + Euro symbol) --
|
||||
1142: "cp1142", # -- IBM EBCDIC Denmark-Norway (20277 + Euro symbol) --
|
||||
1143: "cp1143", # -- IBM EBCDIC Finland-Sweden (20278 + Euro symbol) --
|
||||
1144: "cp1144", # -- IBM EBCDIC Italy (20280 + Euro symbol) --
|
||||
1145: "cp1145", # -- IBM EBCDIC Latin America-Spain (20284 + Euro symbol) --
|
||||
1146: "cp1146", # -- IBM EBCDIC United Kingdom (20285 + Euro symbol) --
|
||||
1147: "cp1147", # -- IBM EBCDIC France (20297 + Euro symbol) --
|
||||
1148: "cp1148ms", # -- IBM EBCDIC International (500 + Euro symbol) --
|
||||
1149: "cp1149", # -- IBM EBCDIC Icelandic (20871 + Euro symbol) --
|
||||
1200: "utf-16-le", # -- Unicode UTF-16, little endian byte order (BMP of ISO 10646); --
|
||||
1201: "utf-16-be", # -- Unicode UTF-16, big endian byte order; --
|
||||
1250: "windows-1250", # -- ANSI Central European --
|
||||
1251: "windows-1251", # -- ANSI Cyrillic --
|
||||
1252: "windows-1252", # -- ANSI Latin 1 --
|
||||
1253: "windows-1253", # -- ANSI Greek --
|
||||
1254: "windows-1254", # -- ANSI Turkish --
|
||||
1255: "windows-1255", # -- ANSI Hebrew --
|
||||
1256: "windows-1256", # -- ANSI Arabic --
|
||||
1257: "windows-1257", # -- ANSI Baltic --
|
||||
1258: "windows-1258", # -- ANSI/OEM Vietnamese --
|
||||
1361: "Johab", # -- Korean (Johab) --
|
||||
10000: "macintosh", # -- MAC Roman; Western European (Mac) --
|
||||
10001: "x-mac-japanese", # -- Japanese (Mac) --
|
||||
10002: "", # -- (x-mac-chinesetrad) MAC Traditional Chinese (Big5) --
|
||||
10003: "x-mac-korean", # -- Korean (Mac) --
|
||||
10004: "", # -- (x-mac-arabic) Arabic (Mac) --
|
||||
10005: "", # -- (x-mac-hebrew) Hebrew (Mac) --
|
||||
10006: "x-mac-greek", # -- Greek (Mac) --
|
||||
10007: "x-mac-cyrillic", # -- Cyrillic (Mac) --
|
||||
10008: "", # -- (x-mac-chinesesimp) MAC Simplified Chinese (GB 2312) --
|
||||
10010: "", # -- (x-mac-romanian) Romanian (Mac) --
|
||||
10017: "", # -- (x-mac-ukrainian) Ukrainian (Mac) --
|
||||
10021: "", # -- (x-mac-thai) Thai (Mac) --
|
||||
10029: "x-mac-ce", # -- MAC Latin 2; Central European (Mac) --
|
||||
10079: "x-mac-icelandic", # -- Icelandic (Mac) --
|
||||
10081: "x-mac-turkish", # -- Turkish (Mac) --
|
||||
10082: "", # -- (x-mac-croatian) Croatian (Mac) --
|
||||
12000: "utf-32", # -- Unicode UTF-32, little endian byte order --
|
||||
12001: "utf-32BE", # -- Unicode UTF-32, big endian byte order --
|
||||
20000: "", # -- (x-Chinese_CNS) CNS Taiwan --
|
||||
20001: "", # -- (x-cp20001) TCA Taiwan --
|
||||
20002: "", # -- (x_Chinese-Eten) Eten Taiwan --
|
||||
20003: "", # -- (x-cp20003) IBM5550 Taiwan --
|
||||
20004: "", # -- (x-cp20004) TeleText Taiwan --
|
||||
20005: "", # -- (x-cp20005) Wang Taiwan --
|
||||
20105: "", # -- (x-IA5) IA5 (IRV International Alphabet No. 5, 7-bit) --
|
||||
20106: "", # -- (x-IA5-German) IA5 German (7-bit) --
|
||||
20107: "", # -- (x-IA5-Swedish) IA5 Swedish (7-bit) --
|
||||
20108: "", # -- (x-IA5-Norwegian) IA5 Norwegian (7-bit) --
|
||||
20127: "us-ascii", # -- US-ASCII (7-bit) --
|
||||
20261: "", # -- (x-cp20261) T.61 --
|
||||
20269: "", # -- (x-cp20269) ISO 6937 Non-Spacing Accent --
|
||||
20273: "IBM273", # -- IBM EBCDIC Germany --
|
||||
20277: "cp277", # -- IBM EBCDIC Denmark-Norway --
|
||||
20278: "cp278", # -- IBM EBCDIC Finland-Sweden --
|
||||
20280: "cp280", # -- IBM EBCDIC Italy --
|
||||
20284: "cp284", # -- IBM EBCDIC Latin America-Spain --
|
||||
20285: "cp285", # -- IBM EBCDIC United Kingdom --
|
||||
20290: "cp290", # -- IBM EBCDIC Japanese Katakana Extended --
|
||||
20297: "cp297", # -- IBM EBCDIC France --
|
||||
20420: "cp420", # -- IBM EBCDIC Arabic --
|
||||
20423: "", # -- (IBM423) IBM EBCDIC Greek --
|
||||
20424: "IBM424", # -- IBM EBCDIC Hebrew --
|
||||
20833: "cp833", # -- IBM EBCDIC Korean Extended --
|
||||
20838: "cp838", # -- IBM EBCDIC Thai --
|
||||
20866: "koi8-r", # -- Russian (KOI8-R); Cyrillic (KOI8-R) --
|
||||
20871: "cp871", # -- IBM EBCDIC Icelandic --
|
||||
20880: "", # -- (IBM880) IBM EBCDIC Cyrillic Russian --
|
||||
20905: "IBM905", # -- IBM EBCDIC Turkish --
|
||||
20924: "", # -- (IBM00924) IBM EBCDIC Latin 1/Open System (1047 + Euro symbol) --
|
||||
20932: "EUC-JP", # -- Japanese (JIS 0208-1990 and 0212-1990) --
|
||||
20936: "", # -- (x-cp20936) Simplified Chinese (GB2312) --
|
||||
20949: "", # -- (x-cp20949) Korean Wansung --
|
||||
21025: "cp1025", # -- IBM EBCDIC Cyrillic Serbian-Bulgarian --
|
||||
21027: "", # -- (deprecated) --
|
||||
21866: "koi8-u", # -- Ukrainian (KOI8-U); Cyrillic (KOI8-U) --
|
||||
28591: "iso-8859-1", # -- ISO 8859-1 Latin 1; Western European (ISO) --
|
||||
28592: "iso-8859-2", # -- ISO 8859-2 Central European; Central European (ISO) --
|
||||
28593: "iso-8859-3", # -- ISO 8859-3 Latin 3 --
|
||||
28594: "iso-8859-4", # -- ISO 8859-4 Baltic --
|
||||
28595: "iso-8859-5", # -- ISO 8859-5 Cyrillic --
|
||||
28596: "iso-8859-6", # -- ISO 8859-6 Arabic --
|
||||
28597: "iso-8859-7", # -- ISO 8859-7 Greek --
|
||||
28598: "iso-8859-8", # -- ISO 8859-8 Hebrew --
|
||||
28599: "iso-8859-9", # -- ISO 8859-9 Turkish --
|
||||
28603: "iso-8859-13", # -- ISO 8859-13 Estonian --
|
||||
28605: "iso-8859-15", # -- ISO 8859-15 Latin 9 --
|
||||
29001: "", # -- (x-Europa) Europa 3 --
|
||||
38598: "", # -- (iso-8859-8-i) ISO 8859-8 Hebrew --
|
||||
50220: "iso-2022-jp", # -- ISO 2022 Japanese with no halfwidth Katakana --
|
||||
50221: "csISO2022JP", # -- ISO 2022 Japanese with halfwidth Katakana --
|
||||
50222: "iso-2022-jp", # -- ISO 2022 Japanese JIS X 0201-1989 --
|
||||
50225: "iso-2022-kr", # -- ISO 2022 Korean --
|
||||
50227: "", # -- (x-cp50227) ISO 2022 Simplified Chinese --
|
||||
50229: "", # -- ISO 2022 Traditional Chinese --
|
||||
50930: "", # -- EBCDIC Japanese (Katakana) Extended --
|
||||
50931: "", # -- EBCDIC US-Canada and Japanese --
|
||||
50933: "", # -- EBCDIC Korean Extended and Korean --
|
||||
50935: "", # -- EBCDIC Simplified Chinese Extended and Simplified Chinese --
|
||||
50936: "", # -- EBCDIC Simplified Chinese --
|
||||
50937: "", # -- EBCDIC US-Canada and Traditional Chinese --
|
||||
50939: "", # -- EBCDIC Japanese (Latin) Extended and Japanese --
|
||||
51932: "euc-jp", # -- EUC Japanese --
|
||||
51936: "EUC-CN", # -- EUC Simplified Chinese --
|
||||
51949: "euc-kr", # -- EUC Korean --
|
||||
51950: "", # -- EUC Traditional Chinese --
|
||||
52936: "hz-gb-2312", # -- HZ-GB2312 Simplified Chinese --
|
||||
54936: "GB18030", # -- Windows XP and later: GB18030 Simplified Chinese (4 byte) --
|
||||
57002: "", # -- (x-iscii-de) ISCII Devanagari --
|
||||
57003: "", # -- (x-iscii-be) ISCII Bangla --
|
||||
57004: "", # -- (x-iscii-ta) ISCII Tamil --
|
||||
57005: "", # -- (x-iscii-te) ISCII Telugu --
|
||||
57006: "", # -- (x-iscii-as) ISCII Assamese --
|
||||
57007: "", # -- (x-iscii-or) ISCII Odia --
|
||||
57008: "", # -- (x-iscii-ka) ISCII Kannada --
|
||||
57009: "", # -- (x-iscii-ma) ISCII Malayalam --
|
||||
57010: "", # -- (x-iscii-gu) ISCII Gujarati --
|
||||
57011: "", # -- (x-iscii-pa) ISCII Punjabi --
|
||||
65000: "utf-7", # -- Unicode (UTF-7) --
|
||||
65001: "utf-8", # -- Unicode (UTF-8) --
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
"""Domain-model objects.
|
||||
|
||||
This module should have no dependencies outside the domain model. In particular, any domain model
|
||||
object should be importable anywhere in the package without risk of producing an import cycle.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import datetime as dt
|
||||
import uuid
|
||||
from typing import Iterator, Protocol
|
||||
|
||||
from oxmsg.util import lazyproperty
|
||||
|
||||
# ================================================================================================
|
||||
# EXCEPTIONS
|
||||
# ================================================================================================
|
||||
|
||||
|
||||
class UnrecognizedCodePageError(Exception):
|
||||
"""The specified code-page is not a known Microsoft encoding."""
|
||||
|
||||
|
||||
class UnsupportedEncodingError(Exception):
|
||||
"""The encoding used for this MSG object has no built-in Python codec."""
|
||||
|
||||
|
||||
# ================================================================================================
|
||||
# INTERFACES
|
||||
# ================================================================================================
|
||||
|
||||
|
||||
class PropStorageT(Protocol):
|
||||
"""The interface required of a storage object to extract the properties of that storage."""
|
||||
|
||||
@lazyproperty
|
||||
def properties_stream_bytes(self) -> bytes:
|
||||
"""Bytes of stream containing properties for the top-level object this storage represents.
|
||||
|
||||
Every storage must have exactly one such stream.
|
||||
"""
|
||||
...
|
||||
|
||||
def property_stream_bytes(self, pid: int, ptyp: int) -> bytes:
|
||||
"""The bytes of the stream for variable-length property identified by `pid`."""
|
||||
...
|
||||
|
||||
|
||||
class PropertyT(Protocol):
|
||||
"""The interface required of a property object, regardless of its type."""
|
||||
|
||||
@property
|
||||
def name(self) -> str:
|
||||
"""The Microsft name for this property, like "PidTagMessageClass"."""
|
||||
...
|
||||
|
||||
@property
|
||||
def pid(self) -> int:
|
||||
"""The property-id (PID) for this property, like 0x3701 for attachment bytes."""
|
||||
...
|
||||
|
||||
@property
|
||||
def ptyp(self) -> int:
|
||||
"""The property-type (PTYP) for this property, like 0x0102 for PtypBinary."""
|
||||
...
|
||||
|
||||
@property
|
||||
def ptyp_name(self) -> str:
|
||||
"""The Microsft name for the type of this property, like "PtypString"."""
|
||||
...
|
||||
|
||||
@lazyproperty
|
||||
def value(self) -> bool | bytes | dt.datetime | float | int | str | uuid.UUID:
|
||||
"""The value of this property, its type depending on the property."""
|
||||
...
|
||||
|
||||
|
||||
class StorageT(Protocol):
|
||||
"""Interface for a storage object."""
|
||||
|
||||
def iter_attachment_storages(self) -> Iterator[StorageT]:
|
||||
"""Generate each storage object specific to an attachment to this message."""
|
||||
...
|
||||
|
||||
def iter_recipient_storages(self) -> Iterator[StorageT]:
|
||||
"""Generate each storage object specific to a recipient of this message."""
|
||||
...
|
||||
|
||||
@lazyproperty
|
||||
def name(self) -> str:
|
||||
"""The last segment of the storage path.
|
||||
|
||||
This is the empty string for the root storage. Other storages are named is clearly specified
|
||||
ways depending on the type of top-level object they contain, e.g. attachment, recipient,
|
||||
etc.
|
||||
"""
|
||||
...
|
||||
|
||||
@property
|
||||
def path(self) -> str:
|
||||
"""String identifier for this storage; its location within the OXMSG CFB.
|
||||
|
||||
- Suitable as a unique storage identifier within the MSG file.
|
||||
- The path of the root storage is the empty string ("").
|
||||
"""
|
||||
...
|
||||
|
||||
@lazyproperty
|
||||
def properties_stream_bytes(self) -> bytes:
|
||||
"""Bytes of stream containing properties for the top-level object this storage represents.
|
||||
|
||||
Every storage must have exactly one such stream.
|
||||
"""
|
||||
...
|
||||
|
||||
def property_stream_bytes(self, pid: int, ptyp: int) -> bytes:
|
||||
"""The bytes of the stream for variable-length property identified by `pid`."""
|
||||
...
|
||||
|
||||
|
||||
class StreamT(Protocol):
|
||||
"""Interface for a stream object."""
|
||||
|
||||
@lazyproperty
|
||||
def name(self) -> str:
|
||||
"""The last segment of the stream path.
|
||||
|
||||
Each stream contains the bytes for a property. The form of a stream name is clearly
|
||||
specified in the OXMSG standard and includes both the property-id (PID) and property
|
||||
data-type (PTYP) for the property data it contains.
|
||||
"""
|
||||
...
|
||||
|
||||
@property
|
||||
def path(self) -> str:
|
||||
"""String identifier for this storage; its location within the OXMSG CFB.
|
||||
|
||||
Suitable as a unique storage identifier within the MSG file.
|
||||
"""
|
||||
...
|
||||
|
||||
@property
|
||||
def bytes_(self) -> bytes:
|
||||
"""The bytes contained in this stream."""
|
||||
...
|
||||
|
||||
|
||||
# ================================================================================================
|
||||
# MASKS
|
||||
# ================================================================================================
|
||||
|
||||
# -- AF = attachment flag maybe? Means attachment is embedding, i.e. referenced "by value" --
|
||||
AF_BY_VALUE = 0x00000001
|
||||
|
||||
STORE_UNICODE_OK = 0x00040000
|
||||
|
||||
|
||||
# ================================================================================================
|
||||
# PROPERTY STREAM HEADER OFFSETS
|
||||
# ================================================================================================
|
||||
|
||||
# -- The starting location for the 16-byte property segments within the property stream varies
|
||||
# -- depending on the storage type.
|
||||
|
||||
ATTACH_HDR_OFFSET = 8
|
||||
MSG_HDR_OFFSET = 32
|
||||
RECIP_HDR_OFFSET = 8
|
||||
@@ -0,0 +1,612 @@
|
||||
"""Provides a catalog of OXMSG properties and property types.
|
||||
|
||||
This module provides mappings from integer PID and PTYP keys to meaningful names that can also be
|
||||
used to find more detailed information on web-search.
|
||||
|
||||
In addition it is a source for property names the user can select from to reference the message
|
||||
attibutes they are interested in.
|
||||
|
||||
Also used for discovery utilities to characterize a MSG file and its properties.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import dataclasses as dc
|
||||
import datetime as dt
|
||||
|
||||
from oxmsg.domain import constants as c
|
||||
|
||||
|
||||
@dc.dataclass(frozen=True)
|
||||
class PropertyDescriptor:
|
||||
"""Describes an OXMSG property.
|
||||
|
||||
All attributes of an OXMSG object are properties, even though the body of variable-length
|
||||
properties like PID_ATTACH_FILENAME are stored in a stream.
|
||||
"""
|
||||
|
||||
pid: int
|
||||
"""The property-id. This is a 16-bit integer value specified by the MS-OXMSG standard."""
|
||||
|
||||
ms_name: str
|
||||
"""The name like "PidTagLastModificationTime" used by Microsoft for this property.
|
||||
|
||||
This is the value to search on for the specification of the property.
|
||||
"""
|
||||
|
||||
ptyp: int
|
||||
"""The property type, one of the OXMSG property types."""
|
||||
|
||||
|
||||
@dc.dataclass(frozen=True)
|
||||
class PropertyTypeDescriptor:
|
||||
"""Describes an OXMSG property data type."""
|
||||
|
||||
ptyp: int
|
||||
"""The property-type id, a 16-bit integer value specified by the MS-OXMSG standard."""
|
||||
|
||||
ms_name: str
|
||||
"""The name like "PtypInteger32" used by Microsoft for this type."""
|
||||
|
||||
python_type: type
|
||||
"""The Python type a property of this OXMSG type is converted to."""
|
||||
|
||||
|
||||
"""Mapping of property-id codes to property descriptor objects."""
|
||||
property_descriptors: dict[int, PropertyDescriptor] = {
|
||||
c.PID_ACCESS: PropertyDescriptor(c.PID_ACCESS, "PidTagAccess", c.PTYP_INTEGER_32),
|
||||
c.PID_ACCESS_LEVEL: PropertyDescriptor(
|
||||
c.PID_ACCESS_LEVEL, "PidTagAccessLevel", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_ACKNOWLEDGEMENT_MODE: PropertyDescriptor(
|
||||
c.PID_ACKNOWLEDGEMENT_MODE, "PidTagAcknowledgementMode", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_ADDRESS_BOOK_FOLDER_PATHNAME: PropertyDescriptor(
|
||||
c.PID_ADDRESS_BOOK_FOLDER_PATHNAME, "PidTagAddressBookFolderPathname", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ADDRESS_BOOK_HOME_MESSAGE_DATABASE: PropertyDescriptor(
|
||||
c.PID_ADDRESS_BOOK_HOME_MESSAGE_DATABASE,
|
||||
"PidTagAddressBookHomeMessageDatabase",
|
||||
c.PTYP_OBJECT,
|
||||
),
|
||||
c.PID_ADDRESS_BOOK_IS_MEMBER_OF_DISTRIBUTION_LIST: PropertyDescriptor(
|
||||
c.PID_ADDRESS_BOOK_IS_MEMBER_OF_DISTRIBUTION_LIST,
|
||||
"PidTagAddressBookIsMemberOfDistributionList",
|
||||
c.PTYP_OBJECT,
|
||||
),
|
||||
c.PID_ADDRESS_BOOK_MANAGER_DISTINGUISHED_NAME: PropertyDescriptor(
|
||||
c.PID_ADDRESS_BOOK_MANAGER_DISTINGUISHED_NAME,
|
||||
"PidTagAddressBookManagerDistinguishedName",
|
||||
c.PTYP_OBJECT,
|
||||
),
|
||||
c.PID_ADDRESS_BOOK_MEMBER: PropertyDescriptor(
|
||||
c.PID_ADDRESS_BOOK_MEMBER, "PidTagAddressBookMember", c.PTYP_OBJECT
|
||||
),
|
||||
c.PID_ADDRESS_TYPE: PropertyDescriptor(c.PID_ADDRESS_TYPE, "PidTagAddressType", c.PTYP_STRING),
|
||||
c.PID_ALTERNATE_RECIPIENT_ALLOWED: PropertyDescriptor(
|
||||
c.PID_ALTERNATE_RECIPIENT_ALLOWED, "PidTagAlternateRecipientAllowed", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_ATTACHMENT_FLAGS: PropertyDescriptor(
|
||||
c.PID_ATTACHMENT_FLAGS, "PidTagAttachmentFlags", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_ATTACHMENT_HIDDEN: PropertyDescriptor(
|
||||
c.PID_ATTACHMENT_HIDDEN, "PidTagAttachmentHidden", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_ATTACHMENT_LINK_ID: PropertyDescriptor(
|
||||
c.PID_ATTACHMENT_LINK_ID, "PidTagAttachmentLinkId", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_ATTACH_CONTENT_ID: PropertyDescriptor(
|
||||
c.PID_ATTACH_CONTENT_ID, "PidTagAttachContentId", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ATTACH_DATA_BINARY: PropertyDescriptor(
|
||||
c.PID_ATTACH_DATA_BINARY, "PidTagAttachDataBinary", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_ATTACH_ENCODING: PropertyDescriptor(
|
||||
c.PID_ATTACH_ENCODING, "PidTagAttachEncoding", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_ATTACH_EXTENSION: PropertyDescriptor(
|
||||
c.PID_ATTACH_EXTENSION, "PidTagAttachExtension", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ATTACH_FILENAME: PropertyDescriptor(
|
||||
c.PID_ATTACH_FILENAME, "PidTagAttachFilename", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ATTACH_FLAGS: PropertyDescriptor(
|
||||
c.PID_ATTACH_FLAGS, "PidTagAttachFlags", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_ATTACH_LONG_FILENAME: PropertyDescriptor(
|
||||
c.PID_ATTACH_LONG_FILENAME, "PidTagAttachLongFilename", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ATTACH_METHOD: PropertyDescriptor(
|
||||
c.PID_ATTACH_METHOD, "PidTagAttachMethod", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_ATTACH_MIME_SEQUENCE: PropertyDescriptor(
|
||||
c.PID_ATTACH_MIME_SEQUENCE, "PidTagAttachMimeSequence", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_ATTACH_MIME_TAG: PropertyDescriptor(
|
||||
c.PID_ATTACH_MIME_TAG, "PidTagAttachMimeTag", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ATTACH_NUMBER: PropertyDescriptor(
|
||||
c.PID_ATTACH_NUMBER, "PidTagAttachNumber", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_ATTACH_RENDERING: PropertyDescriptor(
|
||||
c.PID_ATTACH_RENDERING, "PidTagAttachRendering", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_ATTACH_RENDERING_POSITION: PropertyDescriptor(
|
||||
c.PID_ATTACH_RENDERING_POSITION, "PidTagAttachRenderingPosition", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_ATTACH_SIZE: PropertyDescriptor(c.PID_ATTACH_SIZE, "PidTagAttachSize", c.PTYP_INTEGER_32),
|
||||
c.PID_ATTACH_TAG: PropertyDescriptor(c.PID_ATTACH_TAG, "PidTagAttachTag", c.PTYP_BINARY),
|
||||
c.PID_AUTHORIZING_USERS: PropertyDescriptor(
|
||||
c.PID_AUTHORIZING_USERS, "PidTagAuthorizingUsers", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_AUTO_FORWARDED: PropertyDescriptor(
|
||||
c.PID_AUTO_FORWARDED, "PidTagAutoForwarded", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_AUTO_FORWARD_COMMENT: PropertyDescriptor(
|
||||
c.PID_AUTO_FORWARD_COMMENT, "PidTagAutoForwardComment", c.PTYP_STRING
|
||||
),
|
||||
c.PID_BODY: PropertyDescriptor(c.PID_BODY, "PidTagBody", c.PTYP_STRING),
|
||||
c.PID_CHANGE_KEY: PropertyDescriptor(c.PID_CHANGE_KEY, "PidTagChangeKey", c.PTYP_BINARY),
|
||||
c.PID_CLIENT_SUBMIT_TIME: PropertyDescriptor(
|
||||
c.PID_CLIENT_SUBMIT_TIME, "PidTagClientSubmitTime", c.PTYP_TIME
|
||||
),
|
||||
c.PID_CONTENT_CONFIDENTIALITY_ALGORITHM_ID: PropertyDescriptor(
|
||||
c.PID_CONTENT_CONFIDENTIALITY_ALGORITHM_ID,
|
||||
"PidTagContentConfidentialityAlgorithmId",
|
||||
c.PTYP_BINARY,
|
||||
),
|
||||
c.PID_CONTENT_CORRELATOR: PropertyDescriptor(
|
||||
c.PID_CONTENT_CORRELATOR, "PidTagContentCorrelator", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_CONTENT_IDENTIFIER: PropertyDescriptor(
|
||||
c.PID_CONTENT_IDENTIFIER, "PidTagContentIdentifier", c.PTYP_STRING
|
||||
),
|
||||
c.PID_CONTENT_LENGTH: PropertyDescriptor(
|
||||
c.PID_CONTENT_LENGTH, "PidTagContentLength", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_CONTENT_RETURN_REQUESTED: PropertyDescriptor(
|
||||
c.PID_CONTENT_RETURN_REQUESTED, "PidTagContentReturnRequested", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_CONVERSATION_INDEX: PropertyDescriptor(
|
||||
c.PID_CONVERSATION_INDEX, "PidTagConversationIndex", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_CONVERSATION_INDEX_TRACKING: PropertyDescriptor(
|
||||
c.PID_CONVERSATION_INDEX_TRACKING, "PidTagConversationIndexTracking", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_CONVERSATION_KEY: PropertyDescriptor(
|
||||
c.PID_CONVERSATION_KEY, "PidTagConversationKey", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_CONVERSATION_TOPIC: PropertyDescriptor(
|
||||
c.PID_CONVERSATION_TOPIC, "PidTagConversationTopic", c.PTYP_STRING
|
||||
),
|
||||
c.PID_CONVERSION_EITS: PropertyDescriptor(
|
||||
c.PID_CONVERSION_EITS, "PidTagConversionEits", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_CONVERSION_WITH_LOSS_PROHIBITED: PropertyDescriptor(
|
||||
c.PID_CONVERSION_WITH_LOSS_PROHIBITED, "PidTagConversionWithLossProhibited", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_CONVERTED_EITS: PropertyDescriptor(
|
||||
c.PID_CONVERTED_EITS, "PidTagConvertedEits", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_CREATION_TIME: PropertyDescriptor(c.PID_CREATION_TIME, "PidTagCreationTime", c.PTYP_TIME),
|
||||
c.PID_CREATOR_ADDRESS_TYPE: PropertyDescriptor(
|
||||
c.PID_CREATOR_ADDRESS_TYPE, "PidTagCreatorAddressType", c.PTYP_STRING
|
||||
),
|
||||
c.PID_CREATOR_EMAIL_ADDRESS: PropertyDescriptor(
|
||||
c.PID_CREATOR_EMAIL_ADDRESS, "PidTagCreatorEmailAddress", c.PTYP_STRING
|
||||
),
|
||||
c.PID_CREATOR_SIMPLE_DISPLAY_NAME: PropertyDescriptor(
|
||||
c.PID_CREATOR_SIMPLE_DISPLAY_NAME, "PidTagCreatorSimpleDisplayName", c.PTYP_STRING
|
||||
),
|
||||
c.PID_DEFERRED_DELIVERY_TIME: PropertyDescriptor(
|
||||
c.PID_DEFERRED_DELIVERY_TIME, "PidTagDeferredDeliveryTime", c.PTYP_TIME
|
||||
),
|
||||
c.PID_DELEGATION: PropertyDescriptor(c.PID_DELEGATION, "PidTagDelegation", c.PTYP_BINARY),
|
||||
c.PID_DELETE_AFTER_SUBMIT: PropertyDescriptor(
|
||||
c.PID_DELETE_AFTER_SUBMIT, "PidTagDeleteAfterSubmit", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_DELIVER_TIME: PropertyDescriptor(c.PID_DELIVER_TIME, "PidTagDeliverTime", c.PTYP_TIME),
|
||||
c.PID_DISCARD_REASON: PropertyDescriptor(
|
||||
c.PID_DISCARD_REASON, "PidTagDiscardReason", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_DISCLOSURE_OF_RECIPIENTS: PropertyDescriptor(
|
||||
c.PID_DISCLOSURE_OF_RECIPIENTS, "PidTagDisclosureOfRecipients", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_DISPLAY_BCC: PropertyDescriptor(c.PID_DISPLAY_BCC, "PidTagDisplayBcc", c.PTYP_STRING),
|
||||
c.PID_DISPLAY_CC: PropertyDescriptor(c.PID_DISPLAY_CC, "PidTagDisplayCc", c.PTYP_STRING),
|
||||
c.PID_DISPLAY_NAME: PropertyDescriptor(c.PID_DISPLAY_NAME, "PidTagDisplayName", c.PTYP_STRING),
|
||||
c.PID_DISPLAY_TO: PropertyDescriptor(c.PID_DISPLAY_TO, "PidTagDisplayTo", c.PTYP_STRING),
|
||||
c.PID_DISTRIBUTION_LIST_EXPANSION_HISTORY: PropertyDescriptor(
|
||||
c.PID_DISTRIBUTION_LIST_EXPANSION_HISTORY,
|
||||
"PidTagDistributionListExpansionHistory",
|
||||
c.PTYP_BINARY,
|
||||
),
|
||||
c.PID_DISTRIBUTION_LIST_EXPANSION_PROHIBITED: PropertyDescriptor(
|
||||
c.PID_DISTRIBUTION_LIST_EXPANSION_PROHIBITED,
|
||||
"PidTagDistributionListExpansionProhibited",
|
||||
c.PTYP_BOOLEAN,
|
||||
),
|
||||
c.PID_EMAIL_ADDRESS: PropertyDescriptor(
|
||||
c.PID_EMAIL_ADDRESS, "PidTagEmailAddress", c.PTYP_STRING
|
||||
),
|
||||
c.PID_END_DATE: PropertyDescriptor(c.PID_END_DATE, "PidTagEndDate", c.PTYP_TIME),
|
||||
c.PID_ENTRY_ID: PropertyDescriptor(c.PID_ENTRY_ID, "PidTagEntryId", c.PTYP_BINARY),
|
||||
c.PID_EXCEPTION_END_TIME: PropertyDescriptor(
|
||||
c.PID_EXCEPTION_END_TIME, "PidTagExceptionEndTime", c.PTYP_TIME
|
||||
),
|
||||
c.PID_EXCEPTION_START_TIME: PropertyDescriptor(
|
||||
c.PID_EXCEPTION_START_TIME, "PidTagExceptionStartTime", c.PTYP_TIME
|
||||
),
|
||||
c.PID_EXPIRY_TIME: PropertyDescriptor(c.PID_EXPIRY_TIME, "PidTagExpiryTime", c.PTYP_TIME),
|
||||
c.PID_FLAG_STATUS: PropertyDescriptor(c.PID_FLAG_STATUS, "PidTagFlagStatus", c.PTYP_INTEGER_32),
|
||||
c.PID_HAS_ATTACHMENTS: PropertyDescriptor(
|
||||
c.PID_HAS_ATTACHMENTS, "PidTagHasAttachments", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_HTML: PropertyDescriptor(c.PID_HTML, "PidTagHtml", c.PTYP_BINARY),
|
||||
c.PID_ICON_INDEX: PropertyDescriptor(c.PID_ICON_INDEX, "PidTagIconIndex", c.PTYP_INTEGER_32),
|
||||
c.PID_IMPLICIT_CONVERSION_PROHIBITED: PropertyDescriptor(
|
||||
c.PID_IMPLICIT_CONVERSION_PROHIBITED, "PidTagImplicitConversionProhibited", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_IMPORTANCE: PropertyDescriptor(c.PID_IMPORTANCE, "PidTagImportance", c.PTYP_INTEGER_32),
|
||||
c.PID_INITIAL_DETAILS_PANE: PropertyDescriptor(
|
||||
c.PID_INITIAL_DETAILS_PANE, "PidTagInitialDetailsPane", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_INSTANCE_KEY: PropertyDescriptor(c.PID_INSTANCE_KEY, "PidTagInstanceKey", c.PTYP_BINARY),
|
||||
c.PID_INTERNET_CODEPAGE: PropertyDescriptor(
|
||||
c.PID_INTERNET_CODEPAGE, "PidTagInternetCodepage", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_INTERNET_MESSAGE_ID: PropertyDescriptor(
|
||||
c.PID_INTERNET_MESSAGE_ID, "PidTagInternetMessageId", c.PTYP_STRING
|
||||
),
|
||||
c.PID_INTERNET_REFERENCES: PropertyDescriptor(
|
||||
c.PID_INTERNET_REFERENCES, "PidTagInternetReferences", c.PTYP_STRING
|
||||
),
|
||||
c.PID_IN_REPLY_TO_ID: PropertyDescriptor(
|
||||
c.PID_IN_REPLY_TO_ID, "PidTagInReplyToId", c.PTYP_STRING
|
||||
),
|
||||
c.PID_LAST_MODIFICATION_TIME: PropertyDescriptor(
|
||||
c.PID_LAST_MODIFICATION_TIME, "PidTagLastModificationTime", c.PTYP_TIME
|
||||
),
|
||||
c.PID_LAST_MODIFIER_NAME: PropertyDescriptor(
|
||||
c.PID_LAST_MODIFIER_NAME, "PidTagLastModifierName", c.PTYP_STRING
|
||||
),
|
||||
c.PID_LATEST_DELIVERY_TIME: PropertyDescriptor(
|
||||
c.PID_LATEST_DELIVERY_TIME, "PidTagLatestDeliveryTime", c.PTYP_TIME
|
||||
),
|
||||
c.PID_LID_CONTACT_ITEM_DATA: PropertyDescriptor(
|
||||
c.PID_LID_CONTACT_ITEM_DATA, "PidLidContactItemData", c.PTYP_STRING
|
||||
),
|
||||
c.PID_MESSAGE_CC_ME: PropertyDescriptor(
|
||||
c.PID_MESSAGE_CC_ME, "PidTagMessageCcMe", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_MESSAGE_CLASS: PropertyDescriptor(
|
||||
c.PID_MESSAGE_CLASS, "PidTagMessageClass", c.PTYP_STRING
|
||||
),
|
||||
c.PID_MESSAGE_DELIVERY_ID: PropertyDescriptor(
|
||||
c.PID_MESSAGE_DELIVERY_ID, "PidTagMessageDeliveryId", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_MESSAGE_DELIVERY_TIME: PropertyDescriptor(
|
||||
c.PID_MESSAGE_DELIVERY_TIME, "PidTagMessageDeliveryTime", c.PTYP_TIME
|
||||
),
|
||||
c.PID_MESSAGE_FLAGS: PropertyDescriptor(
|
||||
c.PID_MESSAGE_FLAGS, "PidTagMessageFlags", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_MESSAGE_LOCALE_ID: PropertyDescriptor(
|
||||
c.PID_MESSAGE_LOCALE_ID, "PidTagMessageLocaleId", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_MESSAGE_RECIPIENT_ME: PropertyDescriptor(
|
||||
c.PID_MESSAGE_RECIPIENT_ME, "PidTagMessageRecipientMe", c.PTYP_STRING
|
||||
),
|
||||
c.PID_MESSAGE_SECURITY_LABEL: PropertyDescriptor(
|
||||
c.PID_MESSAGE_SECURITY_LABEL, "PidTagMessageSecurityLabel", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_MESSAGE_SIZE_EXTENDED: PropertyDescriptor(
|
||||
c.PID_MESSAGE_SIZE_EXTENDED, "PidTagMessageSizeExtended", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_MESSAGE_SUBMISSION_ID: PropertyDescriptor(
|
||||
c.PID_MESSAGE_SUBMISSION_ID, "PidTagMessageSubmissionId", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_MESSAGE_TO_ME: PropertyDescriptor(
|
||||
c.PID_MESSAGE_TO_ME, "PidTagMessageToMe", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_NATIVE_BODY: PropertyDescriptor(c.PID_NATIVE_BODY, "PidTagNativeBody", c.PTYP_INTEGER_32),
|
||||
c.PID_NORMALIZED_SUBJECT: PropertyDescriptor(
|
||||
c.PID_NORMALIZED_SUBJECT, "PidTagNormalizedSubject", c.PTYP_STRING
|
||||
),
|
||||
c.PID_NON_RECEIPT_NOTIFICATION_REQUESTED: PropertyDescriptor(
|
||||
c.PID_NON_RECEIPT_NOTIFICATION_REQUESTED,
|
||||
"PidTagNonReceiptNotificationRequested",
|
||||
c.PTYP_BOOLEAN,
|
||||
),
|
||||
c.PID_OBJECT_TYPE: PropertyDescriptor(c.PID_OBJECT_TYPE, "PidTagObjectType", c.PTYP_INTEGER_32),
|
||||
c.PID_OBSOLETED_MESSAGE_IDS: PropertyDescriptor(
|
||||
c.PID_OBSOLETED_MESSAGE_IDS, "PidTagObsoletedMessageIds", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_ORIGINALLY_INTENDED_RECIPIENT_NAME: PropertyDescriptor(
|
||||
c.PID_ORIGINALLY_INTENDED_RECIPIENT_NAME,
|
||||
"PidTagOriginallyIntendedRecipientName",
|
||||
c.PTYP_BINARY,
|
||||
),
|
||||
c.PID_ORIGINALLY_INTENDED_RECIP_ADDRTYPE: PropertyDescriptor(
|
||||
c.PID_ORIGINALLY_INTENDED_RECIP_ADDRTYPE,
|
||||
"PidTagOriginallyIntendedRecipAddrtype",
|
||||
c.PTYP_STRING,
|
||||
),
|
||||
c.PID_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS: PropertyDescriptor(
|
||||
c.PID_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS,
|
||||
"PidTagOriginallyIntendedRecipEmailAddress",
|
||||
c.PTYP_STRING,
|
||||
),
|
||||
c.PID_ORIGINAL_AUTHOR_ADDRESS_TYPE: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_AUTHOR_ADDRESS_TYPE, "PidTagOriginalAuthorAddressType", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_AUTHOR_EMAIL_ADDRESS: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_AUTHOR_EMAIL_ADDRESS, "PidTagOriginalAuthorEmailAddress", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_AUTHOR_ENTRY_ID: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_AUTHOR_ENTRY_ID, "PidTagOriginalAuthorEntryId", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_ORIGINAL_AUTHOR_NAME: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_AUTHOR_NAME, "PidTagOriginalAuthorName", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_DELIVERY_TIME: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_DELIVERY_TIME, "PidTagOriginalDeliveryTime", c.PTYP_TIME
|
||||
),
|
||||
c.PID_ORIGINAL_DISPLAY_BCC: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_DISPLAY_BCC, "PidTagOriginalDisplayBcc", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_DISPLAY_CC: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_DISPLAY_CC, "PidTagOriginalDisplayCc", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_DISPLAY_TO: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_DISPLAY_TO, "PidTagOriginalDisplayTo", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_EITS: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_EITS, "PidTagOriginalEits", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_ORIGINAL_MESSAGE_CLASS: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_MESSAGE_CLASS, "PidTagOriginalMessageClass", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_MESSAGE_ID: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_MESSAGE_ID, "PidTagOriginalMessageId", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_SENDER_ADDRESS_TYPE: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SENDER_ADDRESS_TYPE, "PidTagOriginalSenderAddressType", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_SENDER_EMAIL_ADDRESS: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SENDER_EMAIL_ADDRESS, "PidTagOriginalSenderEmailAddress", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_SENDER_ENTRY_ID: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SENDER_ENTRY_ID, "PidTagOriginalSenderEntryId", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_ORIGINAL_SENDER_NAME: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SENDER_NAME, "PidTagOriginalSenderName", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_SENDER_SEARCH_KEY: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SENDER_SEARCH_KEY, "PidTagOriginalSenderSearchKey", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_ORIGINAL_SENSITIVITY: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SENSITIVITY, "PidTagOriginalSensitivity", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_ORIGINAL_SENT_REPRESENTING_ADDRESS_TYPE: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SENT_REPRESENTING_ADDRESS_TYPE,
|
||||
"PidTagOriginalSentRepresentingAddressType",
|
||||
c.PTYP_STRING,
|
||||
),
|
||||
c.PID_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS,
|
||||
"PidTagOriginalSentRepresentingEmailAddress",
|
||||
c.PTYP_STRING,
|
||||
),
|
||||
c.PID_ORIGINAL_SENT_REPRESENTING_ENTRY_ID: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SENT_REPRESENTING_ENTRY_ID,
|
||||
"PidTagOriginalSentRepresentingEntryId",
|
||||
c.PTYP_BINARY,
|
||||
),
|
||||
c.PID_ORIGINAL_SENT_REPRESENTING_NAME: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SENT_REPRESENTING_NAME, "PidTagOriginalSentRepresentingName", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY,
|
||||
"PidTagOriginalSentRepresentingSearchKey",
|
||||
c.PTYP_BINARY,
|
||||
),
|
||||
c.PID_ORIGINAL_SUBJECT: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SUBJECT, "PidTagOriginalSubject", c.PTYP_STRING
|
||||
),
|
||||
c.PID_ORIGINAL_SUBMIT_TIME: PropertyDescriptor(
|
||||
c.PID_ORIGINAL_SUBMIT_TIME, "PidTagOriginalSubmitTime", c.PTYP_TIME
|
||||
),
|
||||
c.PID_ORIGINATOR_CERTIFICATE: PropertyDescriptor(
|
||||
c.PID_ORIGINATOR_CERTIFICATE, "PidTagOriginatorCertificate", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_ORIGINATOR_DELIVERY_REPORT_REQUESTED: PropertyDescriptor(
|
||||
c.PID_ORIGINATOR_DELIVERY_REPORT_REQUESTED,
|
||||
"PidTagOriginatorDeliveryReportRequested",
|
||||
c.PTYP_BOOLEAN,
|
||||
),
|
||||
c.PID_ORIGINATOR_RETURN_ADDRESS: PropertyDescriptor(
|
||||
c.PID_ORIGINATOR_RETURN_ADDRESS, "PidTagOriginatorReturnAddress", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_ORIGIN_CHECK: PropertyDescriptor(c.PID_ORIGIN_CHECK, "PidTagOriginCheck", c.PTYP_BINARY),
|
||||
c.PID_OWNER_APPOINTMENT_ID: PropertyDescriptor(
|
||||
c.PID_OWNER_APPOINTMENT_ID, "PidTagOwnerAppointmentId", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_PARENT_DISPLAY: PropertyDescriptor(
|
||||
c.PID_PARENT_DISPLAY, "PidTagParentDisplay", c.PTYP_STRING
|
||||
),
|
||||
c.PID_PARENT_KEY: PropertyDescriptor(c.PID_PARENT_KEY, "PidTagParentKey", c.PTYP_BINARY),
|
||||
c.PID_PREDECESSOR_CHANGE_LIST: PropertyDescriptor(
|
||||
c.PID_PREDECESSOR_CHANGE_LIST, "PidTagPredecessorChangeList", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_PRIORITY: PropertyDescriptor(c.PID_PRIORITY, "PidTagPriority", c.PTYP_INTEGER_32),
|
||||
c.PID_PROOF_OF_SUBMISSION_REQUESTED: PropertyDescriptor(
|
||||
c.PID_PROOF_OF_SUBMISSION_REQUESTED, "PidTagProofOfSubmissionRequested", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_READ_RECEIPT_ENTRY_ID: PropertyDescriptor(
|
||||
c.PID_READ_RECEIPT_ENTRY_ID, "PidTagReadReceiptEntryId", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_READ_RECEIPT_REQUESTED: PropertyDescriptor(
|
||||
c.PID_READ_RECEIPT_REQUESTED, "PidTagReadReceiptRequested", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_READ_RECEIPT_SEARCH_KEY: PropertyDescriptor(
|
||||
c.PID_READ_RECEIPT_SEARCH_KEY, "PidTagReadReceiptSearchKey", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_RECEIPT_TIME: PropertyDescriptor(c.PID_RECEIPT_TIME, "PidTagReceiptTime", c.PTYP_TIME),
|
||||
c.PID_RECEIVED_BY_ADDRESS_TYPE: PropertyDescriptor(
|
||||
c.PID_RECEIVED_BY_ADDRESS_TYPE, "PidTagReceivedByAddressType", c.PTYP_STRING
|
||||
),
|
||||
c.PID_RECEIVED_BY_EMAIL_ADDRESS: PropertyDescriptor(
|
||||
c.PID_RECEIVED_BY_EMAIL_ADDRESS, "PidTagReceivedByEmailAddress", c.PTYP_STRING
|
||||
),
|
||||
c.PID_RECEIVED_BY_ENTRY_ID: PropertyDescriptor(
|
||||
c.PID_RECEIVED_BY_ENTRY_ID, "PidTagReceivedByEntryId", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_RECEIVED_BY_NAME: PropertyDescriptor(
|
||||
c.PID_RECEIVED_BY_NAME, "PidTagReceivedByName", c.PTYP_STRING
|
||||
),
|
||||
c.PID_RECEIVED_BY_SEARCH_KEY: PropertyDescriptor(
|
||||
c.PID_RECEIVED_BY_SEARCH_KEY, "PidTagReceivedBySearchKey", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_RECEIVED_REPRESENTING_ADDRESS_TYPE: PropertyDescriptor(
|
||||
c.PID_RECEIVED_REPRESENTING_ADDRESS_TYPE,
|
||||
"PidTagReceivedRepresentingAddressType",
|
||||
c.PTYP_STRING,
|
||||
),
|
||||
c.PID_RECEIVED_REPRESENTING_EMAIL_ADDRESS: PropertyDescriptor(
|
||||
c.PID_RECEIVED_REPRESENTING_EMAIL_ADDRESS,
|
||||
"PidTagReceivedRepresentingEmailAddress",
|
||||
c.PTYP_STRING,
|
||||
),
|
||||
c.PID_RECEIVED_REPRESENTING_ENTRY_ID: PropertyDescriptor(
|
||||
c.PID_RECEIVED_REPRESENTING_ENTRY_ID, "PidTagReceivedRepresentingEntryId", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_RECEIVED_REPRESENTING_NAME: PropertyDescriptor(
|
||||
c.PID_RECEIVED_REPRESENTING_NAME, "PidTagReceivedRepresentingName", c.PTYP_STRING
|
||||
),
|
||||
c.PID_RECEIVED_REPRESENTING_SEARCH_KEY: PropertyDescriptor(
|
||||
c.PID_RECEIVED_REPRESENTING_SEARCH_KEY, "PidTagReceivedRepresentingSearchKey", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_RECIPIENT_REASSIGNMENT_PROHIBITED: PropertyDescriptor(
|
||||
c.PID_RECIPIENT_REASSIGNMENT_PROHIBITED,
|
||||
"PidTagRecipientReassignmentProhibited",
|
||||
c.PTYP_BOOLEAN,
|
||||
),
|
||||
c.PID_RECIPIENT_TYPE: PropertyDescriptor(
|
||||
c.PID_RECIPIENT_TYPE,
|
||||
"PidTagRecipientType",
|
||||
c.PTYP_INTEGER_32,
|
||||
),
|
||||
c.PID_RECORD_KEY: PropertyDescriptor(c.PID_RECORD_KEY, "PidTagRecordKey", c.PTYP_BINARY),
|
||||
c.PID_REDIRECTION_HISTORY: PropertyDescriptor(
|
||||
c.PID_REDIRECTION_HISTORY, "PidTagRedirectionHistory", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_REPLY_RECIPIENT_ENTRIES: PropertyDescriptor(
|
||||
c.PID_REPLY_RECIPIENT_ENTRIES, "PidTagReplyRecipientEntries", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_REPLY_RECIPIENT_NAMES: PropertyDescriptor(
|
||||
c.PID_REPLY_RECIPIENT_NAMES, "PidTagReplyRecipientNames", c.PTYP_STRING
|
||||
),
|
||||
c.PID_REPLY_TIME: PropertyDescriptor(c.PID_REPLY_TIME, "PidTagReplyTime", c.PTYP_TIME),
|
||||
c.PID_REPORT: PropertyDescriptor(c.PID_REPORT, "PidTagReportTag", c.PTYP_BINARY),
|
||||
c.PID_REPORT_DISPOSITION: PropertyDescriptor(
|
||||
c.PID_REPORT_DISPOSITION, "PidTagReportDisposition", c.PTYP_STRING
|
||||
),
|
||||
c.PID_REPORT_DISPOSITION_MODE: PropertyDescriptor(
|
||||
c.PID_REPORT_DISPOSITION_MODE, "PidTagReportDispositionMode", c.PTYP_STRING
|
||||
),
|
||||
c.PID_REPORT_ENTRY_ID: PropertyDescriptor(
|
||||
c.PID_REPORT_ENTRY_ID, "PidTagReportEntryId", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_REPORT_NAME: PropertyDescriptor(c.PID_REPORT_NAME, "PidTagReportName", c.PTYP_STRING),
|
||||
c.PID_REPORT_SEARCH_KEY: PropertyDescriptor(
|
||||
c.PID_REPORT_SEARCH_KEY, "PidTagReportSearchKey", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_REPORT_TIME: PropertyDescriptor(c.PID_REPORT_TIME, "PidTagReportTime", c.PTYP_TIME),
|
||||
c.PID_RESPONSE_REQUESTED: PropertyDescriptor(
|
||||
c.PID_RESPONSE_REQUESTED, "PidTagResponseRequested", c.PTYP_BOOLEAN
|
||||
),
|
||||
c.PID_ROW_ID: PropertyDescriptor(c.PID_ROW_ID, "PidTagRowId", c.PTYP_INTEGER_32),
|
||||
c.PID_RTF_COMPRESSED: PropertyDescriptor(
|
||||
c.PID_RTF_COMPRESSED, "PidTagRtfCompressed", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_RTF_IN_SYNC: PropertyDescriptor(c.PID_RTF_IN_SYNC, "PidTagRtfInSync", c.PTYP_BOOLEAN),
|
||||
c.PID_SEARCH_KEY: PropertyDescriptor(c.PID_SEARCH_KEY, "PidTagSearchKey", c.PTYP_BINARY),
|
||||
c.PID_SECURITY: PropertyDescriptor(c.PID_SECURITY, "PidTagSecurity", c.PTYP_INTEGER_32),
|
||||
c.PID_SENDER_ADDRESS_TYPE: PropertyDescriptor(
|
||||
c.PID_SENDER_ADDRESS_TYPE, "PidTagSenderAddressType", c.PTYP_STRING
|
||||
),
|
||||
c.PID_SENDER_EMAIL_ADDRESS: PropertyDescriptor(
|
||||
c.PID_SENDER_EMAIL_ADDRESS, "PidTagSenderEmailAddress", c.PTYP_STRING
|
||||
),
|
||||
c.PID_SENDER_ENTRY_ID: PropertyDescriptor(
|
||||
c.PID_SENDER_ENTRY_ID, "PidTagSenderEntryId", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_SENDER_NAME: PropertyDescriptor(c.PID_SENDER_NAME, "PidTagSenderName", c.PTYP_STRING),
|
||||
c.PID_SENDER_SEARCH_KEY: PropertyDescriptor(
|
||||
c.PID_SENDER_SEARCH_KEY, "PidTagSenderSearchKey", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_SENDER_SMTP_ADDRESS: PropertyDescriptor(
|
||||
c.PID_SENDER_SMTP_ADDRESS, "PidTagSenderSmtpAddress", c.PTYP_STRING
|
||||
),
|
||||
c.PID_SENSITIVITY: PropertyDescriptor(
|
||||
c.PID_SENSITIVITY, "PidTagSensitivity", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_SENT_REPRESENTING_ADDRESS_TYPE: PropertyDescriptor(
|
||||
c.PID_SENT_REPRESENTING_ADDRESS_TYPE, "PidTagSentRepresentingAddressType", c.PTYP_STRING
|
||||
),
|
||||
c.PID_SENT_REPRESENTING_EMAIL_ADDRESS: PropertyDescriptor(
|
||||
c.PID_SENT_REPRESENTING_EMAIL_ADDRESS, "PidTagSentRepresentingEmailAddress", c.PTYP_STRING
|
||||
),
|
||||
c.PID_SENT_REPRESENTING_ENTRY_ID: PropertyDescriptor(
|
||||
c.PID_SENT_REPRESENTING_ENTRY_ID, "PidTagSentRepresentingEntryId", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_SENT_REPRESENTING_NAME: PropertyDescriptor(
|
||||
c.PID_SENT_REPRESENTING_NAME, "PidTagSentRepresentingName", c.PTYP_STRING
|
||||
),
|
||||
c.PID_SENT_REPRESENTING_SEARCH_KEY: PropertyDescriptor(
|
||||
c.PID_SENT_REPRESENTING_SEARCH_KEY, "PidTagSentRepresentingSearchKey", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_SMTP_ADDRESS: PropertyDescriptor(c.PID_SMTP_ADDRESS, "PidTagSmtpAddress", c.PTYP_STRING),
|
||||
c.PID_START_DATE: PropertyDescriptor(c.PID_START_DATE, "PidTagStartDate", c.PTYP_TIME),
|
||||
c.PID_STORE_SUPPORT_MASK: PropertyDescriptor(
|
||||
c.PID_STORE_SUPPORT_MASK, "PidTagStoreSupportMask", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_STORE_UNICODE_MASK: PropertyDescriptor(
|
||||
c.PID_STORE_UNICODE_MASK, "PidTagStoreUnicodeMask", c.PTYP_INTEGER_32
|
||||
),
|
||||
c.PID_SUBJECT: PropertyDescriptor(c.PID_SUBJECT, "PidTagSubject", c.PTYP_STRING),
|
||||
c.PID_SUBJECT_MESSAGE_ID: PropertyDescriptor(
|
||||
c.PID_SUBJECT_MESSAGE_ID, "PidTagSubjectMessageId", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_SUBJECT_PREFIX: PropertyDescriptor(
|
||||
c.PID_SUBJECT_PREFIX, "PidTagSubjectPrefix", c.PTYP_STRING
|
||||
),
|
||||
c.PID_TNEF_CORRELATION_KEY: PropertyDescriptor(
|
||||
c.PID_TNEF_CORRELATION_KEY, "PidTagTnefCorrelationKey", c.PTYP_BINARY
|
||||
),
|
||||
c.PID_TRANSPORT_MESSAGE_HEADERS: PropertyDescriptor(
|
||||
c.PID_TRANSPORT_MESSAGE_HEADERS, "PidTagTransportMessageHeaders", c.PTYP_STRING
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
"""Mapping of property-type codes to descriptor objects."""
|
||||
property_type_descriptors: dict[int, PropertyTypeDescriptor] = {
|
||||
c.PTYP_BINARY: PropertyTypeDescriptor(c.PTYP_BINARY, "PtypBinary", bytes),
|
||||
c.PTYP_BOOLEAN: PropertyTypeDescriptor(c.PTYP_BOOLEAN, "PtypBoolean", bool),
|
||||
c.PTYP_FLOATING_64: PropertyTypeDescriptor(c.PTYP_FLOATING_64, "PtypFloating64", float),
|
||||
c.PTYP_GUID: PropertyTypeDescriptor(c.PTYP_GUID, "PtypGuid", bytes),
|
||||
c.PTYP_INTEGER_16: PropertyTypeDescriptor(c.PTYP_INTEGER_16, "PtypInteger16", int),
|
||||
c.PTYP_INTEGER_32: PropertyTypeDescriptor(c.PTYP_INTEGER_32, "PtypInteger32", int),
|
||||
c.PTYP_MULTIPLE_INTEGER_32: PropertyTypeDescriptor(
|
||||
c.PTYP_MULTIPLE_INTEGER_32, "PtypMultipleInteger32", list[int]
|
||||
),
|
||||
c.PTYP_MULTIPLE_STRING: PropertyTypeDescriptor(
|
||||
c.PTYP_MULTIPLE_STRING, "PtypMultipleString", list[str]
|
||||
),
|
||||
c.PTYP_OBJECT: PropertyTypeDescriptor(c.PTYP_OBJECT, "PtypObject", bytes),
|
||||
c.PTYP_STRING: PropertyTypeDescriptor(c.PTYP_STRING, "PtypString", str),
|
||||
c.PTYP_STRING8: PropertyTypeDescriptor(c.PTYP_STRING8, "PtypString8", str),
|
||||
c.PTYP_TIME: PropertyTypeDescriptor(c.PTYP_TIME, "PtypTime", dt.datetime),
|
||||
}
|
||||
Reference in New Issue
Block a user