localDescriptorItems) {
@@ -68,6 +72,8 @@ public PSTContact(final PSTFile theFile, final DescriptorIndexNode folderIndexNo
/**
* Contact's Account name
+ *
+ * @return the account
*/
public String getAccount() {
return this.getStringItem(0x3a00);
@@ -75,6 +81,8 @@ public String getAccount() {
/**
* Callback telephone number
+ *
+ * @return the callback telephone number
*/
public String getCallbackTelephoneNumber() {
return this.getStringItem(0x3a02);
@@ -82,6 +90,8 @@ public String getCallbackTelephoneNumber() {
/**
* Contact's generational abbreviation FTK: Name suffix
+ *
+ * @return the generation
*/
public String getGeneration() {
return this.getStringItem(0x3a05);
@@ -89,6 +99,8 @@ public String getGeneration() {
/**
* Contacts given name
+ *
+ * @return the given name
*/
public String getGivenName() {
return this.getStringItem(0x3a06);
@@ -96,6 +108,8 @@ public String getGivenName() {
/**
* Contacts Government ID Number
+ *
+ * @return the government id number
*/
public String getGovernmentIdNumber() {
return this.getStringItem(0x3a07);
@@ -103,6 +117,8 @@ public String getGovernmentIdNumber() {
/**
* Business/Office Telephone Number
+ *
+ * @return the business telephone number
*/
public String getBusinessTelephoneNumber() {
return this.getStringItem(0x3a08);
@@ -110,6 +126,8 @@ public String getBusinessTelephoneNumber() {
/**
* Home Telephone Number
+ *
+ * @return the home telephone number
*/
public String getHomeTelephoneNumber() {
return this.getStringItem(0x3a09);
@@ -117,6 +135,8 @@ public String getHomeTelephoneNumber() {
/**
* Contacts initials
+ *
+ * @return the initials
*/
public String getInitials() {
return this.getStringItem(0x3a0a);
@@ -124,6 +144,8 @@ public String getInitials() {
/**
* Keyword
+ *
+ * @return the keyword
*/
public String getKeyword() {
return this.getStringItem(0x3a0b);
@@ -131,6 +153,8 @@ public String getKeyword() {
/**
* Contact's language
+ *
+ * @return the language
*/
public String getLanguage() {
return this.getStringItem(0x3a0c);
@@ -138,6 +162,8 @@ public String getLanguage() {
/**
* Contact's location
+ *
+ * @return the location
*/
public String getLocation() {
return this.getStringItem(0x3a0d);
@@ -145,6 +171,8 @@ public String getLocation() {
/**
* MHS Common Name
+ *
+ * @return the mhs common name
*/
public String getMhsCommonName() {
return this.getStringItem(0x3a0f);
@@ -152,6 +180,8 @@ public String getMhsCommonName() {
/**
* Organizational identification number
+ *
+ * @return the organizational id number
*/
public String getOrganizationalIdNumber() {
return this.getStringItem(0x3a10);
@@ -159,6 +189,8 @@ public String getOrganizationalIdNumber() {
/**
* Contact's surname FTK: Last name
+ *
+ * @return the surname
*/
public String getSurname() {
return this.getStringItem(0x3a11);
@@ -166,6 +198,8 @@ public String getSurname() {
/**
* Original display name
+ *
+ * @return the original display name
*/
public String getOriginalDisplayName() {
return this.getStringItem(0x3a13);
@@ -173,6 +207,8 @@ public String getOriginalDisplayName() {
/**
* Default Postal Address
+ *
+ * @return the postal address
*/
public String getPostalAddress() {
return this.getStringItem(0x3a15);
@@ -180,6 +216,8 @@ public String getPostalAddress() {
/**
* Contact's company name
+ *
+ * @return the company name
*/
public String getCompanyName() {
return this.getStringItem(0x3a16);
@@ -187,6 +225,8 @@ public String getCompanyName() {
/**
* Contact's job title FTK: Profession
+ *
+ * @return the title
*/
public String getTitle() {
return this.getStringItem(0x3a17);
@@ -194,6 +234,8 @@ public String getTitle() {
/**
* Contact's department name Used in contact item
+ *
+ * @return the department name
*/
public String getDepartmentName() {
return this.getStringItem(0x3a18);
@@ -201,6 +243,8 @@ public String getDepartmentName() {
/**
* Contact's office location
+ *
+ * @return the office location
*/
public String getOfficeLocation() {
return this.getStringItem(0x3a19);
@@ -208,6 +252,8 @@ public String getOfficeLocation() {
/**
* Primary Telephone
+ *
+ * @return the primary telephone number
*/
public String getPrimaryTelephoneNumber() {
return this.getStringItem(0x3a1a);
@@ -215,6 +261,8 @@ public String getPrimaryTelephoneNumber() {
/**
* Contact's secondary office (business) phone number
+ *
+ * @return the business 2 telephone number
*/
public String getBusiness2TelephoneNumber() {
return this.getStringItem(0x3a1b);
@@ -222,6 +270,8 @@ public String getBusiness2TelephoneNumber() {
/**
* Mobile Phone Number
+ *
+ * @return the mobile telephone number
*/
public String getMobileTelephoneNumber() {
return this.getStringItem(0x3a1c);
@@ -229,6 +279,8 @@ public String getMobileTelephoneNumber() {
/**
* Radio Phone Number
+ *
+ * @return the radio telephone number
*/
public String getRadioTelephoneNumber() {
return this.getStringItem(0x3a1d);
@@ -236,6 +288,8 @@ public String getRadioTelephoneNumber() {
/**
* Car Phone Number
+ *
+ * @return the car telephone number
*/
public String getCarTelephoneNumber() {
return this.getStringItem(0x3a1e);
@@ -243,6 +297,8 @@ public String getCarTelephoneNumber() {
/**
* Other Phone Number
+ *
+ * @return the other telephone number
*/
public String getOtherTelephoneNumber() {
return this.getStringItem(0x3a1f);
@@ -250,6 +306,8 @@ public String getOtherTelephoneNumber() {
/**
* Transmittable display name
+ *
+ * @return the transmittable display name
*/
public String getTransmittableDisplayName() {
return this.getStringItem(0x3a20);
@@ -257,6 +315,8 @@ public String getTransmittableDisplayName() {
/**
* Pager Phone Number
+ *
+ * @return the pager telephone number
*/
public String getPagerTelephoneNumber() {
return this.getStringItem(0x3a21);
@@ -264,6 +324,8 @@ public String getPagerTelephoneNumber() {
/**
* Primary Fax Number
+ *
+ * @return the primary fax number
*/
public String getPrimaryFaxNumber() {
return this.getStringItem(0x3a23);
@@ -271,6 +333,8 @@ public String getPrimaryFaxNumber() {
/**
* Contact's office (business) fax number
+ *
+ * @return the business fax number
*/
public String getBusinessFaxNumber() {
return this.getStringItem(0x3a24);
@@ -278,6 +342,8 @@ public String getBusinessFaxNumber() {
/**
* Contact's home fax number
+ *
+ * @return the home fax number
*/
public String getHomeFaxNumber() {
return this.getStringItem(0x3a25);
@@ -285,6 +351,8 @@ public String getHomeFaxNumber() {
/**
* Business Address Country
+ *
+ * @return the business address country
*/
public String getBusinessAddressCountry() {
return this.getStringItem(0x3a26);
@@ -292,6 +360,8 @@ public String getBusinessAddressCountry() {
/**
* Business Address City
+ *
+ * @return the business address city
*/
public String getBusinessAddressCity() {
return this.getStringItem(0x3a27);
@@ -299,6 +369,8 @@ public String getBusinessAddressCity() {
/**
* Business Address State
+ *
+ * @return the business address state or province
*/
public String getBusinessAddressStateOrProvince() {
return this.getStringItem(0x3a28);
@@ -306,6 +378,8 @@ public String getBusinessAddressStateOrProvince() {
/**
* Business Address Street
+ *
+ * @return the business address street
*/
public String getBusinessAddressStreet() {
return this.getStringItem(0x3a29);
@@ -313,6 +387,8 @@ public String getBusinessAddressStreet() {
/**
* Business Postal Code
+ *
+ * @return the business postal code
*/
public String getBusinessPostalCode() {
return this.getStringItem(0x3a2a);
@@ -320,6 +396,8 @@ public String getBusinessPostalCode() {
/**
* Business PO Box
+ *
+ * @return the business po box
*/
public String getBusinessPoBox() {
return this.getStringItem(0x3a2b);
@@ -327,6 +405,8 @@ public String getBusinessPoBox() {
/**
* Telex Number
+ *
+ * @return the telex number
*/
public String getTelexNumber() {
return this.getStringItem(0x3a2c);
@@ -334,6 +414,8 @@ public String getTelexNumber() {
/**
* ISDN Number
+ *
+ * @return the isdn number
*/
public String getIsdnNumber() {
return this.getStringItem(0x3a2d);
@@ -341,6 +423,8 @@ public String getIsdnNumber() {
/**
* Assistant Phone Number
+ *
+ * @return the assistant telephone number
*/
public String getAssistantTelephoneNumber() {
return this.getStringItem(0x3a2e);
@@ -348,6 +432,8 @@ public String getAssistantTelephoneNumber() {
/**
* Home Phone 2
+ *
+ * @return the home 2 telephone number
*/
public String getHome2TelephoneNumber() {
return this.getStringItem(0x3a2f);
@@ -355,6 +441,8 @@ public String getHome2TelephoneNumber() {
/**
* Assistant�s Name
+ *
+ * @return the assistant
*/
public String getAssistant() {
return this.getStringItem(0x3a30);
@@ -362,6 +450,8 @@ public String getAssistant() {
/**
* Hobbies
+ *
+ * @return the hobbies
*/
public String getHobbies() {
return this.getStringItem(0x3a43);
@@ -369,6 +459,8 @@ public String getHobbies() {
/**
* Middle Name
+ *
+ * @return the middle name
*/
public String getMiddleName() {
return this.getStringItem(0x3a44);
@@ -376,6 +468,8 @@ public String getMiddleName() {
/**
* Display Name Prefix (Contact Title)
+ *
+ * @return the display name prefix
*/
public String getDisplayNamePrefix() {
return this.getStringItem(0x3a45);
@@ -383,6 +477,8 @@ public String getDisplayNamePrefix() {
/**
* Profession
+ *
+ * @return the profession
*/
public String getProfession() {
return this.getStringItem(0x3a46);
@@ -390,6 +486,8 @@ public String getProfession() {
/**
* Preferred By Name
+ *
+ * @return the preferred by name
*/
public String getPreferredByName() {
return this.getStringItem(0x3a47);
@@ -397,6 +495,8 @@ public String getPreferredByName() {
/**
* Spouse�s Name
+ *
+ * @return the spouse name
*/
public String getSpouseName() {
return this.getStringItem(0x3a48);
@@ -404,6 +504,8 @@ public String getSpouseName() {
/**
* Computer Network Name
+ *
+ * @return the computer network name
*/
public String getComputerNetworkName() {
return this.getStringItem(0x3a49);
@@ -411,6 +513,8 @@ public String getComputerNetworkName() {
/**
* Customer ID
+ *
+ * @return the customer id
*/
public String getCustomerId() {
return this.getStringItem(0x3a4a);
@@ -418,6 +522,8 @@ public String getCustomerId() {
/**
* TTY/TDD Phone
+ *
+ * @return the ttytdd phone number
*/
public String getTtytddPhoneNumber() {
return this.getStringItem(0x3a4b);
@@ -425,6 +531,8 @@ public String getTtytddPhoneNumber() {
/**
* Ftp Site
+ *
+ * @return the ftp site
*/
public String getFtpSite() {
return this.getStringItem(0x3a4c);
@@ -432,6 +540,8 @@ public String getFtpSite() {
/**
* Manager�s Name
+ *
+ * @return the manager name
*/
public String getManagerName() {
return this.getStringItem(0x3a4e);
@@ -439,6 +549,8 @@ public String getManagerName() {
/**
* Nickname
+ *
+ * @return the nickname
*/
public String getNickname() {
return this.getStringItem(0x3a4f);
@@ -446,6 +558,8 @@ public String getNickname() {
/**
* Personal Home Page
+ *
+ * @return the personal home page
*/
public String getPersonalHomePage() {
return this.getStringItem(0x3a50);
@@ -453,6 +567,8 @@ public String getPersonalHomePage() {
/**
* Business Home Page
+ *
+ * @return the business home page
*/
public String getBusinessHomePage() {
return this.getStringItem(0x3a51);
@@ -460,11 +576,19 @@ public String getBusinessHomePage() {
/**
* Note
+ *
+ * @return the note
*/
public String getNote() {
return this.getStringItem(0x6619);
}
+ /**
+ * Gets named string item.
+ *
+ * @param key the key
+ * @return the named string item
+ */
String getNamedStringItem(final int key) {
final int id = this.pstFile.getNameToIdMapItem(key, PSTFile.PSETID_Address);
if (id != -1) {
@@ -473,12 +597,19 @@ String getNamedStringItem(final int key) {
return "";
}
+ /**
+ * Gets smtp address.
+ *
+ * @return the smtp address
+ */
public String getSMTPAddress() {
return this.getNamedStringItem(0x00008084);
}
/**
* Company Main Phone
+ *
+ * @return the company main phone number
*/
public String getCompanyMainPhoneNumber() {
return this.getStringItem(0x3a57);
@@ -486,6 +617,8 @@ public String getCompanyMainPhoneNumber() {
/**
* Children's names
+ *
+ * @return the childrens names
*/
public String getChildrensNames() {
return this.getStringItem(0x3a58);
@@ -493,6 +626,8 @@ public String getChildrensNames() {
/**
* Home Address City
+ *
+ * @return the home address city
*/
public String getHomeAddressCity() {
return this.getStringItem(0x3a59);
@@ -500,6 +635,8 @@ public String getHomeAddressCity() {
/**
* Home Address Country
+ *
+ * @return the home address country
*/
public String getHomeAddressCountry() {
return this.getStringItem(0x3a5a);
@@ -507,6 +644,8 @@ public String getHomeAddressCountry() {
/**
* Home Address Postal Code
+ *
+ * @return the home address postal code
*/
public String getHomeAddressPostalCode() {
return this.getStringItem(0x3a5b);
@@ -514,6 +653,8 @@ public String getHomeAddressPostalCode() {
/**
* Home Address State or Province
+ *
+ * @return the home address state or province
*/
public String getHomeAddressStateOrProvince() {
return this.getStringItem(0x3a5c);
@@ -521,6 +662,8 @@ public String getHomeAddressStateOrProvince() {
/**
* Home Address Street
+ *
+ * @return the home address street
*/
public String getHomeAddressStreet() {
return this.getStringItem(0x3a5d);
@@ -528,6 +671,8 @@ public String getHomeAddressStreet() {
/**
* Home Address Post Office Box
+ *
+ * @return the home address post office box
*/
public String getHomeAddressPostOfficeBox() {
return this.getStringItem(0x3a5e);
@@ -535,6 +680,8 @@ public String getHomeAddressPostOfficeBox() {
/**
* Other Address City
+ *
+ * @return the other address city
*/
public String getOtherAddressCity() {
return this.getStringItem(0x3a5f);
@@ -542,6 +689,8 @@ public String getOtherAddressCity() {
/**
* Other Address Country
+ *
+ * @return the other address country
*/
public String getOtherAddressCountry() {
return this.getStringItem(0x3a60);
@@ -549,6 +698,8 @@ public String getOtherAddressCountry() {
/**
* Other Address Postal Code
+ *
+ * @return the other address postal code
*/
public String getOtherAddressPostalCode() {
return this.getStringItem(0x3a61);
@@ -556,6 +707,8 @@ public String getOtherAddressPostalCode() {
/**
* Other Address State
+ *
+ * @return the other address state or province
*/
public String getOtherAddressStateOrProvince() {
return this.getStringItem(0x3a62);
@@ -563,6 +716,8 @@ public String getOtherAddressStateOrProvince() {
/**
* Other Address Street
+ *
+ * @return the other address street
*/
public String getOtherAddressStreet() {
return this.getStringItem(0x3a63);
@@ -570,6 +725,8 @@ public String getOtherAddressStreet() {
/**
* Other Address Post Office box
+ *
+ * @return the other address post office box
*/
public String getOtherAddressPostOfficeBox() {
return this.getStringItem(0x3a64);
@@ -581,6 +738,8 @@ public String getOtherAddressPostOfficeBox() {
/**
* File under FTK: File as
+ *
+ * @return the file under
*/
public String getFileUnder() {
return this.getNamedStringItem(0x00008005);
@@ -588,6 +747,8 @@ public String getFileUnder() {
/**
* Home Address
+ *
+ * @return the home address
*/
public String getHomeAddress() {
return this.getNamedStringItem(0x0000801a);
@@ -595,6 +756,8 @@ public String getHomeAddress() {
/**
* Business Address
+ *
+ * @return the work address
*/
public String getWorkAddress() {
return this.getNamedStringItem(0x0000801b);
@@ -602,6 +765,8 @@ public String getWorkAddress() {
/**
* Other Address
+ *
+ * @return the other address
*/
public String getOtherAddress() {
return this.getNamedStringItem(0x0000801c);
@@ -609,6 +774,8 @@ public String getOtherAddress() {
/**
* Selected Mailing Address
+ *
+ * @return the postal address id
*/
public int getPostalAddressId() {
return this.getIntItem(this.pstFile.getNameToIdMapItem(0x00008022, PSTFile.PSETID_Address));
@@ -616,6 +783,8 @@ public int getPostalAddressId() {
/**
* Webpage
+ *
+ * @return the html
*/
public String getHtml() {
return this.getNamedStringItem(0x0000802b);
@@ -623,6 +792,8 @@ public String getHtml() {
/**
* Business Address City
+ *
+ * @return the work address street
*/
public String getWorkAddressStreet() {
return this.getNamedStringItem(0x00008045);
@@ -630,6 +801,8 @@ public String getWorkAddressStreet() {
/**
* Business Address Street
+ *
+ * @return the work address city
*/
public String getWorkAddressCity() {
return this.getNamedStringItem(0x00008046);
@@ -637,6 +810,8 @@ public String getWorkAddressCity() {
/**
* Business Address State
+ *
+ * @return the work address state
*/
public String getWorkAddressState() {
return this.getNamedStringItem(0x00008047);
@@ -644,6 +819,8 @@ public String getWorkAddressState() {
/**
* Business Address Postal Code
+ *
+ * @return the work address postal code
*/
public String getWorkAddressPostalCode() {
return this.getNamedStringItem(0x00008048);
@@ -651,6 +828,8 @@ public String getWorkAddressPostalCode() {
/**
* Business Address Country
+ *
+ * @return the work address country
*/
public String getWorkAddressCountry() {
return this.getNamedStringItem(0x00008049);
@@ -658,6 +837,8 @@ public String getWorkAddressCountry() {
/**
* Business Address Country
+ *
+ * @return the work address post office box
*/
public String getWorkAddressPostOfficeBox() {
return this.getNamedStringItem(0x0000804A);
@@ -665,6 +846,8 @@ public String getWorkAddressPostOfficeBox() {
/**
* IM Address
+ *
+ * @return the instant messaging address
*/
public String getInstantMessagingAddress() {
return this.getNamedStringItem(0x00008062);
@@ -672,6 +855,8 @@ public String getInstantMessagingAddress() {
/**
* E-mail1 Display Name
+ *
+ * @return the email 1 display name
*/
public String getEmail1DisplayName() {
return this.getNamedStringItem(0x00008080);
@@ -679,6 +864,8 @@ public String getEmail1DisplayName() {
/**
* E-mail1 Address Type
+ *
+ * @return the email 1 address type
*/
public String getEmail1AddressType() {
return this.getNamedStringItem(0x00008082);
@@ -686,6 +873,8 @@ public String getEmail1AddressType() {
/**
* E-mail1 Address
+ *
+ * @return the email 1 email address
*/
public String getEmail1EmailAddress() {
return this.getNamedStringItem(0x00008083);
@@ -693,6 +882,8 @@ public String getEmail1EmailAddress() {
/**
* E-mail1 Display Name
+ *
+ * @return the email 1 original display name
*/
public String getEmail1OriginalDisplayName() {
return this.getNamedStringItem(0x00008084);
@@ -700,6 +891,8 @@ public String getEmail1OriginalDisplayName() {
/**
* E-mail1 type
+ *
+ * @return the email 1 email type
*/
public String getEmail1EmailType() {
return this.getNamedStringItem(0x00008087);
@@ -707,6 +900,8 @@ public String getEmail1EmailType() {
/**
* E-mail2 display name
+ *
+ * @return the email 2 display name
*/
public String getEmail2DisplayName() {
return this.getNamedStringItem(0x00008090);
@@ -714,6 +909,8 @@ public String getEmail2DisplayName() {
/**
* E-mail2 address type
+ *
+ * @return the email 2 address type
*/
public String getEmail2AddressType() {
return this.getNamedStringItem(0x00008092);
@@ -721,6 +918,8 @@ public String getEmail2AddressType() {
/**
* E-mail2 e-mail address
+ *
+ * @return the email 2 email address
*/
public String getEmail2EmailAddress() {
return this.getNamedStringItem(0x00008093);
@@ -728,6 +927,8 @@ public String getEmail2EmailAddress() {
/**
* E-mail2 original display name
+ *
+ * @return the email 2 original display name
*/
public String getEmail2OriginalDisplayName() {
return this.getNamedStringItem(0x00008094);
@@ -735,6 +936,8 @@ public String getEmail2OriginalDisplayName() {
/**
* E-mail3 display name
+ *
+ * @return the email 3 display name
*/
public String getEmail3DisplayName() {
return this.getNamedStringItem(0x000080a0);
@@ -742,6 +945,8 @@ public String getEmail3DisplayName() {
/**
* E-mail3 address type
+ *
+ * @return the email 3 address type
*/
public String getEmail3AddressType() {
return this.getNamedStringItem(0x000080a2);
@@ -749,6 +954,8 @@ public String getEmail3AddressType() {
/**
* E-mail3 e-mail address
+ *
+ * @return the email 3 email address
*/
public String getEmail3EmailAddress() {
return this.getNamedStringItem(0x000080a3);
@@ -756,6 +963,8 @@ public String getEmail3EmailAddress() {
/**
* E-mail3 original display name
+ *
+ * @return the email 3 original display name
*/
public String getEmail3OriginalDisplayName() {
return this.getNamedStringItem(0x000080a4);
@@ -763,6 +972,8 @@ public String getEmail3OriginalDisplayName() {
/**
* Fax1 Address Type
+ *
+ * @return the fax 1 address type
*/
public String getFax1AddressType() {
return this.getNamedStringItem(0x000080b2);
@@ -770,6 +981,8 @@ public String getFax1AddressType() {
/**
* Fax1 Email Address
+ *
+ * @return the fax 1 email address
*/
public String getFax1EmailAddress() {
return this.getNamedStringItem(0x000080b3);
@@ -777,6 +990,8 @@ public String getFax1EmailAddress() {
/**
* Fax1 Original Display Name
+ *
+ * @return the fax 1 original display name
*/
public String getFax1OriginalDisplayName() {
return this.getNamedStringItem(0x000080b4);
@@ -784,6 +999,8 @@ public String getFax1OriginalDisplayName() {
/**
* Fax2 Address Type
+ *
+ * @return the fax 2 address type
*/
public String getFax2AddressType() {
return this.getNamedStringItem(0x000080c2);
@@ -791,6 +1008,8 @@ public String getFax2AddressType() {
/**
* Fax2 Email Address
+ *
+ * @return the fax 2 email address
*/
public String getFax2EmailAddress() {
return this.getNamedStringItem(0x000080c3);
@@ -798,6 +1017,8 @@ public String getFax2EmailAddress() {
/**
* Fax2 Original Display Name
+ *
+ * @return the fax 2 original display name
*/
public String getFax2OriginalDisplayName() {
return this.getNamedStringItem(0x000080c4);
@@ -805,6 +1026,8 @@ public String getFax2OriginalDisplayName() {
/**
* Fax3 Address Type
+ *
+ * @return the fax 3 address type
*/
public String getFax3AddressType() {
return this.getNamedStringItem(0x000080d2);
@@ -812,6 +1035,8 @@ public String getFax3AddressType() {
/**
* Fax3 Email Address
+ *
+ * @return the fax 3 email address
*/
public String getFax3EmailAddress() {
return this.getNamedStringItem(0x000080d3);
@@ -819,6 +1044,8 @@ public String getFax3EmailAddress() {
/**
* Fax3 Original Display Name
+ *
+ * @return the fax 3 original display name
*/
public String getFax3OriginalDisplayName() {
return this.getNamedStringItem(0x000080d4);
@@ -826,6 +1053,8 @@ public String getFax3OriginalDisplayName() {
/**
* Free/Busy Location (URL)
+ *
+ * @return the free busy location
*/
public String getFreeBusyLocation() {
return this.getNamedStringItem(0x000080d8);
@@ -833,6 +1062,8 @@ public String getFreeBusyLocation() {
/**
* Birthday
+ *
+ * @return the birthday
*/
public Date getBirthday() {
return this.getDateItem(0x3a42);
@@ -840,6 +1071,8 @@ public Date getBirthday() {
/**
* (Wedding) Anniversary
+ *
+ * @return the anniversary
*/
public Date getAnniversary() {
return this.getDateItem(0x3a41);
diff --git a/src/main/java/com/pff/PSTDescriptorItem.java b/src/main/java/com/pff/PSTDescriptorItem.java
index bd8c191..94f2da4 100644
--- a/src/main/java/com/pff/PSTDescriptorItem.java
+++ b/src/main/java/com/pff/PSTDescriptorItem.java
@@ -1,35 +1,34 @@
/**
* Copyright 2010 Richard Johnson & Orin Eman
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
+ *
* ---
- *
+ *
* This file is part of java-libpst.
- *
+ *
* java-libpst is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
- *
+ *
* java-libpst is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public License
* along with java-libpst. If not, see .
- *
*/
package com.pff;
@@ -39,25 +38,34 @@
* The descriptor items contain information that describes a PST object.
* This is like extended table entries, usually when the data cannot fit in a
* traditional table item.
- *
+ *
+ * This is an entry of type SLENTRY or SIENTRY
+ * see [MS-PST]: Outlook Personal Folders (.pst) File Format
+ *
* @author Richard Johnson
*/
class PSTDescriptorItem {
- PSTDescriptorItem(final byte[] data, final int offset, final PSTFile pstFile) {
+ PSTDescriptorItem(final byte[] data, final int offset, final PSTFile pstFile, int entryType) {
this.pstFile = pstFile;
if (pstFile.getPSTFileType() == PSTFile.PST_TYPE_ANSI) {
this.descriptorIdentifier = (int) PSTObject.convertLittleEndianBytesToLong(data, offset, offset + 4);
this.offsetIndexIdentifier = ((int) PSTObject.convertLittleEndianBytesToLong(data, offset + 4, offset + 8))
- & 0xfffffffe;
- this.subNodeOffsetIndexIdentifier = (int) PSTObject.convertLittleEndianBytesToLong(data, offset + 8,
- offset + 12) & 0xfffffffe;
+ & 0xfffffffe;
+ if (entryType == PSTFile.SLBLOCK_ENTRY)
+ this.subNodeOffsetIndexIdentifier = (int) PSTObject.convertLittleEndianBytesToLong(data, offset + 8,
+ offset + 12) & 0xfffffffe;
+ else
+ this.subNodeOffsetIndexIdentifier = 0;
} else {
this.descriptorIdentifier = (int) PSTObject.convertLittleEndianBytesToLong(data, offset, offset + 4);
this.offsetIndexIdentifier = ((int) PSTObject.convertLittleEndianBytesToLong(data, offset + 8, offset + 16))
- & 0xfffffffe;
- this.subNodeOffsetIndexIdentifier = (int) PSTObject.convertLittleEndianBytesToLong(data, offset + 16,
- offset + 24) & 0xfffffffe;
+ & 0xfffffffe;
+ if (entryType == PSTFile.SLBLOCK_ENTRY)
+ this.subNodeOffsetIndexIdentifier = (int) PSTObject.convertLittleEndianBytesToLong(data, offset + 16,
+ offset + 24) & 0xfffffffe;
+ else
+ this.subNodeOffsetIndexIdentifier = 0;
}
}
@@ -104,8 +112,8 @@ public int getDataSize() throws IOException, PSTException {
@Override
public String toString() {
return "PSTDescriptorItem\n" + " descriptorIdentifier: " + this.descriptorIdentifier + "\n"
- + " offsetIndexIdentifier: " + this.offsetIndexIdentifier + "\n" + " subNodeOffsetIndexIdentifier: "
- + this.subNodeOffsetIndexIdentifier + "\n";
+ + " offsetIndexIdentifier: " + this.offsetIndexIdentifier + "\n" + " subNodeOffsetIndexIdentifier: "
+ + this.subNodeOffsetIndexIdentifier + "\n";
}
diff --git a/src/main/java/com/pff/PSTFile.java b/src/main/java/com/pff/PSTFile.java
index 5147095..fd4a520 100644
--- a/src/main/java/com/pff/PSTFile.java
+++ b/src/main/java/com/pff/PSTFile.java
@@ -1,55 +1,47 @@
/**
* Copyright 2010 Richard Johnson & Orin Eman
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
+ *
* ---
- *
+ *
* This file is part of java-libpst.
- *
+ *
* java-libpst is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
- *
+ *
* java-libpst is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public License
* along with java-libpst. If not, see .
- *
*/
package com.pff;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.RandomAccessFile;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.Properties;
-import java.util.UUID;
+import java.io.*;
+import java.nio.charset.Charset;
+import java.util.*;
/**
* PSTFile is the containing class that allows you to access items within a .pst
* file.
* Start here, get the root of the folders and work your way down through your
* items.
- *
+ *
* @author Richard Johnson
*/
public class PSTFile {
@@ -85,21 +77,21 @@ public class PSTFile {
// Now the string guids
private static final String guidStrings[] = {
- "00020329-0000-0000-C000-000000000046",
- "00062008-0000-0000-C000-000000000046",
- "00062004-0000-0000-C000-000000000046",
- "00020386-0000-0000-C000-000000000046",
- "00062002-0000-0000-C000-000000000046",
- "6ED8DA90-450B-101B-98DA-00AA003F1305",
- "0006200A-0000-0000-C000-000000000046",
- "41F28F13-83F4-4114-A584-EEDB5A6B0BFF",
- "0006200E-0000-0000-C000-000000000046",
- "00062041-0000-0000-C000-000000000046",
- "00062003-0000-0000-C000-000000000046",
- "4442858E-A9E3-4E80-B900-317A210CC15B",
- "00020328-0000-0000-C000-000000000046",
- "71035549-0739-4DCB-9163-00F0580DBBDF",
- "00062040-0000-0000-C000-000000000046"};
+ "00020329-0000-0000-C000-000000000046",
+ "00062008-0000-0000-C000-000000000046",
+ "00062004-0000-0000-C000-000000000046",
+ "00020386-0000-0000-C000-000000000046",
+ "00062002-0000-0000-C000-000000000046",
+ "6ED8DA90-450B-101B-98DA-00AA003F1305",
+ "0006200A-0000-0000-C000-000000000046",
+ "41F28F13-83F4-4114-A584-EEDB5A6B0BFF",
+ "0006200E-0000-0000-C000-000000000046",
+ "00062041-0000-0000-C000-000000000046",
+ "00062003-0000-0000-C000-000000000046",
+ "4442858E-A9E3-4E80-B900-317A210CC15B",
+ "00020328-0000-0000-C000-000000000046",
+ "71035549-0739-4DCB-9163-00F0580DBBDF",
+ "00062040-0000-0000-C000-000000000046"};
private final HashMap guidMap = new HashMap<>();
@@ -121,24 +113,48 @@ public class PSTFile {
/**
* constructor
- *
- * @param fileName
- * @throws FileNotFoundException
- * @throws PSTException
- * @throws IOException
+ *
+ * @param fileName the file name
+ * @throws FileNotFoundException the file not found exception
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
public PSTFile(final String fileName) throws FileNotFoundException, PSTException, IOException {
this(new File(fileName));
}
+ /**
+ * Instantiates a new Pst file.
+ *
+ * @param file the file
+ * @throws FileNotFoundException the file not found exception
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
+ */
public PSTFile(final File file) throws FileNotFoundException, PSTException, IOException {
this(new PSTRAFileContent(file));
}
+ /**
+ * Instantiates a new Pst file.
+ *
+ * @param bytes the bytes
+ * @throws FileNotFoundException the file not found exception
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
+ */
public PSTFile(final byte[] bytes) throws FileNotFoundException, PSTException, IOException {
this(new PSTByteFileContent(bytes));
}
+ /**
+ * Instantiates a new Pst file.
+ *
+ * @param content the content
+ * @throws FileNotFoundException the file not found exception
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
+ */
public PSTFile(final PSTFileContent content) throws FileNotFoundException, PSTException, IOException {
// attempt to open the file.
this.in = content;
@@ -161,7 +177,7 @@ public PSTFile(final PSTFileContent content) throws FileNotFoundException, PSTEx
fileTypeBytes[0] = PSTFile.PST_TYPE_ANSI;
}
if (fileTypeBytes[0] != PSTFile.PST_TYPE_ANSI && fileTypeBytes[0] != PSTFile.PST_TYPE_UNICODE
- && fileTypeBytes[0] != PSTFile.PST_TYPE_2013_UNICODE) {
+ && fileTypeBytes[0] != PSTFile.PST_TYPE_2013_UNICODE) {
throw new PSTException("Unrecognised PST File version: " + fileTypeBytes[0]);
}
this.pstFileType = fileTypeBytes[0];
@@ -180,12 +196,36 @@ public PSTFile(final PSTFileContent content) throws FileNotFoundException, PSTEx
// build out name to id map.
this.processNameToIdMap(this.in);
+ // get the default codepage
+ globalCodepage = inferGlobalCodepage();
} catch (final IOException err) {
throw new PSTException("Unable to read PST Sig", err);
}
}
+ private String globalCodepage;
+
+ private String inferGlobalCodepage() {
+ int codepageIdentifier;
+ try {
+ codepageIdentifier = this.getMessageStore().getIntItem(0x66C3); // PidTagCodepageId
+ } catch (PSTException | IOException e) {
+ return null;
+ }
+ if (codepageIdentifier != 0)
+ return getInternetCodePageCharset(codepageIdentifier);
+ return Charset.defaultCharset().name();
+ }
+
+ public void setGlobalCodepage(String codepage) {
+ globalCodepage = codepage;
+ }
+
+ public String getGlobalCodepage() {
+ return globalCodepage;
+ }
+
private int pstFileType = 0;
public int getPSTFileType() {
@@ -194,10 +234,10 @@ public int getPSTFileType() {
/**
* read the name-to-id map from the file and load it in
- *
- * @param in
- * @throws IOException
- * @throws PSTException
+ *
+ * @param in the pst file content
+ * @throws IOException IOException
+ * @throws PSTException PSTException
*/
private void processNameToIdMap(final PSTFileContent in) throws IOException, PSTException {
@@ -222,7 +262,7 @@ private void processNameToIdMap(final PSTFileContent in) throws IOException, PST
// nameToIdMapDescriptorNode.localDescriptorsOffsetIndexIdentifier);
// localDescriptorItems = descriptor.getChildren();
localDescriptorItems = this
- .getPSTDescriptorItems(nameToIdMapDescriptorNode.localDescriptorsOffsetIndexIdentifier);
+ .getPSTDescriptorItems(nameToIdMapDescriptorNode.localDescriptorsOffsetIndexIdentifier);
}
// process the map
@@ -245,8 +285,8 @@ private void processNameToIdMap(final PSTFileContent in) throws IOException, PST
int offset = 0;
for (int i = 0; i < nGuids; ++i) {
final long mostSigBits = (PSTObject.convertLittleEndianBytesToLong(this.guids, offset, offset + 4) << 32)
- | (PSTObject.convertLittleEndianBytesToLong(this.guids, offset + 4, offset + 6) << 16)
- | PSTObject.convertLittleEndianBytesToLong(this.guids, offset + 6, offset + 8);
+ | (PSTObject.convertLittleEndianBytesToLong(this.guids, offset + 4, offset + 6) << 16)
+ | PSTObject.convertLittleEndianBytesToLong(this.guids, offset + 6, offset + 8);
final long leastSigBits = PSTObject.convertBigEndianBytesToLong(this.guids, offset + 8, offset + 16);
uuidArray[i] = new UUID(mostSigBits, leastSigBits);
if (this.guidMap.containsKey(uuidArray[i])) {
@@ -298,19 +338,21 @@ private void processNameToIdMap(final PSTFileContent in) throws IOException, PST
// dwPropertyId becomes thHke byte offset into the String stream
// in which the string name of the property is stored.
final int len = (int) PSTObject.convertLittleEndianBytesToLong(stringNameToIdByte, dwPropertyId,
- dwPropertyId + 4);
- final byte[] keyByteValue = new byte[len];
- System.arraycopy(stringNameToIdByte, dwPropertyId + 4, keyByteValue, 0, keyByteValue.length);
- wPropIdx += 0x8000;
- final String key = new String(keyByteValue, "UTF-16LE");
- this.stringToId.put(key, wPropIdx);
- this.idToString.put(wPropIdx, key);
+ dwPropertyId + 4);
+ if (len > 0 && len < stringNameToIdByte.length) {
+ final byte[] keyByteValue = new byte[len];
+ System.arraycopy(stringNameToIdByte, dwPropertyId + 4, keyByteValue, 0, keyByteValue.length);
+ wPropIdx += 0x8000;
+ final String key = new String(keyByteValue, "UTF-16LE");
+ this.stringToId.put(key, wPropIdx);
+ this.idToString.put(wPropIdx, key);
+ }
}
}
}
private byte[] getData(final PSTTableItem item, final HashMap localDescriptorItems)
- throws IOException, PSTException {
+ throws IOException, PSTException {
if (item.data.length != 0) {
return item.data;
}
@@ -420,22 +462,27 @@ static String getPropertyName(final int propertyId, final boolean bNamed) {
static String getPropertyDescription(final int entryType, final int entryValueType) {
String ret = "";
if (entryType < 0x8000) {
- final String name = PSTFile.getPropertyName(entryType, false);
+ String name = PSTFile.getPropertyName(entryType, false);
if (name != null) {
- ret = String.format("%s:%04X: ", name, entryValueType);
+ ret = String.format("%s(code %04X):%04X: ", name, entryType, entryValueType);
} else {
- ret = String.format("0x%04X:%04X: ", entryType, entryValueType);
+ ret = String.format("unknown property 0x%04X:%04X: ", entryType, entryValueType);
}
} else {
- final long type = PSTFile.getNameToIdMapKey(entryType);
- if (type == -1) {
- ret = String.format("0xFFFF(%04X):%04X: ", entryType, entryValueType);
+ String name = PSTFile.getPropertyName(entryType, false);
+ if (name != null) {
+ ret = String.format("%s(code %04X):%04X: ", name, entryType, entryValueType);
} else {
- final String name = PSTFile.getPropertyName((int) type, true);
- if (name != null) {
- ret = String.format("%s(%04X):%04X: ", name, entryType, entryValueType);
+ final long type = PSTFile.getNameToIdMapKey(entryType);
+ if (type == -1) {
+ ret = String.format("0xFFFF(%04X):%04X: ", entryType, entryValueType);
} else {
- ret = String.format("0x%04X(%04X):%04X: ", type, entryType, entryValueType);
+ name = PSTFile.getPropertyName((int) type, true);
+ if (name != null) {
+ ret = String.format("%s(mapcode %04X):%04X: ", name, entryType, entryValueType);
+ } else {
+ ret = String.format("not mapped property 0x%04X(%04X):%04X: ", type, entryType, entryValueType);
+ }
}
}
}
@@ -453,7 +500,7 @@ protected void finalize() throws IOException {
/**
* get the type of encryption the file uses
- *
+ *
* @return encryption type used in the PST File
*/
public int getEncryptionType() {
@@ -463,6 +510,8 @@ public int getEncryptionType() {
/**
* get the handle to the RandomAccessFile we are currently accessing (if
* any)
+ *
+ * @return the file handle
*/
public RandomAccessFile getFileHandle() {
if (this.in instanceof PSTRAFileContent) {
@@ -474,6 +523,8 @@ public RandomAccessFile getFileHandle() {
/**
* get the handle to the file content we are currently accessing
+ *
+ * @return the content handle
*/
public PSTFileContent getContentHandle() {
return this.in;
@@ -483,22 +534,24 @@ public PSTFileContent getContentHandle() {
* get the message store of the PST file.
* Note that this doesn't really have much information, better to look under
* the root folder
- *
- * @throws PSTException
- * @throws IOException
+ *
+ * @return the message store
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
public PSTMessageStore getMessageStore() throws PSTException, IOException {
final DescriptorIndexNode messageStoreDescriptor = this
- .getDescriptorIndexNode(MESSAGE_STORE_DESCRIPTOR_IDENTIFIER);
+ .getDescriptorIndexNode(MESSAGE_STORE_DESCRIPTOR_IDENTIFIER);
return new PSTMessageStore(this, messageStoreDescriptor);
}
/**
* get the root folder for the PST file.
* You should find all of your data under here...
- *
- * @throws PSTException
- * @throws IOException
+ *
+ * @return the root folder
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
public PSTFolder getRootFolder() throws PSTException, IOException {
final DescriptorIndexNode rootFolderDescriptor = this.getDescriptorIndexNode(ROOT_FOLDER_DESCRIPTOR_IDENTIFIER);
@@ -516,6 +569,14 @@ PSTNodeInputStream readLeaf(final long bid) throws IOException, PSTException {
}
+ /**
+ * Gets leaf size.
+ *
+ * @param bid the bid
+ * @return the leaf size
+ * @throws IOException the io exception
+ * @throws PSTException the pst exception
+ */
public int getLeafSize(final long bid) throws IOException, PSTException {
final OffsetIndexItem offsetItem = this.getOffsetIndexNode(bid);
@@ -539,13 +600,10 @@ public int getLeafSize(final long bid) throws IOException, PSTException {
* PST Files have this tendency to store file offsets (pointers) in 8 little
* endian bytes.
* Convert this to a long for seeking to.
- *
- * @param in
- * handle for PST file
- * @param startOffset
- * where to read the 8 bytes from
+ *
+ * @param startOffset where to read the 8 bytes from
* @return long representing the read location
- * @throws IOException
+ * @throws IOException the io exception
*/
protected long extractLEFileOffset(final long startOffset) throws IOException {
long offset = 0;
@@ -579,16 +637,16 @@ protected long extractLEFileOffset(final long startOffset) throws IOException {
/**
* Generic function used by getOffsetIndexNode and getDescriptorIndexNode
* for navigating the PST B-Trees
- *
- * @param in
- * @param index
- * @param descTree
- * @return
- * @throws IOException
- * @throws PSTException
+ *
+ * @param in the pst file content
+ * @param index the index
+ * @param descTree desc flag
+ * @return BTree item
+ * @throws IOException the io exception
+ * @throws PSTException the pst exception
*/
private byte[] findBtreeItem(final PSTFileContent in, final long index, final boolean descTree)
- throws IOException, PSTException {
+ throws IOException, PSTException {
long btreeStartOffset;
int fileTypeAdjustment;
@@ -620,7 +678,7 @@ private byte[] findBtreeItem(final PSTFileContent in, final long index, final bo
in.readCompletely(temp);
while ((temp[0] == 0xffffff80 && temp[1] == 0xffffff80 && !descTree)
- || (temp[0] == 0xffffff81 && temp[1] == 0xffffff81 && descTree)) {
+ || (temp[0] == 0xffffff81 && temp[1] == 0xffffff81 && descTree)) {
// get the rest of the data....
byte[] branchNodeItems;
if (this.getPSTFileType() == PST_TYPE_ANSI) {
@@ -762,12 +820,11 @@ private byte[] findBtreeItem(final PSTFileContent in, final long index, final bo
/**
* navigate the internal descriptor B-Tree and find a specific item
- *
- * @param in
- * @param identifier
+ *
+ * @param identifier the identifier
* @return the descriptor node for the item
- * @throws IOException
- * @throws PSTException
+ * @throws IOException the io exception
+ * @throws PSTException the pst exception
*/
DescriptorIndexNode getDescriptorIndexNode(final long identifier) throws IOException, PSTException {
return new DescriptorIndexNode(this.findBtreeItem(this.in, identifier, true), this.getPSTFileType());
@@ -775,12 +832,11 @@ DescriptorIndexNode getDescriptorIndexNode(final long identifier) throws IOExcep
/**
* navigate the internal index B-Tree and find a specific item
- *
- * @param in
- * @param identifier
+ *
+ * @param identifier the identifier
* @return the offset index item
- * @throws IOException
- * @throws PSTException
+ * @throws IOException the io exception
+ * @throws PSTException the pst exception
*/
OffsetIndexItem getOffsetIndexNode(final long identifier) throws IOException, PSTException {
return new OffsetIndexItem(this.findBtreeItem(this.in, identifier, false), this.getPSTFileType());
@@ -790,19 +846,26 @@ OffsetIndexItem getOffsetIndexNode(final long identifier) throws IOException, PS
* parse a PSTDescriptor and get all of its items
*/
HashMap getPSTDescriptorItems(final long localDescriptorsOffsetIndexIdentifier)
- throws PSTException, IOException {
+ throws PSTException, IOException {
return this.getPSTDescriptorItems(this.readLeaf(localDescriptorsOffsetIndexIdentifier));
}
+ static final int SLBLOCK_ENTRY = 0;
+ static final int SIBLOCK_ENTRY = 1;
+
HashMap getPSTDescriptorItems(final PSTNodeInputStream in)
- throws PSTException, IOException {
+ throws PSTException, IOException {
// make sure the signature is correct
in.seek(0);
final int sig = in.read();
if (sig != 0x2) {
throw new PSTException("Unable to process descriptor node, bad signature: " + sig);
}
-
+ // NID nodes defines in subnode can be either SLBLOCK (0) or SIBLOCK_ENTRY (1)
+ int blockType = in.read();
+ if ((blockType != SLBLOCK_ENTRY) && (blockType != SIBLOCK_ENTRY)) {
+ throw new PSTException("Unable to process descriptor node, unknown BLOCK type: " + blockType);
+ }
final HashMap output = new HashMap<>();
final int numberOfItems = (int) in.seekAndReadLong(2, 2);
int offset;
@@ -817,15 +880,23 @@ HashMap getPSTDescriptorItems(final PSTNodeInputStre
in.readCompletely(data);
for (int x = 0; x < numberOfItems; x++) {
- final PSTDescriptorItem item = new PSTDescriptorItem(data, offset, this);
- output.put(item.descriptorIdentifier, item);
+ final PSTDescriptorItem item = new PSTDescriptorItem(data, offset, this, blockType);
+ if (blockType == SLBLOCK_ENTRY)
+ output.put(item.descriptorIdentifier, item);
+ else
+ output.putAll(getPSTDescriptorItems(item.offsetIndexIdentifier));
if (this.getPSTFileType() == PSTFile.PST_TYPE_ANSI) {
- offset += 12;
+ if (blockType == SLBLOCK_ENTRY)
+ offset += 12;
+ else
+ offset += 8;
} else {
- offset += 24;
+ if (blockType == SLBLOCK_ENTRY)
+ offset += 24;
+ else
+ offset += 16;
}
}
-
return output;
}
@@ -835,10 +906,10 @@ HashMap getPSTDescriptorItems(final PSTNodeInputStre
* childrenDescriptorTree.
* This is used as fallback when the nodes that list file contents are
* broken.
- *
- * @param in
- * @throws IOException
- * @throws PSTException
+ *
+ * @return the child descriptor tree
+ * @throws IOException the io exception
+ * @throws PSTException the pst exception
*/
LinkedHashMap> getChildDescriptorTree() throws IOException, PSTException {
if (this.childrenDescriptorTree == null) {
@@ -857,11 +928,10 @@ LinkedHashMap> getChildDescriptorTree()
/**
* Recursive function for building the descriptor tree, used by
* buildDescriptorTree
- *
- * @param in
- * @param btreeStartOffset
- * @throws IOException
- * @throws PSTException
+ *
+ * @param btreeStartOffset the BTree start offset
+ * @throws IOException the io exception
+ * @throws PSTException the pst exception
*/
private void processDescriptorBTree(final long btreeStartOffset) throws IOException, PSTException {
int fileTypeAdjustment;
@@ -935,7 +1005,7 @@ private void processDescriptorBTree(final long btreeStartOffset) throws IOExcept
} else if (this.childrenDescriptorTree.containsKey(tempNode.parentDescriptorIndexIdentifier)) {
// add this entry to the existing list of children
final LinkedList children = this.childrenDescriptorTree
- .get(tempNode.parentDescriptorIndexIdentifier);
+ .get(tempNode.parentDescriptorIndexIdentifier);
children.add(tempNode);
} else {
// create a new entry and add this one to that
diff --git a/src/main/java/com/pff/PSTFolder.java b/src/main/java/com/pff/PSTFolder.java
index d724925..00804a7 100644
--- a/src/main/java/com/pff/PSTFolder.java
+++ b/src/main/java/com/pff/PSTFolder.java
@@ -48,18 +48,18 @@
* sort of cursor arrangement.
* This allows for incremental reading of a folder which may have _lots_ of
* emails.
- *
+ *
* @author Richard Johnson
*/
public class PSTFolder extends PSTObject {
/**
* a constructor for the rest of us...
- *
- * @param theFile
- * @param descriptorIndexNode
- * @throws PSTException
- * @throws IOException
+ *
+ * @param theFile the the file
+ * @param descriptorIndexNode the descriptor index node
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
PSTFolder(final PSTFile theFile, final DescriptorIndexNode descriptorIndexNode) throws PSTException, IOException {
super(theFile, descriptorIndexNode);
@@ -68,10 +68,11 @@ public class PSTFolder extends PSTObject {
/**
* For pre-populating a folder object with values.
* Not recommended for use outside this library
- *
- * @param theFile
- * @param folderIndexNode
- * @param table
+ *
+ * @param theFile the the file
+ * @param folderIndexNode the folder index node
+ * @param table the table
+ * @param localDescriptorItems the local descriptor items
*/
PSTFolder(final PSTFile theFile, final DescriptorIndexNode folderIndexNode, final PSTTableBC table,
final HashMap localDescriptorItems) {
@@ -81,10 +82,10 @@ public class PSTFolder extends PSTObject {
/**
* get all of the sub folders...
* there are not usually thousands, so we just do it in one big operation.
- *
+ *
* @return all of the subfolders
- * @throws PSTException
- * @throws IOException
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
public Vector getSubFolders() throws PSTException, IOException {
final Vector output = new Vector<>();
@@ -152,8 +153,8 @@ private void initSubfoldersTable() throws IOException, PSTException {
* this method goes through all of the children and sorts them into one of
* the three hash sets.
*
- * @throws PSTException
- * @throws IOException
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
private void initEmailsTable() throws PSTException, IOException {
if (this.emailsTable != null || this.fallbackEmailsTable != null) {
@@ -212,11 +213,11 @@ private void initEmailsTable() throws PSTException, IOException {
* get some children from the folder
* This is implemented as a cursor of sorts, as there could be thousands
* and that is just too many to process at once.
- *
- * @param numberToReturn
+ *
+ * @param numberToReturn the number to return
* @return bunch of children in this folder
- * @throws PSTException
- * @throws IOException
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
public Vector getChildren(final int numberToReturn) throws PSTException, IOException {
this.initEmailsTable();
@@ -258,6 +259,13 @@ public Vector getChildren(final int numberToReturn) throws PSTExcepti
return output;
}
+ /**
+ * Gets child descriptor nodes.
+ *
+ * @return the child descriptor nodes
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
+ */
public LinkedList getChildDescriptorNodes() throws PSTException, IOException {
this.initEmailsTable();
if (this.emailsTable == null) {
@@ -284,10 +292,10 @@ public LinkedList getChildDescriptorNodes() throws PSTException, IOExce
* Get the next child of this folder
* As there could be thousands of emails, we have these kind of cursor
* operations
- *
+ *
* @return the next email in the folder or null if at the end of the folder
- * @throws PSTException
- * @throws IOException
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
public PSTObject getNextChild() throws PSTException, IOException {
this.initEmailsTable();
@@ -299,12 +307,12 @@ public PSTObject getNextChild() throws PSTException, IOException {
// no more!
return null;
}
+ this.currentEmailIndex++;
// get the emails from the rows
final PSTTable7CItem emailRow = rows.get(0).get(0x67F2);
final DescriptorIndexNode childDescriptor = this.pstFile
.getDescriptorIndexNode(emailRow.entryValueReference);
final PSTObject child = PSTObject.detectAndLoadPSTObject(this.pstFile, childDescriptor);
- this.currentEmailIndex++;
return child;
} else if (this.fallbackEmailsTable != null) {
@@ -313,10 +321,10 @@ public PSTObject getNextChild() throws PSTException, IOException {
// no more!
return null;
}
+ this.currentEmailIndex++;
// get the emails from the rows
final DescriptorIndexNode childDescriptor = this.fallbackEmailsTable.get(this.currentEmailIndex);
final PSTObject child = PSTObject.detectAndLoadPSTObject(this.pstFile, childDescriptor);
- this.currentEmailIndex++;
return child;
}
return null;
@@ -325,8 +333,10 @@ public PSTObject getNextChild() throws PSTException, IOException {
/**
* move the internal folder cursor to the desired position
* position 0 is before the first record.
- *
- * @param newIndex
+ *
+ * @param newIndex the new index
+ * @throws IOException the io exception
+ * @throws PSTException the pst exception
*/
public void moveChildCursorTo(int newIndex) throws IOException, PSTException {
this.initEmailsTable();
@@ -343,10 +353,10 @@ public void moveChildCursorTo(int newIndex) throws IOException, PSTException {
/**
* the number of child folders in this folder
- *
+ *
* @return number of subfolders as counted
- * @throws IOException
- * @throws PSTException
+ * @throws IOException the io exception
+ * @throws PSTException the pst exception
*/
public int getSubFolderCount() throws IOException, PSTException {
this.initSubfoldersTable();
@@ -361,10 +371,10 @@ public int getSubFolderCount() throws IOException, PSTException {
* the number of emails in this folder
* this is the count of emails made by the library and will therefore should
* be more accurate than getContentCount
- *
+ *
* @return number of emails in this folder (as counted)
- * @throws IOException
- * @throws PSTException
+ * @throws IOException the io exception
+ * @throws PSTException the pst exception
*/
public int getEmailCount() throws IOException, PSTException {
this.initEmailsTable();
@@ -374,6 +384,11 @@ public int getEmailCount() throws IOException, PSTException {
return this.emailsTable.getRowCount();
}
+ /**
+ * Gets folder type.
+ *
+ * @return the folder type
+ */
public int getFolderType() {
return this.getIntItem(0x3601);
}
@@ -382,7 +397,7 @@ public int getFolderType() {
* the number of emails in this folder
* this is as reported by the PST file, for a number calculated by the
* library use getEmailCount
- *
+ *
* @return number of items as reported by PST File
*/
public int getContentCount() {
@@ -391,6 +406,8 @@ public int getContentCount() {
/**
* Amount of unread content items Integer 32-bit signed
+ *
+ * @return the unread count
*/
public int getUnreadCount() {
return this.getIntItem(0x3603);
@@ -400,23 +417,35 @@ public int getUnreadCount() {
* does this folder have subfolders
* once again, read from the PST, use getSubFolderCount if you want to know
* what the library makes of it all
- *
+ *
* @return has subfolders as reported by the PST File
*/
public boolean hasSubfolders() {
return (this.getIntItem(0x360a) != 0);
}
+ /**
+ * Gets container class.
+ *
+ * @return the container class
+ */
public String getContainerClass() {
return this.getStringItem(0x3613);
}
+ /**
+ * Gets associate content count.
+ *
+ * @return the associate content count
+ */
public int getAssociateContentCount() {
return this.getIntItem(0x3617);
}
/**
* Container flags Integer 32-bit signed
+ *
+ * @return the container flags
*/
public int getContainerFlags() {
return this.getIntItem(0x3600);
diff --git a/src/main/java/com/pff/PSTGlobalObjectId.java b/src/main/java/com/pff/PSTGlobalObjectId.java
index c67312a..0576c0d 100644
--- a/src/main/java/com/pff/PSTGlobalObjectId.java
+++ b/src/main/java/com/pff/PSTGlobalObjectId.java
@@ -9,8 +9,8 @@
* Class to represent a decoded PidLidGlobalObjectId or
* PidLidCleanGlobalObjectId (for Meeting Exceptions)
* See [MS-OXOCAL]
- * https://msdn.microsoft.com/en-us/library/cc425490(v=exchg.80).aspx, sections
- * 2.2.1.27(PidLidGlobalObjectId) & 2.2.1.28(PidLidCleanGlobalObjectId)
+ * "https://interoperability.blob.core.windows.net/files/MS-OXOCAL/%5bMS-OXOCAL%5d.pdf"
+ * sections 2.2.1.27(PidLidGlobalObjectId) & 2.2.1.28(PidLidCleanGlobalObjectId)
*
* @author Nick Buller
* NOTE: Following MS Doc for variable names so are exactly the same as
diff --git a/src/main/java/com/pff/PSTMessage.java b/src/main/java/com/pff/PSTMessage.java
index 201536a..e3f9740 100644
--- a/src/main/java/com/pff/PSTMessage.java
+++ b/src/main/java/com/pff/PSTMessage.java
@@ -46,24 +46,56 @@
* objects. For properties where no value is set, a blank value is returned
* (rather than
* an exception being raised).
- *
+ *
* @author Richard Johnson
*/
public class PSTMessage extends PSTObject {
+ /**
+ * The constant IMPORTANCE_LOW.
+ */
public static final int IMPORTANCE_LOW = 0;
+ /**
+ * The constant IMPORTANCE_NORMAL.
+ */
public static final int IMPORTANCE_NORMAL = 1;
+ /**
+ * The constant IMPORTANCE_HIGH.
+ */
public static final int IMPORTANCE_HIGH = 2;
+ /**
+ * Instantiates a new Pst message.
+ *
+ * @param theFile the the file
+ * @param descriptorIndexNode the descriptor index node
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
+ */
PSTMessage(final PSTFile theFile, final DescriptorIndexNode descriptorIndexNode) throws PSTException, IOException {
super(theFile, descriptorIndexNode);
}
+ /**
+ * Instantiates a new Pst message.
+ *
+ * @param theFile the the file
+ * @param folderIndexNode the folder index node
+ * @param table the table
+ * @param localDescriptorItems the local descriptor items
+ */
PSTMessage(final PSTFile theFile, final DescriptorIndexNode folderIndexNode, final PSTTableBC table,
final HashMap localDescriptorItems) {
super(theFile, folderIndexNode, table, localDescriptorItems);
}
+ /**
+ * Gets rtf body.
+ *
+ * @return the rtf body
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
+ */
public String getRTFBody() throws PSTException, IOException {
// do we have an entry for it?
if (this.items.containsKey(0x1009)) {
@@ -84,12 +116,31 @@ public String getRTFBody() throws PSTException, IOException {
/**
* get the importance of the email
- *
+ *
* @return IMPORTANCE_NORMAL if unknown
*/
public int getImportance() {
return this.getIntItem(0x0017, IMPORTANCE_NORMAL);
}
+
+ /**
+ * Get string item based on hexvalue passed in
+ *
+ * @return empty string if not found
+ */
+ public String getStringBasedOnHexValue(int hexValue) {
+ return this.getStringItem(hexValue);
+ }
+
+
+ /**
+ * Get int item based on hexvalue passed in
+ *
+ * @return empty string if not found
+ */
+ public int getIntBasedOnHexValue(int hexValue) {
+ return this.getIntItem(hexValue);
+ }
/**
* get the message class for the email
@@ -103,7 +154,7 @@ public String getMessageClass() {
/**
* get the subject
- *
+ *
* @return empty string if not found
*/
public String getSubject() {
@@ -129,7 +180,7 @@ public String getSubject() {
/**
* get the client submit time
- *
+ *
* @return null if not found
*/
public Date getClientSubmitTime() {
@@ -138,7 +189,7 @@ public Date getClientSubmitTime() {
/**
* get received by name
- *
+ *
* @return empty string if not found
*/
public String getReceivedByName() {
@@ -147,7 +198,7 @@ public String getReceivedByName() {
/**
* get sent representing name
- *
+ *
* @return empty string if not found
*/
public String getSentRepresentingName() {
@@ -157,7 +208,7 @@ public String getSentRepresentingName() {
/**
* Sent representing address type
* Known values are SMTP, EX (Exchange) and UNKNOWN
- *
+ *
* @return empty string if not found
*/
public String getSentRepresentingAddressType() {
@@ -166,17 +217,26 @@ public String getSentRepresentingAddressType() {
/**
* Sent representing email address
- *
+ *
* @return empty string if not found
*/
public String getSentRepresentingEmailAddress() {
return this.getStringItem(0x0065);
}
+ /**
+ * Sent representing SMTP address
+ *
+ * @return empty string if not found
+ */
+ public String getSentRepresentingSMTPAddress() {
+ return this.getStringItem(0x5d02);
+ }
+
/**
* Conversation topic
* This is basically the subject from which Fwd:, Re, etc. has been removed
- *
+ *
* @return empty string if not found
*/
public String getConversationTopic() {
@@ -186,7 +246,7 @@ public String getConversationTopic() {
/**
* Received by address type
* Known values are SMTP, EX (Exchange) and UNKNOWN
- *
+ *
* @return empty string if not found
*/
public String getReceivedByAddressType() {
@@ -195,55 +255,117 @@ public String getReceivedByAddressType() {
/**
* Received by email address
- *
+ *
* @return empty string if not found
*/
public String getReceivedByAddress() {
return this.getStringItem(0x0076);
}
+ /**
+ * Received representing SMTP address
+ *
+ * @return empty string if not found
+ */
+ public String getReceivedRepresentingSMTPAddress() {
+ return this.getStringItem(0x5d08);
+ }
+
+ /**
+ * Received By SMTP address
+ *
+ * @return empty string if not found
+ */
+ public String getReceivedBySMTPAddress() {
+ return this.getStringItem(0x5d07);
+ }
+
/**
* Transport message headers ASCII or Unicode string These contain the SMTP
* e-mail headers.
+ *
+ * @return the transport message headers
*/
public String getTransportMessageHeaders() {
return this.getStringItem(0x007d);
}
+ /**
+ * Is read boolean.
+ *
+ * @return the boolean
+ */
public boolean isRead() {
return ((this.getIntItem(0x0e07) & 0x01) != 0);
}
+ /**
+ * Is unmodified boolean.
+ *
+ * @return the boolean
+ */
public boolean isUnmodified() {
return ((this.getIntItem(0x0e07) & 0x02) != 0);
}
+ /**
+ * Is submitted boolean.
+ *
+ * @return the boolean
+ */
public boolean isSubmitted() {
return ((this.getIntItem(0x0e07) & 0x04) != 0);
}
+ /**
+ * Is unsent boolean.
+ *
+ * @return the boolean
+ */
public boolean isUnsent() {
return ((this.getIntItem(0x0e07) & 0x08) != 0);
}
+ /**
+ * Has attachments boolean.
+ *
+ * @return the boolean
+ */
public boolean hasAttachments() {
return ((this.getIntItem(0x0e07) & 0x10) != 0);
}
+ /**
+ * Is from me boolean.
+ *
+ * @return the boolean
+ */
public boolean isFromMe() {
return ((this.getIntItem(0x0e07) & 0x20) != 0);
}
+ /**
+ * Is associated boolean.
+ *
+ * @return the boolean
+ */
public boolean isAssociated() {
return ((this.getIntItem(0x0e07) & 0x40) != 0);
}
+ /**
+ * Is resent boolean.
+ *
+ * @return the boolean
+ */
public boolean isResent() {
return ((this.getIntItem(0x0e07) & 0x80) != 0);
}
/**
* Acknowledgment mode Integer 32-bit signed
+ *
+ * @return the acknowledgement mode
*/
public int getAcknowledgementMode() {
return this.getIntItem(0x0001);
@@ -252,14 +374,19 @@ public int getAcknowledgementMode() {
/**
* Originator delivery report requested set if the sender wants a delivery
* report from all recipients 0 = false 0 != true
+ *
+ * @return the originator delivery report requested
*/
public boolean getOriginatorDeliveryReportRequested() {
return (this.getIntItem(0x0023) != 0);
}
// 0x0025 0x0102 PR_PARENT_KEY Parent key Binary data Contains a GUID
+
/**
* Priority Integer 32-bit signed -1 = NonUrgent 0 = Normal 1 = Urgent
+ *
+ * @return the priority
*/
public int getPriority() {
return this.getIntItem(0x0026);
@@ -267,6 +394,8 @@ public int getPriority() {
/**
* Read Receipt Requested Boolean 0 = false 0 != true
+ *
+ * @return the read receipt requested
*/
public boolean getReadReceiptRequested() {
return (this.getIntItem(0x0029) != 0);
@@ -274,6 +403,8 @@ public boolean getReadReceiptRequested() {
/**
* Recipient Reassignment Prohibited Boolean 0 = false 0 != true
+ *
+ * @return the recipient reassignment prohibited
*/
public boolean getRecipientReassignmentProhibited() {
return (this.getIntItem(0x002b) != 0);
@@ -283,6 +414,8 @@ public boolean getRecipientReassignmentProhibited() {
* Original sensitivity Integer 32-bit signed the sensitivity of the message
* before being replied to or forwarded 0 = None 1 = Personal 2 = Private 3
* = Company Confidential
+ *
+ * @return the original sensitivity
*/
public int getOriginalSensitivity() {
return this.getIntItem(0x002e);
@@ -291,6 +424,8 @@ public int getOriginalSensitivity() {
/**
* Sensitivity Integer 32-bit signed sender's opinion of the sensitivity of
* an email 0 = None 1 = Personal 2 = Private 3 = Company Confidential
+ *
+ * @return the sensitivity
*/
public int getSensitivity() {
return this.getIntItem(0x0036);
@@ -302,6 +437,11 @@ public int getSensitivity() {
// 0x0043 0x0102 PR_RCVD_REPRESENTING_ENTRYID Received representing entry
// identifier Binary data Contains recipient/sender structure
+ /**
+ * Get pid tag sent representing search key byte [ ].
+ *
+ * @return the byte [ ]
+ */
/*
* Address book search key
*/
@@ -311,6 +451,8 @@ public byte[] getPidTagSentRepresentingSearchKey() {
/**
* Received representing name ASCII or Unicode string
+ *
+ * @return the rcvd representing name
*/
public String getRcvdRepresentingName() {
return this.getStringItem(0x0044);
@@ -318,14 +460,19 @@ public String getRcvdRepresentingName() {
/**
* Original subject ASCII or Unicode string
+ *
+ * @return the original subject
*/
public String getOriginalSubject() {
return this.getStringItem(0x0049);
}
// 0x004e 0x0040 PR_ORIGINAL_SUBMIT_TIME Original submit time Filetime
+
/**
* Reply recipients names ASCII or Unicode string
+ *
+ * @return the reply recipient names
*/
public String getReplyRecipientNames() {
return this.getStringItem(0x0050);
@@ -333,6 +480,8 @@ public String getReplyRecipientNames() {
/**
* My address in To field Boolean
+ *
+ * @return the message to me
*/
public boolean getMessageToMe() {
return (this.getIntItem(0x0057) != 0);
@@ -340,6 +489,8 @@ public boolean getMessageToMe() {
/**
* My address in CC field Boolean
+ *
+ * @return the message cc me
*/
public boolean getMessageCcMe() {
return (this.getIntItem(0x0058) != 0);
@@ -348,6 +499,8 @@ public boolean getMessageCcMe() {
/**
* Indicates that the receiving mailbox owner is a primary or a carbon copy
* (Cc) recipient
+ *
+ * @return the message recip me
*/
public boolean getMessageRecipMe() {
return this.getIntItem(0x0059) != 0;
@@ -355,6 +508,8 @@ public boolean getMessageRecipMe() {
/**
* Response requested Boolean
+ *
+ * @return the response requested
*/
public boolean getResponseRequested() {
return this.getBooleanItem(0x0063);
@@ -363,6 +518,8 @@ public boolean getResponseRequested() {
/**
* Sent representing address type ASCII or Unicode string Known values are
* SMTP, EX (Exchange) and UNKNOWN
+ *
+ * @return the sent representing addrtype
*/
public String getSentRepresentingAddrtype() {
return this.getStringItem(0x0064);
@@ -370,8 +527,11 @@ public String getSentRepresentingAddrtype() {
// 0x0071 0x0102 PR_CONVERSATION_INDEX (PidTagConversationInd ex)
// Conversation index Binary data
+
/**
* Original display BCC ASCII or Unicode string
+ *
+ * @return the original display bcc
*/
public String getOriginalDisplayBcc() {
return this.getStringItem(0x0072);
@@ -379,6 +539,8 @@ public String getOriginalDisplayBcc() {
/**
* Original display CC ASCII or Unicode string
+ *
+ * @return the original display cc
*/
public String getOriginalDisplayCc() {
return this.getStringItem(0x0073);
@@ -386,6 +548,8 @@ public String getOriginalDisplayCc() {
/**
* Original display TO ASCII or Unicode string
+ *
+ * @return the original display to
*/
public String getOriginalDisplayTo() {
return this.getStringItem(0x0074);
@@ -394,6 +558,8 @@ public String getOriginalDisplayTo() {
/**
* Received representing address type.
* Known values are SMTP, EX (Exchange) and UNKNOWN
+ *
+ * @return the rcvd representing addrtype
*/
public String getRcvdRepresentingAddrtype() {
return this.getStringItem(0x0077);
@@ -401,6 +567,8 @@ public String getRcvdRepresentingAddrtype() {
/**
* Received representing e-mail address
+ *
+ * @return the rcvd representing email address
*/
public String getRcvdRepresentingEmailAddress() {
return this.getStringItem(0x0078);
@@ -412,6 +580,8 @@ public String getRcvdRepresentingEmailAddress() {
/**
* Non receipt notification requested
+ *
+ * @return the boolean
*/
public boolean isNonReceiptNotificationRequested() {
return (this.getIntItem(0x0c06) != 0);
@@ -419,16 +589,26 @@ public boolean isNonReceiptNotificationRequested() {
/**
* Originator non delivery report requested
+ *
+ * @return the boolean
*/
public boolean isOriginatorNonDeliveryReportRequested() {
return (this.getIntItem(0x0c08) != 0);
}
+ /**
+ * The constant RECIPIENT_TYPE_TO.
+ */
public static final int RECIPIENT_TYPE_TO = 1;
+ /**
+ * The constant RECIPIENT_TYPE_CC.
+ */
public static final int RECIPIENT_TYPE_CC = 2;
/**
- * Recipient type Integer 32-bit signed 0x01 => To 0x02 =>CC
+ * Recipient type Integer 32-bit signed 0x01 => To 0x02 =>CC
+ *
+ * @return the recipient type
*/
public int getRecipientType() {
return this.getIntItem(0x0c15);
@@ -436,11 +616,18 @@ public int getRecipientType() {
/**
* Reply requested
+ *
+ * @return the boolean
*/
public boolean isReplyRequested() {
return (this.getIntItem(0x0c17) != 0);
}
+ /**
+ * Get sender entry id byte [ ].
+ *
+ * @return the byte [ ]
+ */
/*
* Sending mailbox owner's address book entry ID
*/
@@ -450,6 +637,8 @@ public byte[] getSenderEntryId() {
/**
* Sender name
+ *
+ * @return the sender name
*/
public String getSenderName() {
return this.getStringItem(0x0c1a);
@@ -458,6 +647,8 @@ public String getSenderName() {
/**
* Sender address type.
* Known values are SMTP, EX (Exchange) and UNKNOWN
+ *
+ * @return the sender addrtype
*/
public String getSenderAddrtype() {
return this.getStringItem(0x0c1e);
@@ -465,6 +656,8 @@ public String getSenderAddrtype() {
/**
* Sender e-mail address
+ *
+ * @return the sender email address
*/
public String getSenderEmailAddress() {
return this.getStringItem(0x0c1f);
@@ -476,6 +669,8 @@ public String getSenderEmailAddress() {
/**
* Message size
+ *
+ * @return the message size
*/
public long getMessageSize() {
return this.getLongItem(0x0e08);
@@ -483,11 +678,18 @@ public long getMessageSize() {
/**
* Internet article number
+ *
+ * @return the internet article number
*/
public int getInternetArticleNumber() {
return this.getIntItem(0x0e23);
}
+ /**
+ * Gets primary send account.
+ *
+ * @return the primary send account
+ */
/*
* Server that the client should attempt to send the mail with
*/
@@ -495,6 +697,11 @@ public String getPrimarySendAccount() {
return this.getStringItem(0x0e28);
}
+ /**
+ * Gets next send acct.
+ *
+ * @return the next send acct
+ */
/*
* Server that the client is currently using to send mail
*/
@@ -504,6 +711,8 @@ public String getNextSendAcct() {
/**
* URL computer name postfix
+ *
+ * @return the url comp name postfix
*/
public int getURLCompNamePostfix() {
return this.getIntItem(0x0e61);
@@ -511,6 +720,8 @@ public int getURLCompNamePostfix() {
/**
* Object type
+ *
+ * @return the object type
*/
public int getObjectType() {
return this.getIntItem(0x0ffe);
@@ -518,6 +729,8 @@ public int getObjectType() {
/**
* Delete after submit
+ *
+ * @return the delete after submit
*/
public boolean getDeleteAfterSubmit() {
return ((this.getIntItem(0x0e01)) != 0);
@@ -525,6 +738,8 @@ public boolean getDeleteAfterSubmit() {
/**
* Responsibility
+ *
+ * @return the responsibility
*/
public boolean getResponsibility() {
return ((this.getIntItem(0x0e0f)) != 0);
@@ -532,6 +747,8 @@ public boolean getResponsibility() {
/**
* Compressed RTF in Sync Boolean
+ *
+ * @return the boolean
*/
public boolean isRTFInSync() {
return ((this.getIntItem(0x0e1f)) != 0);
@@ -539,6 +756,8 @@ public boolean isRTFInSync() {
/**
* URL computer name set
+ *
+ * @return the boolean
*/
public boolean isURLCompNameSet() {
return ((this.getIntItem(0x0e62)) != 0);
@@ -546,6 +765,8 @@ public boolean isURLCompNameSet() {
/**
* Display BCC
+ *
+ * @return the display bcc
*/
public String getDisplayBCC() {
return this.getStringItem(0x0e02);
@@ -553,6 +774,8 @@ public String getDisplayBCC() {
/**
* Display CC
+ *
+ * @return the display cc
*/
public String getDisplayCC() {
return this.getStringItem(0x0e03);
@@ -560,6 +783,8 @@ public String getDisplayCC() {
/**
* Display To
+ *
+ * @return the display to
*/
public String getDisplayTo() {
return this.getStringItem(0x0e04);
@@ -567,6 +792,8 @@ public String getDisplayTo() {
/**
* Message delivery time
+ *
+ * @return the message delivery time
*/
public Date getMessageDeliveryTime() {
return this.getDateItem(0x0e06);
@@ -640,6 +867,8 @@ public Date getMessageDeliveryTime() {
/**
* Message content properties
+ *
+ * @return the native body type
*/
public int getNativeBodyType() {
return this.getIntItem(0x1016);
@@ -647,6 +876,8 @@ public int getNativeBodyType() {
/**
* Plain text e-mail body
+ *
+ * @return the body
*/
public String getBody() {
String cp = null;
@@ -660,6 +891,11 @@ public String getBody() {
return this.getStringItem(0x1000, 0, cp);
}
+ /**
+ * Gets body prefix.
+ *
+ * @return the body prefix
+ */
/*
* Plain text body prefix
*/
@@ -669,6 +905,8 @@ public String getBodyPrefix() {
/**
* RTF Sync Body CRC
+ *
+ * @return the rtf sync body crc
*/
public int getRTFSyncBodyCRC() {
return this.getIntItem(0x1006);
@@ -676,6 +914,8 @@ public int getRTFSyncBodyCRC() {
/**
* RTF Sync Body character count
+ *
+ * @return the rtf sync body count
*/
public int getRTFSyncBodyCount() {
return this.getIntItem(0x1007);
@@ -683,6 +923,8 @@ public int getRTFSyncBodyCount() {
/**
* RTF Sync body tag
+ *
+ * @return the rtf sync body tag
*/
public String getRTFSyncBodyTag() {
return this.getStringItem(0x1008);
@@ -690,6 +932,8 @@ public String getRTFSyncBodyTag() {
/**
* RTF whitespace prefix count
+ *
+ * @return the rtf sync prefix count
*/
public int getRTFSyncPrefixCount() {
return this.getIntItem(0x1010);
@@ -697,6 +941,8 @@ public int getRTFSyncPrefixCount() {
/**
* RTF whitespace tailing count
+ *
+ * @return the rtf sync trailing count
*/
public int getRTFSyncTrailingCount() {
return this.getIntItem(0x1011);
@@ -704,6 +950,8 @@ public int getRTFSyncTrailingCount() {
/**
* HTML e-mail body
+ *
+ * @return the body html
*/
public String getBodyHTML() {
String cp = null;
@@ -719,6 +967,8 @@ public String getBodyHTML() {
/**
* Message ID for this email as allocated per rfc2822
+ *
+ * @return the internet message id
*/
public String getInternetMessageId() {
return this.getStringItem(0x1035);
@@ -726,6 +976,8 @@ public String getInternetMessageId() {
/**
* In-Reply-To
+ *
+ * @return the in reply to id
*/
public String getInReplyToId() {
return this.getStringItem(0x1042);
@@ -733,6 +985,8 @@ public String getInReplyToId() {
/**
* Return Path
+ *
+ * @return the return path
*/
public String getReturnPath() {
return this.getStringItem(0x1046);
@@ -740,6 +994,8 @@ public String getReturnPath() {
/**
* Icon index
+ *
+ * @return the icon index
*/
public int getIconIndex() {
return this.getIntItem(0x1080);
@@ -750,6 +1006,8 @@ public int getIconIndex() {
* This relates to the replying / forwarding of messages.
* It is classified as "unknown" atm, so just provided here
* in case someone works out what all the various flags mean.
+ *
+ * @return the action flag
*/
public int getActionFlag() {
return this.getIntItem(0x1081);
@@ -757,6 +1015,8 @@ public int getActionFlag() {
/**
* is the action flag for this item "forward"?
+ *
+ * @return the boolean
*/
public boolean hasForwarded() {
final int actionFlag = this.getIntItem(0x1081);
@@ -765,6 +1025,8 @@ public boolean hasForwarded() {
/**
* is the action flag for this item "replied"?
+ *
+ * @return the boolean
*/
public boolean hasReplied() {
final int actionFlag = this.getIntItem(0x1081);
@@ -774,6 +1036,8 @@ public boolean hasReplied() {
/**
* the date that this item had an action performed (eg. replied or
* forwarded)
+ *
+ * @return the action date
*/
public Date getActionDate() {
return this.getDateItem(0x1082);
@@ -781,6 +1045,8 @@ public Date getActionDate() {
/**
* Disable full fidelity
+ *
+ * @return the disable full fidelity
*/
public boolean getDisableFullFidelity() {
return (this.getIntItem(0x10f2) != 0);
@@ -789,6 +1055,8 @@ public boolean getDisableFullFidelity() {
/**
* URL computer name
* Contains the .eml file name
+ *
+ * @return the url comp name
*/
public String getURLCompName() {
return this.getStringItem(0x10f3);
@@ -796,6 +1064,8 @@ public String getURLCompName() {
/**
* Attribute hidden
+ *
+ * @return the attr hidden
*/
public boolean getAttrHidden() {
return (this.getIntItem(0x10f4) != 0);
@@ -803,6 +1073,8 @@ public boolean getAttrHidden() {
/**
* Attribute system
+ *
+ * @return the attr system
*/
public boolean getAttrSystem() {
return (this.getIntItem(0x10f5) != 0);
@@ -810,6 +1082,8 @@ public boolean getAttrSystem() {
/**
* Attribute read only
+ *
+ * @return the attr readonly
*/
public boolean getAttrReadonly() {
return (this.getIntItem(0x10f6) != 0);
@@ -820,9 +1094,6 @@ public boolean getAttrReadonly() {
/**
* find, extract and load up all of the attachments in this email
* necessary for the other operations.
- *
- * @throws PSTException
- * @throws IOException
*/
private void processRecipients() {
try {
@@ -844,9 +1115,10 @@ private void processRecipients() {
/**
* get the number of recipients for this message
- *
- * @throws PSTException
- * @throws IOException
+ *
+ * @return the number of recipients
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
public int getNumberOfRecipients() throws PSTException, IOException {
this.processRecipients();
@@ -871,8 +1143,8 @@ public int getNumberOfRecipients() throws PSTException, IOException {
* find, extract and load up all of the attachments in this email
* necessary for the other operations.
*
- * @throws PSTException
- * @throws IOException
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
private void processAttachments() throws PSTException, IOException {
final int attachmentTableKey = 0x0671;
@@ -889,6 +1161,8 @@ private void processAttachments() throws PSTException, IOException {
/**
* Start date Filetime
+ *
+ * @return the task start date
*/
public Date getTaskStartDate() {
return this.getDateItem(this.pstFile.getNameToIdMapItem(0x00008104, PSTFile.PSETID_Task));
@@ -896,6 +1170,8 @@ public Date getTaskStartDate() {
/**
* Due date Filetime
+ *
+ * @return the task due date
*/
public Date getTaskDueDate() {
return this.getDateItem(this.pstFile.getNameToIdMapItem(0x00008105, PSTFile.PSETID_Task));
@@ -903,13 +1179,18 @@ public Date getTaskDueDate() {
/**
* Is a reminder set on this object?
- *
- * @return
+ *
+ * @return true if is a reminder set, false if not
*/
public boolean getReminderSet() {
return this.getBooleanItem(this.pstFile.getNameToIdMapItem(0x00008503, PSTFile.PSETID_Common));
}
+ /**
+ * Gets reminder delta.
+ *
+ * @return the reminder delta
+ */
public int getReminderDelta() {
return this.getIntItem(this.pstFile.getNameToIdMapItem(0x00008501, PSTFile.PSETID_Common));
}
@@ -917,6 +1198,8 @@ public int getReminderDelta() {
/**
* "flagged" items are actually emails with a due date.
* This convience method just checks to see if that is true.
+ *
+ * @return the boolean
*/
public boolean isFlagged() {
return this.getTaskDueDate() != null;
@@ -924,6 +1207,9 @@ public boolean isFlagged() {
/**
* get the categories defined for this message
+ *
+ * @return the string [ ]
+ * @throws PSTException the pst exception
*/
public String[] getColorCategories() throws PSTException {
final int keywordCategory = this.pstFile.getPublicStringToIdMapItem("Keywords");
@@ -969,9 +1255,8 @@ public String[] getColorCategories() throws PSTException {
/**
* get the number of attachments for this message
- *
- * @throws PSTException
- * @throws IOException
+ *
+ * @return the number of attachments
*/
public int getNumberOfAttachments() {
try {
@@ -990,11 +1275,11 @@ public int getNumberOfAttachments() {
/**
* get a specific attachment from this email.
- *
- * @param attachmentNumber
+ *
+ * @param attachmentNumber the attachment number
* @return the attachment at the defined index
- * @throws PSTException
- * @throws IOException
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
public PSTAttachment getAttachment(final int attachmentNumber) throws PSTException, IOException {
this.processAttachments();
@@ -1046,11 +1331,11 @@ public PSTAttachment getAttachment(final int attachmentNumber) throws PSTExcepti
/**
* get a specific recipient from this email.
- *
- * @param recipientNumber
+ *
+ * @param recipientNumber the recipient number
* @return the recipient at the defined index
- * @throws PSTException
- * @throws IOException
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
public PSTRecipient getRecipient(final int recipientNumber) throws PSTException, IOException {
if (recipientNumber >= this.getNumberOfRecipients()
@@ -1061,12 +1346,17 @@ public PSTRecipient getRecipient(final int recipientNumber) throws PSTException,
final HashMap recipientDetails = this.recipientTable.getItems().get(recipientNumber);
if (recipientDetails != null) {
- return new PSTRecipient(recipientDetails);
+ return new PSTRecipient(this,recipientDetails);
}
return null;
}
+ /**
+ * Gets recipients string.
+ *
+ * @return the recipients string
+ */
public String getRecipientsString() {
if (this.recipientTable != null) {
return this.recipientTable.getItemsString();
@@ -1075,14 +1365,29 @@ public String getRecipientsString() {
return "No recipients table!";
}
+ /**
+ * Get conversation id byte [ ].
+ *
+ * @return the byte [ ]
+ */
public byte[] getConversationId() {
return this.getBinaryItem(0x3013);
}
+ /**
+ * Gets conversation index.
+ *
+ * @return the conversation index
+ */
public PSTConversationIndex getConversationIndex() {
return new PSTConversationIndex(this.getBinaryItem(0x0071));
}
+ /**
+ * Is conversation index tracking boolean.
+ *
+ * @return the boolean
+ */
public boolean isConversationIndexTracking() {
return this.getBooleanItem(0x3016, false);
}
diff --git a/src/main/java/com/pff/PSTMessageStore.java b/src/main/java/com/pff/PSTMessageStore.java
index 8400e0c..e2e876c 100644
--- a/src/main/java/com/pff/PSTMessageStore.java
+++ b/src/main/java/com/pff/PSTMessageStore.java
@@ -51,6 +51,8 @@ public class PSTMessageStore extends PSTObject {
/**
* Get the tag record key, unique to this pst
+ *
+ * @return the tag record key as uuid
*/
public UUID getTagRecordKeyAsUUID() {
// attempt to find in the table.
diff --git a/src/main/java/com/pff/PSTNodeInputStream.java b/src/main/java/com/pff/PSTNodeInputStream.java
index 30f6946..68eb4de 100644
--- a/src/main/java/com/pff/PSTNodeInputStream.java
+++ b/src/main/java/com/pff/PSTNodeInputStream.java
@@ -314,9 +314,9 @@ public int read() throws IOException {
/**
* Read a block from the input stream, ensuring buffer is completely filled.
* Recommended block size = 8176 (size used internally by PSTs)
- *
+ *
* @param target buffer to fill
- * @throws IOException
+ * @throws IOException the io exception
*/
public void readCompletely(final byte[] target) throws IOException {
int offset = 0;
@@ -334,9 +334,9 @@ public void readCompletely(final byte[] target) throws IOException {
* Read a block from the input stream.
* Recommended block size = 8176 (size used internally by PSTs)
*
- * @param output
- * @return
- * @throws IOException
+ * @param output array to get data
+ * @return read size, or -1 if end
+ * @throws IOException the io exception
*/
@Override
public int read(final byte[] output) throws IOException {
@@ -457,7 +457,7 @@ public boolean markSupported() {
/**
* Get the offsets (block positions) used in the array
*
- * @return
+ * @return offsets (block positions)
*/
public Long[] getBlockOffsets() {
if (this.skipPoints.size() == 0) {
diff --git a/src/main/java/com/pff/PSTObject.java b/src/main/java/com/pff/PSTObject.java
index da480dc..32f7265 100644
--- a/src/main/java/com/pff/PSTObject.java
+++ b/src/main/java/com/pff/PSTObject.java
@@ -40,6 +40,8 @@
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;
+import java.util.Locale;
+import java.io.UnsupportedEncodingException;
/**
* PST Object is the root class of all PST Items.
@@ -47,30 +49,57 @@
* which is the
* detectAndLoadPSTObject call which allows extraction of a PST Item from the
* file.
- *
+ *
* @author Richard Johnson
*/
public class PSTObject {
+ /**
+ * The constant NID_TYPE_HID.
+ */
public static final int NID_TYPE_HID = 0x00; // Heap node
+ /**
+ * The constant NID_TYPE_INTERNAL.
+ */
public static final int NID_TYPE_INTERNAL = 0x01; // Internal node (section
- // 2.4.1)
+ /**
+ * The constant NID_TYPE_NORMAL_FOLDER.
+ */
+// 2.4.1)
public static final int NID_TYPE_NORMAL_FOLDER = 0x02; // Normal Folder
- // object (PC)
+ /**
+ * The constant NID_TYPE_SEARCH_FOLDER.
+ */
+// object (PC)
public static final int NID_TYPE_SEARCH_FOLDER = 0x03; // Search Folder
- // object (PC)
+ /**
+ * The constant NID_TYPE_NORMAL_MESSAGE.
+ */
+// object (PC)
public static final int NID_TYPE_NORMAL_MESSAGE = 0x04; // Normal Message
- // object (PC)
+ /**
+ * The constant NID_TYPE_ATTACHMENT.
+ */
+// object (PC)
public static final int NID_TYPE_ATTACHMENT = 0x05; // Attachment object
- // (PC)
+ /**
+ * The constant NID_TYPE_SEARCH_UPDATE_QUEUE.
+ */
+// (PC)
public static final int NID_TYPE_SEARCH_UPDATE_QUEUE = 0x06; // Queue of
- // changed
+ /**
+ * The constant NID_TYPE_SEARCH_CRITERIA_OBJECT.
+ */
+// changed
// objects for
// search
// Folder
// objects
public static final int NID_TYPE_SEARCH_CRITERIA_OBJECT = 0x07; // Defines
- // the
+ /**
+ * The constant NID_TYPE_ASSOC_MESSAGE.
+ */
+// the
// search
// criteria
// for a
@@ -78,53 +107,117 @@ public class PSTObject {
// Folder
// object
public static final int NID_TYPE_ASSOC_MESSAGE = 0x08; // Folder associated
- // information (FAI)
+ /**
+ * The constant NID_TYPE_CONTENTS_TABLE_INDEX.
+ */
+// information (FAI)
// Message object
// (PC)
public static final int NID_TYPE_CONTENTS_TABLE_INDEX = 0x0A; // Internal,
- // persisted
+ /**
+ * The constant NID_TYPE_RECEIVE_FOLDER_TABLE.
+ */
+// persisted
// view-related
public static final int NID_TYPE_RECEIVE_FOLDER_TABLE = 0X0B; // Receive
- // Folder
+ /**
+ * The constant NID_TYPE_OUTGOING_QUEUE_TABLE.
+ */
+// Folder
// object
// (Inbox)
public static final int NID_TYPE_OUTGOING_QUEUE_TABLE = 0x0C; // Outbound
- // queue
+ /**
+ * The constant NID_TYPE_HIERARCHY_TABLE.
+ */
+// queue
// (Outbox)
public static final int NID_TYPE_HIERARCHY_TABLE = 0x0D; // Hierarchy table
- // (TC)
+ /**
+ * The constant NID_TYPE_CONTENTS_TABLE.
+ */
+// (TC)
public static final int NID_TYPE_CONTENTS_TABLE = 0x0E; // Contents table
- // (TC)
+ /**
+ * The constant NID_TYPE_ASSOC_CONTENTS_TABLE.
+ */
+// (TC)
public static final int NID_TYPE_ASSOC_CONTENTS_TABLE = 0x0F; // FAI
- // contents
+ /**
+ * The constant NID_TYPE_SEARCH_CONTENTS_TABLE.
+ */
+// contents
// table (TC)
public static final int NID_TYPE_SEARCH_CONTENTS_TABLE = 0x10; // Contents
- // table (TC)
+ /**
+ * The constant NID_TYPE_ATTACHMENT_TABLE.
+ */
+// table (TC)
// of a
// search
// Folder
// object
public static final int NID_TYPE_ATTACHMENT_TABLE = 0x11; // Attachment
- // table (TC)
+ /**
+ * The constant NID_TYPE_RECIPIENT_TABLE.
+ */
+// table (TC)
public static final int NID_TYPE_RECIPIENT_TABLE = 0x12; // Recipient table
- // (TC)
+ /**
+ * The constant NID_TYPE_SEARCH_TABLE_INDEX.
+ */
+// (TC)
public static final int NID_TYPE_SEARCH_TABLE_INDEX = 0x13; // Internal,
- // persisted
+ /**
+ * The constant NID_TYPE_LTP.
+ */
+// persisted
// view-related
public static final int NID_TYPE_LTP = 0x1F; // LTP
+ /**
+ * Gets items string.
+ *
+ * @return the items string
+ */
public String getItemsString() {
return this.items.toString();
}
+ /**
+ * The Pst file.
+ */
protected PSTFile pstFile;
+ /**
+ * The Data.
+ */
protected byte[] data;
+ /**
+ * The Descriptor index node.
+ */
protected DescriptorIndexNode descriptorIndexNode;
+ /**
+ * The Items.
+ */
protected HashMap items;
+ /**
+ * The Local descriptor items.
+ */
protected HashMap localDescriptorItems = null;
+ /**
+ * The Children.
+ */
protected LinkedHashMap> children;
+ /**
+ * Instantiates a new Pst object.
+ *
+ * @param theFile the the file
+ * @param descriptorIndexNode the descriptor index node
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
+ */
protected PSTObject(final PSTFile theFile, final DescriptorIndexNode descriptorIndexNode)
throws PSTException, IOException {
this.pstFile = theFile;
@@ -149,10 +242,11 @@ protected PSTObject(final PSTFile theFile, final DescriptorIndexNode descriptorI
/**
* for pre-population
- *
- * @param theFile
- * @param folderIndexNode
- * @param table
+ *
+ * @param theFile the the file
+ * @param folderIndexNode the folder index node
+ * @param table the table
+ * @param localDescriptorItems the local descriptor items
*/
protected PSTObject(final PSTFile theFile, final DescriptorIndexNode folderIndexNode, final PSTTableBC table,
final HashMap localDescriptorItems) {
@@ -163,13 +257,16 @@ protected PSTObject(final PSTFile theFile, final DescriptorIndexNode folderIndex
this.localDescriptorItems = localDescriptorItems;
}
+ /**
+ * The Table.
+ */
protected PSTTableBC table;
/**
* get the descriptor node for this item
* this identifies the location of the node in the BTree and associated info
- *
- * @return item's descriptor node
+ *
+ * @return item 's descriptor node
*/
public DescriptorIndexNode getDescriptorNode() {
return this.descriptorIndexNode;
@@ -179,8 +276,8 @@ public DescriptorIndexNode getDescriptorNode() {
* get the descriptor identifier for this item
* can be used for loading objects through detectAndLoadPSTObject(PSTFile
* theFile, long descriptorIndex)
- *
- * @return item's descriptor node identifier
+ *
+ * @return item 's descriptor node identifier
*/
public long getDescriptorNodeId() {
if (this.descriptorIndexNode != null) { // Prevent null pointer
@@ -191,18 +288,42 @@ public long getDescriptorNodeId() {
return 0;
}
+ /**
+ * Gets node type.
+ *
+ * @return the node type
+ */
public int getNodeType() {
return PSTObject.getNodeType(this.descriptorIndexNode.descriptorIdentifier);
}
+ /**
+ * Gets node type.
+ *
+ * @param descriptorIdentifier the descriptor identifier
+ * @return the node type
+ */
public static int getNodeType(final int descriptorIdentifier) {
return descriptorIdentifier & 0x1F;
}
+ /**
+ * Gets int item.
+ *
+ * @param identifier the identifier
+ * @return the int item
+ */
protected int getIntItem(final int identifier) {
return this.getIntItem(identifier, 0);
}
+ /**
+ * Gets int item.
+ *
+ * @param identifier the identifier
+ * @param defaultValue the default value
+ * @return the int item
+ */
protected int getIntItem(final int identifier, final int defaultValue) {
if (this.items.containsKey(identifier)) {
final PSTTableBCItem item = this.items.get(identifier);
@@ -211,10 +332,23 @@ protected int getIntItem(final int identifier, final int defaultValue) {
return defaultValue;
}
+ /**
+ * Gets boolean item.
+ *
+ * @param identifier the identifier
+ * @return the boolean item
+ */
protected boolean getBooleanItem(final int identifier) {
return this.getBooleanItem(identifier, false);
}
+ /**
+ * Gets boolean item.
+ *
+ * @param identifier the identifier
+ * @param defaultValue the default value
+ * @return the boolean item
+ */
protected boolean getBooleanItem(final int identifier, final boolean defaultValue) {
if (this.items.containsKey(identifier)) {
final PSTTableBCItem item = this.items.get(identifier);
@@ -223,10 +357,23 @@ protected boolean getBooleanItem(final int identifier, final boolean defaultValu
return defaultValue;
}
+ /**
+ * Gets double item.
+ *
+ * @param identifier the identifier
+ * @return the double item
+ */
protected double getDoubleItem(final int identifier) {
return this.getDoubleItem(identifier, 0);
}
+ /**
+ * Gets double item.
+ *
+ * @param identifier the identifier
+ * @param defaultValue the default value
+ * @return the double item
+ */
protected double getDoubleItem(final int identifier, final double defaultValue) {
if (this.items.containsKey(identifier)) {
final PSTTableBCItem item = this.items.get(identifier);
@@ -236,10 +383,23 @@ protected double getDoubleItem(final int identifier, final double defaultValue)
return defaultValue;
}
+ /**
+ * Gets long item.
+ *
+ * @param identifier the identifier
+ * @return the long item
+ */
protected long getLongItem(final int identifier) {
return this.getLongItem(identifier, 0);
}
+ /**
+ * Gets long item.
+ *
+ * @param identifier the identifier
+ * @param defaultValue the default value
+ * @return the long item
+ */
protected long getLongItem(final int identifier, final long defaultValue) {
if (this.items.containsKey(identifier)) {
final PSTTableBCItem item = this.items.get(identifier);
@@ -259,14 +419,35 @@ protected long getLongItem(final int identifier, final long defaultValue) {
return defaultValue;
}
+ /**
+ * Gets string item.
+ *
+ * @param identifier the identifier
+ * @return the string item
+ */
protected String getStringItem(final int identifier) {
return this.getStringItem(identifier, 0);
}
+ /**
+ * Gets string item.
+ *
+ * @param identifier the identifier
+ * @param stringType the string type
+ * @return the string item
+ */
protected String getStringItem(final int identifier, final int stringType) {
return this.getStringItem(identifier, stringType, null);
}
+ /**
+ * Gets string item.
+ *
+ * @param identifier the identifier
+ * @param stringType the string type
+ * @param codepage the codepage
+ * @return the string item
+ */
protected String getStringItem(final int identifier, int stringType, String codepage) {
final PSTTableBCItem item = this.items.get(identifier);
if (item != null) {
@@ -313,8 +494,19 @@ protected String getStringItem(final int identifier, int stringType, String code
return "";
}
+ /**
+ * Create java string string.
+ *
+ * @param data the data
+ * @param stringType the string type
+ * @param codepage the codepage
+ * @return the string
+ */
static String createJavaString(final byte[] data, final int stringType, String codepage) {
try {
+ if (data==null)
+ return "";
+
if (stringType == 0x1F) {
return new String(data, "UTF-16LE");
}
@@ -322,8 +514,15 @@ static String createJavaString(final byte[] data, final int stringType, String c
if (codepage == null) {
return new String(data);
} else {
- codepage = codepage.toUpperCase();
- return new String(data, codepage);
+ codepage = codepage.toUpperCase(Locale.US);
+ if (codepage.contentEquals("ISO-8859-8-I")) { // Outlook hebrew encoding is not supported by Java
+ codepage = "ISO-8859-8"; // next best thing is hebrew characters with wrong order
+ }
+ try {
+ return new String(data, codepage);
+ } catch (UnsupportedEncodingException e) {
+ return new String(data, "UTF-8");
+ }
}
/*
* if (codepage == null || codepage.toUpperCase().equals("UTF-8") ||
@@ -352,18 +551,37 @@ static String createJavaString(final byte[] data, final int stringType, String c
}
}
- private String getStringCodepage() {
- // try and get the codepage
- PSTTableBCItem cpItem = this.items.get(0x3FFD); // PidTagMessageCodepage
- if (cpItem == null) {
- cpItem = this.items.get(0x3FDE); // PidTagInternetCodepage
- }
- if (cpItem != null) {
- return PSTFile.getInternetCodePageCharset(cpItem.entryValueReference);
+ private String codepage=null;
+
+ /**
+ * Gets string codepage.
+ *
+ * @return the string codepage
+ */
+ public String getStringCodepage() {
+ if (codepage==null) {
+ // try and get the codepage
+ PSTTableBCItem cpItem = this.items.get(0x3FFD); // PidTagMessageCodepage
+ if (cpItem == null) {
+ cpItem = this.items.get(0x66C3); // PidTagCodepage
+ if (cpItem == null) {
+ cpItem = this.items.get(0x3FDE); // PidTagInternetCodepage
+ }
+ }
+ if (cpItem != null)
+ codepage = PSTFile.getInternetCodePageCharset(cpItem.entryValueReference);
+ if (codepage==null)
+ codepage = pstFile.getGlobalCodepage();
}
- return null;
+ return codepage;
}
+ /**
+ * Gets date item.
+ *
+ * @param identifier the identifier
+ * @return the date item
+ */
public Date getDateItem(final int identifier) {
if (this.items.containsKey(identifier)) {
final PSTTableBCItem item = this.items.get(identifier);
@@ -378,6 +596,12 @@ public Date getDateItem(final int identifier) {
return null;
}
+ /**
+ * Get binary item byte [ ].
+ *
+ * @param identifier the identifier
+ * @return the byte [ ]
+ */
protected byte[] getBinaryItem(final int identifier) {
if (this.items.containsKey(identifier)) {
final PSTTableBCItem item = this.items.get(identifier);
@@ -405,6 +629,12 @@ protected byte[] getBinaryItem(final int identifier) {
return null;
}
+ /**
+ * Gets time zone item.
+ *
+ * @param identifier the identifier
+ * @return the time zone item
+ */
protected PSTTimeZone getTimeZoneItem(final int identifier) {
final byte[] tzData = this.getBinaryItem(identifier);
if (tzData != null && tzData.length != 0) {
@@ -413,6 +643,11 @@ protected PSTTimeZone getTimeZoneItem(final int identifier) {
return null;
}
+ /**
+ * Gets message class.
+ *
+ * @return the message class
+ */
public String getMessageClass() {
return this.getStringItem(0x001a);
}
@@ -429,6 +664,8 @@ public String toString() {
/**
* get the display name
+ *
+ * @return the display name
*/
public String getDisplayName() {
return this.getStringItem(0x3001);
@@ -437,6 +674,8 @@ public String getDisplayName() {
/**
* Address type
* Known values are SMTP, EX (Exchange) and UNKNOWN
+ *
+ * @return the addr type
*/
public String getAddrType() {
return this.getStringItem(0x3002);
@@ -444,6 +683,8 @@ public String getAddrType() {
/**
* E-mail address
+ *
+ * @return the email address
*/
public String getEmailAddress() {
return this.getStringItem(0x3003);
@@ -451,6 +692,8 @@ public String getEmailAddress() {
/**
* Comment
+ *
+ * @return the comment
*/
public String getComment() {
return this.getStringItem(0x3004);
@@ -458,6 +701,8 @@ public String getComment() {
/**
* Creation time
+ *
+ * @return the creation time
*/
public Date getCreationTime() {
return this.getDateItem(0x3007);
@@ -465,6 +710,8 @@ public Date getCreationTime() {
/**
* Modification time
+ *
+ * @return the last modification time
*/
public Date getLastModificationTime() {
return this.getDateItem(0x3008);
@@ -474,8 +721,7 @@ public Date getLastModificationTime() {
* Static stuff below
* ------------------
*/
-
- // substitution table for the compressible encryption type.
+// substitution table for the compressible encryption type.
static int[] compEnc = { 0x47, 0xf1, 0xb4, 0xe6, 0x0b, 0x6a, 0x72, 0x48, 0x85, 0x4e, 0x9e, 0xeb, 0xe2, 0xf8, 0x94,
0x53, 0xe0, 0xbb, 0xa0, 0x02, 0xe8, 0x5a, 0x09, 0xab, 0xdb, 0xe3, 0xba, 0xc6, 0x7c, 0xc3, 0x10, 0xdd, 0x39,
0x05, 0x96, 0x30, 0xf5, 0x37, 0x60, 0x82, 0x8c, 0xc9, 0x13, 0x4a, 0x6b, 0x1d, 0xf3, 0xfb, 0x8f, 0x26, 0x97,
@@ -494,14 +740,20 @@ public Date getLastModificationTime() {
/**
* Output a number in a variety of formats for easier consumption
- *
- * @param data
+ *
+ * @param pref the prefix string
+ * @param number the number
*/
public static void printFormattedNumber(final String pref, final long number) {
System.out.print(pref);
printFormattedNumber(number);
}
+ /**
+ * Print formatted number.
+ *
+ * @param number the number
+ */
public static void printFormattedNumber(final long number) {
System.out.print("dec: ");
System.out.print(number);
@@ -513,14 +765,21 @@ public static void printFormattedNumber(final long number) {
/**
* Output a dump of data in hex format in the order it was read in
- *
- * @param data
- * @param pretty
+ *
+ * @param data the data
+ * @param pretty pretty flag
*/
public static void printHexFormatted(final byte[] data, final boolean pretty) {
printHexFormatted(data, pretty, new int[0]);
}
+ /**
+ * Print hex formatted.
+ *
+ * @param data the data
+ * @param pretty the pretty
+ * @param indexes the indexes
+ */
protected static void printHexFormatted(final byte[] data, final boolean pretty, final int[] indexes) {
// groups of two
if (pretty) {
@@ -577,8 +836,8 @@ protected static void printHexFormatted(final byte[] data, final boolean pretty,
/**
* decode a lump of data that has been encrypted with the compressible
* encryption
- *
- * @param data
+ *
+ * @param data the data
* @return decoded data
*/
protected static byte[] decode(final byte[] data) {
@@ -591,6 +850,12 @@ protected static byte[] decode(final byte[] data) {
return data;
}
+ /**
+ * Encode byte [ ].
+ *
+ * @param data the data
+ * @return the byte [ ]
+ */
protected static byte[] encode(final byte[] data) {
// create the encoding array...
final int[] enc = new int[compEnc.length];
@@ -611,8 +876,8 @@ protected static byte[] encode(final byte[] data) {
/**
* Utility function for converting little endian bytes into a usable java
* long
- *
- * @param data
+ *
+ * @param data the data
* @return long version of the data
*/
public static long convertLittleEndianBytesToLong(final byte[] data) {
@@ -622,10 +887,10 @@ public static long convertLittleEndianBytesToLong(final byte[] data) {
/**
* Utility function for converting little endian bytes into a usable java
* long
- *
- * @param data
- * @param start
- * @param end
+ *
+ * @param data the data
+ * @param start the start
+ * @param end the end
* @return long version of the data
*/
public static long convertLittleEndianBytesToLong(final byte[] data, final int start, final int end) {
@@ -643,10 +908,10 @@ public static long convertLittleEndianBytesToLong(final byte[] data, final int s
/**
* Utility function for converting big endian bytes into a usable java long
- *
- * @param data
- * @param start
- * @param end
+ *
+ * @param data the data
+ * @param start the start
+ * @param end the end
* @return long version of the data
*/
public static long convertBigEndianBytesToLong(final byte[] data, final int start, final int end) {
@@ -675,7 +940,7 @@ public static long convertBigEndianBytesToLong(final byte[] data, final int star
* throw new
* PSTException("Unable to process array, does not appear to be one!");
* }
- *
+ *
* // we are an array!
* // get the array items and merge them together
* int numberOfEntries = (int)PSTObject.convertLittleEndianBytesToLong(data,
@@ -696,7 +961,7 @@ public static long convertBigEndianBytesToLong(final byte[] data, final int star
* output[y] = blockOffset;
* tableOffset += 8;
* }
- *
+ *
* // replace the item data with the stuff from the array...
* return output;
* }
@@ -706,12 +971,12 @@ public static long convertBigEndianBytesToLong(final byte[] data, final int star
/**
* Detect and load a PST Object from a file with the specified descriptor
* index
- *
- * @param theFile
- * @param descriptorIndex
+ *
+ * @param theFile the the file
+ * @param descriptorIndex the descriptor index
* @return PSTObject with that index
- * @throws IOException
- * @throws PSTException
+ * @throws IOException the io exception
+ * @throws PSTException the pst exception
*/
public static PSTObject detectAndLoadPSTObject(final PSTFile theFile, final long descriptorIndex)
throws IOException, PSTException {
@@ -721,39 +986,48 @@ public static PSTObject detectAndLoadPSTObject(final PSTFile theFile, final long
/**
* Detect and load a PST Object from a file with the specified descriptor
* index
- *
- * @param theFile
- * @param folderIndexNode
+ *
+ * @param theFile the the file
+ * @param folderIndexNode the folder index node
* @return PSTObject with that index
- * @throws IOException
- * @throws PSTException
+ * @throws IOException the io exception
+ * @throws PSTException the pst exception
*/
static PSTObject detectAndLoadPSTObject(final PSTFile theFile, final DescriptorIndexNode folderIndexNode)
- throws IOException, PSTException {
+ throws IOException, PSTException {
final int nidType = (folderIndexNode.descriptorIdentifier & 0x1F);
if (nidType == 0x02 || nidType == 0x03 || nidType == 0x04) {
final PSTTableBC table = new PSTTableBC(
- new PSTNodeInputStream(theFile, theFile.getOffsetIndexNode(folderIndexNode.dataOffsetIndexIdentifier)));
+ new PSTNodeInputStream(theFile, theFile.getOffsetIndexNode(folderIndexNode.dataOffsetIndexIdentifier)));
HashMap localDescriptorItems = null;
if (folderIndexNode.localDescriptorsOffsetIndexIdentifier != 0) {
localDescriptorItems = theFile
- .getPSTDescriptorItems(folderIndexNode.localDescriptorsOffsetIndexIdentifier);
+ .getPSTDescriptorItems(folderIndexNode.localDescriptorsOffsetIndexIdentifier);
}
if (nidType == 0x02 || nidType == 0x03) {
return new PSTFolder(theFile, folderIndexNode, table, localDescriptorItems);
} else {
return PSTObject.createAppropriatePSTMessageObject(theFile, folderIndexNode, table,
- localDescriptorItems);
+ localDescriptorItems);
}
} else {
throw new PSTException(
- "Unknown child type with offset id: " + folderIndexNode.localDescriptorsOffsetIndexIdentifier);
+ "Unknown child type with offset id: " + folderIndexNode.localDescriptorsOffsetIndexIdentifier);
}
}
+ /**
+ * Create appropriate pst message object pst message.
+ *
+ * @param theFile the the file
+ * @param folderIndexNode the folder index node
+ * @param table the table
+ * @param localDescriptorItems the local descriptor items
+ * @return the pst message
+ */
static PSTMessage createAppropriatePSTMessageObject(final PSTFile theFile,
final DescriptorIndexNode folderIndexNode, final PSTTableBC table,
final HashMap localDescriptorItems) {
@@ -761,7 +1035,7 @@ static PSTMessage createAppropriatePSTMessageObject(final PSTFile theFile,
final PSTTableBCItem item = table.getItems().get(0x001a);
String messageClass = "";
if (item != null) {
- messageClass = item.getStringValue();
+ messageClass = item.getStringValue("US-ASCII");
}
if (messageClass.equals("IPM.Note")
@@ -771,6 +1045,8 @@ static PSTMessage createAppropriatePSTMessageObject(final PSTFile theFile,
|| messageClass.equals("IPM.OLE.CLASS.{00061055-0000-0000-C000-000000000046}")
|| messageClass.startsWith("IPM.Schedule.Meeting")) {
return new PSTAppointment(theFile, folderIndexNode, table, localDescriptorItems);
+ } else if (messageClass.equals("IPM.AbchPerson")) {
+ return new PSTContact(theFile, folderIndexNode, table, localDescriptorItems);
} else if (messageClass.equals("IPM.Contact")) {
return new PSTContact(theFile, folderIndexNode, table, localDescriptorItems);
} else if (messageClass.equals("IPM.Task")) {
@@ -788,6 +1064,15 @@ static PSTMessage createAppropriatePSTMessageObject(final PSTFile theFile,
return new PSTMessage(theFile, folderIndexNode, table, localDescriptorItems);
}
+ /**
+ * Guess pst object type string.
+ *
+ * @param theFile the the file
+ * @param folderIndexNode the folder index node
+ * @return the string
+ * @throws IOException the io exception
+ * @throws PSTException the pst exception
+ */
static String guessPSTObjectType(final PSTFile theFile, final DescriptorIndexNode folderIndexNode)
throws IOException, PSTException {
@@ -849,10 +1134,8 @@ static String guessPSTObjectType(final PSTFile theFile, final DescriptorIndexNod
* words stored in the structure.
*
*
- * @param high
- * The higher double word of the FILETIME structure.
- * @param low
- * The lower double word of the FILETIME structure.
+ * @param high The higher double word of the FILETIME structure.
+ * @param low The lower double word of the FILETIME structure.
* @return The Windows FILETIME as a {@link Date}.
*/
protected static Date filetimeToDate(final int high, final int low) {
@@ -863,6 +1146,12 @@ protected static Date filetimeToDate(final int high, final int low) {
return new Date(ms_since_19700101);
}
+ /**
+ * Appt time to calendar calendar.
+ *
+ * @param minutes the minutes
+ * @return the calendar
+ */
public static Calendar apptTimeToCalendar(final int minutes) {
final long ms_since_16010101 = minutes * (60 * 1000L);
final long ms_since_19700101 = ms_since_16010101 - EPOCH_DIFF;
@@ -871,6 +1160,13 @@ public static Calendar apptTimeToCalendar(final int minutes) {
return c;
}
+ /**
+ * Appt time to utc calendar.
+ *
+ * @param minutes the minutes
+ * @param tz the tz
+ * @return the calendar
+ */
public static Calendar apptTimeToUTC(final int minutes, final PSTTimeZone tz) {
// Must convert minutes since 1/1/1601 in local time to UTC
// There's got to be a better way of doing this...
diff --git a/src/main/java/com/pff/PSTRecipient.java b/src/main/java/com/pff/PSTRecipient.java
index 134a2b0..e44ffcd 100644
--- a/src/main/java/com/pff/PSTRecipient.java
+++ b/src/main/java/com/pff/PSTRecipient.java
@@ -50,7 +50,10 @@ public class PSTRecipient {
public static final int MAPI_CC = 2;
public static final int MAPI_BCC = 3;
- PSTRecipient(final HashMap recipientDetails) {
+ private PSTMessage message;
+
+ PSTRecipient(PSTMessage message,final HashMap recipientDetails) {
+ this.message=message;
this.details = recipientDetails;
}
@@ -96,7 +99,7 @@ public String getSmtpAddress() {
private String getString(final int id) {
if (this.details.containsKey(id)) {
final PSTTable7CItem item = this.details.get(id);
- return item.getStringValue();
+ return item.getStringValue(message.getStringCodepage());
}
return "";
diff --git a/src/main/java/com/pff/PSTRss.java b/src/main/java/com/pff/PSTRss.java
index 2d07ea3..cac438d 100644
--- a/src/main/java/com/pff/PSTRss.java
+++ b/src/main/java/com/pff/PSTRss.java
@@ -44,10 +44,12 @@
public class PSTRss extends PSTMessage {
/**
- * @param theFile
- * @param descriptorIndexNode
- * @throws PSTException
- * @throws IOException
+ * Instantiates a new Pst rss.
+ *
+ * @param theFile the the file
+ * @param descriptorIndexNode the descriptor index node
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
public PSTRss(final PSTFile theFile, final DescriptorIndexNode descriptorIndexNode)
throws PSTException, IOException {
@@ -55,10 +57,12 @@ public PSTRss(final PSTFile theFile, final DescriptorIndexNode descriptorIndexNo
}
/**
- * @param theFile
- * @param folderIndexNode
- * @param table
- * @param localDescriptorItems
+ * Instantiates a new Pst rss.
+ *
+ * @param theFile the the file
+ * @param folderIndexNode the folder index node
+ * @param table the table
+ * @param localDescriptorItems the local descriptor items
*/
public PSTRss(final PSTFile theFile, final DescriptorIndexNode folderIndexNode, final PSTTableBC table,
final HashMap localDescriptorItems) {
@@ -67,6 +71,8 @@ public PSTRss(final PSTFile theFile, final DescriptorIndexNode folderIndexNode,
/**
* Channel
+ *
+ * @return the post rss channel link
*/
public String getPostRssChannelLink() {
return this.getStringItem(this.pstFile.getNameToIdMapItem(0x00008900, PSTFile.PSETID_PostRss));
@@ -74,6 +80,8 @@ public String getPostRssChannelLink() {
/**
* Item link
+ *
+ * @return the post rss item link
*/
public String getPostRssItemLink() {
return this.getStringItem(this.pstFile.getNameToIdMapItem(0x00008901, PSTFile.PSETID_PostRss));
@@ -81,6 +89,8 @@ public String getPostRssItemLink() {
/**
* Item hash Integer 32-bit signed
+ *
+ * @return the post rss item hash
*/
public int getPostRssItemHash() {
return this.getIntItem(this.pstFile.getNameToIdMapItem(0x00008902, PSTFile.PSETID_PostRss));
@@ -88,6 +98,8 @@ public int getPostRssItemHash() {
/**
* Item GUID
+ *
+ * @return the post rss item guid
*/
public String getPostRssItemGuid() {
return this.getStringItem(this.pstFile.getNameToIdMapItem(0x00008903, PSTFile.PSETID_PostRss));
@@ -95,6 +107,8 @@ public String getPostRssItemGuid() {
/**
* Channel GUID
+ *
+ * @return the post rss channel
*/
public String getPostRssChannel() {
return this.getStringItem(this.pstFile.getNameToIdMapItem(0x00008904, PSTFile.PSETID_PostRss));
@@ -102,6 +116,8 @@ public String getPostRssChannel() {
/**
* Item XML
+ *
+ * @return the post rss item xml
*/
public String getPostRssItemXml() {
return this.getStringItem(this.pstFile.getNameToIdMapItem(0x00008905, PSTFile.PSETID_PostRss));
@@ -109,6 +125,8 @@ public String getPostRssItemXml() {
/**
* Subscription
+ *
+ * @return the post rss subscription
*/
public String getPostRssSubscription() {
return this.getStringItem(this.pstFile.getNameToIdMapItem(0x00008906, PSTFile.PSETID_PostRss));
diff --git a/src/main/java/com/pff/PSTTable.java b/src/main/java/com/pff/PSTTable.java
index 04fb28b..4369166 100644
--- a/src/main/java/com/pff/PSTTable.java
+++ b/src/main/java/com/pff/PSTTable.java
@@ -170,8 +170,8 @@ protected void releaseRawData() {
/**
* get the number of items stored in this table.
- *
- * @return
+ *
+ * @return row count
*/
public int getRowCount() {
return this.numberOfKeys;
diff --git a/src/main/java/com/pff/PSTTable7C.java b/src/main/java/com/pff/PSTTable7C.java
index cc01780..f9a24d0 100644
--- a/src/main/java/com/pff/PSTTable7C.java
+++ b/src/main/java/com/pff/PSTTable7C.java
@@ -42,6 +42,8 @@
import java.util.HashMap;
import java.util.List;
+import static com.pff.PSTFile.PST_TYPE_ANSI;
+
/**
* Specific functions for the 7c table type ("Table Context").
* This is used for attachments.
@@ -50,7 +52,7 @@
*/
class PSTTable7C extends PSTTable {
- private final int BLOCK_SIZE = 8176;
+ private int BLOCK_SIZE = 8176;
private List> items = null;
private int numberOfDataSets = 0;
@@ -152,6 +154,11 @@ protected PSTTable7C(final PSTNodeInputStream in, final HashMap> getItems() throws PSTException, IOException {
if (this.items == null) {
@@ -209,38 +218,18 @@ List> getItems(int startAtRecord, int numberOfR
// rowNodeInfo.length())
for (int rowCounter = 0; rowCounter < numberOfRecordsToReturn; rowCounter++) {
final HashMap currentItem = new HashMap<>();
- // add on some padding for block boundries?
- if (this.rowNodeInfo.in.getPSTFile().getPSTFileType() == PSTFile.PST_TYPE_ANSI) {
- if (currentValueArrayStart >= this.BLOCK_SIZE) {
- currentValueArrayStart = currentValueArrayStart + (4) * (currentValueArrayStart / this.BLOCK_SIZE);
- }
- if (this.rowNodeInfo.startOffset + currentValueArrayStart + this.TCI_1b > this.rowNodeInfo.in
- .length()) {
- continue;
- }
- } else {
- if ((currentValueArrayStart % this.BLOCK_SIZE) > this.BLOCK_SIZE - this.TCI_bm) {
- // adjust!
- // currentValueArrayStart += 8176 - (currentValueArrayStart
- // % 8176);
- currentValueArrayStart += blockPadding;
- if (currentValueArrayStart + this.TCI_bm > this.rowNodeInfo.length()) {
- continue;
- }
- }
- }
+ // to respect block boundaries
+ currentValueArrayStart = (((startAtRecord+rowCounter) / numberOfRowsPerBlock) * this.BLOCK_SIZE)
+ + (((startAtRecord+rowCounter) % numberOfRowsPerBlock) * this.TCI_bm);
+
final byte[] bitmap = new byte[(this.cCols + 7) / 8];
- // System.arraycopy(rowNodeInfo, currentValueArrayStart+TCI_1b,
- // bitmap, 0, bitmap.length);
+
this.rowNodeInfo.in.seek(this.rowNodeInfo.startOffset + currentValueArrayStart + this.TCI_1b);
this.rowNodeInfo.in.readCompletely(bitmap);
- // int id =
- // (int)PSTObject.convertLittleEndianBytesToLong(rowNodeInfo,
- // currentValueArrayStart, currentValueArrayStart+4);
final int id = (int) this.rowNodeInfo.seekAndReadLong(currentValueArrayStart, 4);
- // Put into the item map as PidTagLtpRowId (0x67F2)
+ // Put into the item map as PidTagLtpRowId (0x67F2)
PSTTable7CItem item = new PSTTable7CItem();
item.itemIndex = -1;
item.entryValueType = 3;
@@ -411,7 +400,6 @@ List> getItems(int startAtRecord, int numberOfR
}
itemList.add(dataSetNumber, currentItem);
dataSetNumber++;
- currentValueArrayStart += this.TCI_bm;
}
// System.out.println(description);
diff --git a/src/main/java/com/pff/PSTTableBC.java b/src/main/java/com/pff/PSTTableBC.java
index 5f94bcc..da2bbd1 100644
--- a/src/main/java/com/pff/PSTTableBC.java
+++ b/src/main/java/com/pff/PSTTableBC.java
@@ -185,8 +185,8 @@ class PSTTableBC extends PSTTable {
/**
* get the items parsed out of this table.
- *
- * @return
+ *
+ * @return items
*/
public HashMap getItems() {
return this.items;
diff --git a/src/main/java/com/pff/PSTTableItem.java b/src/main/java/com/pff/PSTTableItem.java
index 00ae7ae..908f7f6 100644
--- a/src/main/java/com/pff/PSTTableItem.java
+++ b/src/main/java/com/pff/PSTTableItem.java
@@ -42,7 +42,7 @@
/**
* Generic table item.
* Provides some basic string functions
- *
+ *
* @author Richard Johnson
*/
class PSTTableItem {
@@ -65,18 +65,24 @@ public long getLongValue() {
return -1;
}
- public String getStringValue() {
- return this.getStringValue(this.entryValueType);
+ /**
+ * Gets a string value of the data for a given codepage (charset name)
+ *
+ * @param codepage the codepage
+ * @return the string value
+ */
+ public String getStringValue(String codepage) {
+ return this.getStringValue(this.entryValueType,codepage);
}
/**
- * get a string value of the data
- *
- * @param forceString
- * if true, you won't get the hex representation of the data
- * @return
+ * Gets a string value of the data
+ *
+ * @param stringType the string type
+ * @param codepage the codepage
+ * @return string value
*/
- public String getStringValue(final int stringType) {
+ public String getStringValue(final int stringType,String codepage) {
if (stringType == VALUE_TYPE_PT_UNICODE) {
// we are a nice little-endian unicode string.
@@ -95,7 +101,7 @@ public String getStringValue(final int stringType) {
if (stringType == VALUE_TYPE_PT_STRING8) {
// System.out.println("Warning! decoding string8 without charset:
// "+this.entryType + " - "+ Integer.toHexString(this.entryType));
- return new String(this.data, Charset.forName("UTF-8")).trim();
+ return new String(this.data, Charset.forName(codepage)).trim();
}
final StringBuffer outputBuffer = new StringBuffer();
@@ -191,7 +197,7 @@ public String toString() {
return ret + s;
}
- return ret + this.getStringValue();
+ return ret + this.getStringValue("UTF-8");
}
private final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
diff --git a/src/main/java/com/pff/PSTTask.java b/src/main/java/com/pff/PSTTask.java
index e1dacdc..ef31ce3 100644
--- a/src/main/java/com/pff/PSTTask.java
+++ b/src/main/java/com/pff/PSTTask.java
@@ -39,16 +39,18 @@
/**
* Object that represents Task items
- *
+ *
* @author Richard Johnson
*/
public class PSTTask extends PSTMessage {
/**
- * @param theFile
- * @param descriptorIndexNode
- * @throws PSTException
- * @throws IOException
+ * Instantiates a new Pst task.
+ *
+ * @param theFile the the file
+ * @param descriptorIndexNode the descriptor index node
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
*/
public PSTTask(final PSTFile theFile, final DescriptorIndexNode descriptorIndexNode)
throws PSTException, IOException {
@@ -56,10 +58,12 @@ public PSTTask(final PSTFile theFile, final DescriptorIndexNode descriptorIndexN
}
/**
- * @param theFile
- * @param folderIndexNode
- * @param table
- * @param localDescriptorItems
+ * Instantiates a new Pst task.
+ *
+ * @param theFile the the file
+ * @param folderIndexNode the folder index node
+ * @param table the table
+ * @param localDescriptorItems the local descriptor items
*/
public PSTTask(final PSTFile theFile, final DescriptorIndexNode folderIndexNode, final PSTTableBC table,
final HashMap localDescriptorItems) {
@@ -67,7 +71,9 @@ public PSTTask(final PSTFile theFile, final DescriptorIndexNode folderIndexNode,
}
/**
- * Status Integer 32-bit signed 0x0 => Not started
+ * Status Integer 32-bit signed 0x0 => Not started
+ *
+ * @return the task status
*/
public int getTaskStatus() {
return this.getIntItem(this.pstFile.getNameToIdMapItem(0x00008101, PSTFile.PSETID_Task));
@@ -75,6 +81,8 @@ public int getTaskStatus() {
/**
* Percent Complete Floating point double precision (64-bit)
+ *
+ * @return the percent complete
*/
public double getPercentComplete() {
return this.getDoubleItem(this.pstFile.getNameToIdMapItem(0x00008102, PSTFile.PSETID_Task));
@@ -82,6 +90,8 @@ public double getPercentComplete() {
/**
* Is team task Boolean
+ *
+ * @return the boolean
*/
public boolean isTeamTask() {
return this.getBooleanItem(this.pstFile.getNameToIdMapItem(0x00008103, PSTFile.PSETID_Task));
@@ -89,6 +99,8 @@ public boolean isTeamTask() {
/**
* Date completed Filetime
+ *
+ * @return the task date completed
*/
public Date getTaskDateCompleted() {
return this.getDateItem(this.pstFile.getNameToIdMapItem(0x0000810f, PSTFile.PSETID_Task));
@@ -96,6 +108,8 @@ public Date getTaskDateCompleted() {
/**
* Actual effort in minutes Integer 32-bit signed
+ *
+ * @return the task actual effort
*/
public int getTaskActualEffort() {
return this.getIntItem(this.pstFile.getNameToIdMapItem(0x00008110, PSTFile.PSETID_Task));
@@ -103,6 +117,8 @@ public int getTaskActualEffort() {
/**
* Total effort in minutes Integer 32-bit signed
+ *
+ * @return the task estimated effort
*/
public int getTaskEstimatedEffort() {
return this.getIntItem(this.pstFile.getNameToIdMapItem(0x00008111, PSTFile.PSETID_Task));
@@ -110,6 +126,8 @@ public int getTaskEstimatedEffort() {
/**
* Task version Integer 32-bit signed FTK: Access count
+ *
+ * @return the task version
*/
public int getTaskVersion() {
return this.getIntItem(this.pstFile.getNameToIdMapItem(0x00008112, PSTFile.PSETID_Task));
@@ -117,6 +135,8 @@ public int getTaskVersion() {
/**
* Complete Boolean
+ *
+ * @return the boolean
*/
public boolean isTaskComplete() {
return this.getBooleanItem(this.pstFile.getNameToIdMapItem(0x0000811c, PSTFile.PSETID_Task));
@@ -124,6 +144,8 @@ public boolean isTaskComplete() {
/**
* Owner ASCII or Unicode string
+ *
+ * @return the task owner
*/
public String getTaskOwner() {
return this.getStringItem(this.pstFile.getNameToIdMapItem(0x0000811f, PSTFile.PSETID_Task));
@@ -131,6 +153,8 @@ public String getTaskOwner() {
/**
* Delegator ASCII or Unicode string
+ *
+ * @return the task assigner
*/
public String getTaskAssigner() {
return this.getStringItem(this.pstFile.getNameToIdMapItem(0x00008121, PSTFile.PSETID_Task));
@@ -138,6 +162,8 @@ public String getTaskAssigner() {
/**
* Unknown ASCII or Unicode string
+ *
+ * @return the task last user
*/
public String getTaskLastUser() {
return this.getStringItem(this.pstFile.getNameToIdMapItem(0x00008122, PSTFile.PSETID_Task));
@@ -145,6 +171,8 @@ public String getTaskLastUser() {
/**
* Ordinal Integer 32-bit signed
+ *
+ * @return the task ordinal
*/
public int getTaskOrdinal() {
return this.getIntItem(this.pstFile.getNameToIdMapItem(0x00008123, PSTFile.PSETID_Task));
@@ -152,6 +180,8 @@ public int getTaskOrdinal() {
/**
* Is recurring Boolean
+ *
+ * @return the boolean
*/
public boolean isTaskFRecurring() {
return this.getBooleanItem(this.pstFile.getNameToIdMapItem(0x00008126, PSTFile.PSETID_Task));
@@ -159,6 +189,8 @@ public boolean isTaskFRecurring() {
/**
* Role ASCII or Unicode string
+ *
+ * @return the task role
*/
public String getTaskRole() {
return this.getStringItem(this.pstFile.getNameToIdMapItem(0x00008127, PSTFile.PSETID_Task));
@@ -166,6 +198,8 @@ public String getTaskRole() {
/**
* Ownership Integer 32-bit signed
+ *
+ * @return the task ownership
*/
public int getTaskOwnership() {
return this.getIntItem(this.pstFile.getNameToIdMapItem(0x00008129, PSTFile.PSETID_Task));
@@ -173,6 +207,8 @@ public int getTaskOwnership() {
/**
* Delegation State
+ *
+ * @return the acceptance state
*/
public int getAcceptanceState() {
return this.getIntItem(this.pstFile.getNameToIdMapItem(0x0000812a, PSTFile.PSETID_Task));
diff --git a/src/main/java/example/Test.java b/src/main/java/example/Test.java
index a9a8977..8ea68bf 100644
--- a/src/main/java/example/Test.java
+++ b/src/main/java/example/Test.java
@@ -45,8 +45,10 @@ public void processFolder(final PSTFolder folder) throws PSTException, java.io.I
this.depth++;
PSTMessage email = (PSTMessage) folder.getNextChild();
while (email != null) {
- this.printDepth();
- System.out.println("Email: " + email.getDescriptorNodeId() + " - " + email.getSubject());
+ if (!email.getMessageClass().equals("IPM.Note")) {
+ this.printDepth();
+ System.out.println("Email: [" + email.getMessageClass() + "]" + email.getDescriptorNodeId() + " - " + email.getSubject());
+ }
email = (PSTMessage) folder.getNextChild();
}
this.depth--;
diff --git a/src/main/java/example/TestGui.java b/src/main/java/example/TestGui.java
index a3f06da..686e698 100644
--- a/src/main/java/example/TestGui.java
+++ b/src/main/java/example/TestGui.java
@@ -1,579 +1,449 @@
-/**
- *
- */
-
-package example;
-
-import java.awt.BorderLayout;
-import java.awt.Font;
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Vector;
-
-import javax.swing.JFileChooser;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.JTable;
-import javax.swing.JTextField;
-import javax.swing.JTextPane;
-import javax.swing.JTree;
-import javax.swing.ListSelectionModel;
-import javax.swing.WindowConstants;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeCellRenderer;
-
-import com.pff.PSTActivity;
-import com.pff.PSTAttachment;
-import com.pff.PSTContact;
-import com.pff.PSTException;
-import com.pff.PSTFile;
-import com.pff.PSTFolder;
-import com.pff.PSTMessage;
-import com.pff.PSTMessageStore;
-import com.pff.PSTRss;
-import com.pff.PSTTask;
-
-/**
- * @author toweruser
- *
- */
-public class TestGui implements ActionListener {
- private PSTFile pstFile;
- private EmailTableModel emailTableModel;
- private JTextPane emailText;
- private JPanel emailPanel;
- private JPanel attachPanel;
- private JLabel attachLabel;
- private JTextField attachText;
- private PSTMessage selectedMessage;
- private JFrame f;
-
- public TestGui() throws PSTException, IOException {
-
- // setup the basic window
- this.f = new JFrame("PST Browser");
-
- // attempt to open the pst file
- try {
- /*
- * JFileChooser chooser = new JFileChooser();
- * if (chooser.showOpenDialog(f) == JFileChooser.APPROVE_OPTION) {
- * } else {
- * System.exit(0);
- * }
- *
- * String filename = chooser.getSelectedFile().getCanonicalPath();
- */
- String filename = "Outlook-new.pst";
- filename = "G:\\From old Tower\\pff\\java\\Old Email.pst";
- // filename = "RichardJohnson@sumac.uk.com - exchange.ost";
- // String filename = "Outlook 32bit.pst";
- // String russian = "Узеи́р Абду́л-Гусе́йн оглы́ Гаджибе́ков (азерб.
- // Üzeyir bəy Əbdülhüseyn oğlu Hacıbəyov; 18 сентября 1885,
- // Агджабеди, Шушинский уезд, Елизаветпольская губерния, Российская
- // империя — 23 ноября 1948, Баку, Азербайджанская ССР, СССР) —
- // азербайджанский композитор, дирижёр, публицист, фельетонист,
- // драматург и педагог, народный артист СССР (1938), дважды лауреат
- // Сталинских премий (1941, 1946). Действительный член АН
- // Азербайджана (1945), профессор (1940), ректор Азербайджанской
- // государственной ";
-
- // System.out.println(java.nio.charset.Charset.availableCharsets());
-
- // byte[] russianBytes = russian.getBytes("UTF-8");
- // PSTObject.printHexFormatted(russianBytes, true);
-
- // String filename = "Outlook 32bit.pst";
- // filename = "RichardJohnson@sumac.uk.com - exchange.ost";
- this.pstFile = new PSTFile(filename);
- // pstFile = new PSTFile("RichardJohnson@sumac.uk.com -
- // exchange.ost");
-
- // PSTFolder folder =
- // (PSTFolder)PSTObject.detectAndLoadPSTObject(pstFile, 32898);
- // System.out.println(folder.getEmailCount());
- // System.exit(0);
-
- // "г ь ы";
- // System.out.println(java.nio.charset.Charset.availableCharsets().keySet());
- // PSTMessage msg =
- // (PSTMessage)PSTObject.detectAndLoadPSTObject(pstFile, 2097604);
- // System.out.println(msg);
-
- // PSTObject.printHexFormatted("г ь ы".getBytes("koi8-r"), true);
- // System.exit(0);
- // PSTMessage msg =
- // (PSTMessage)PSTObject.detectAndLoadPSTObject(pstFile, 2097668);
- // System.out.println(msg.getRTFBody());
- // System.exit(0);
-
- // PSTAppointment msg =
- // (PSTAppointment)PSTObject.detectAndLoadPSTObject(pstFile,
- // 2097252);
- //// System.out.println(msg.getStartTime());
- // System.exit(0);
-
- // int[] emails = {
- // 2098180
- /*
- * 2097348,
- * 2097380,
- * 2097412,
- * 2097444,
- * 2097476,
- * 2097508,
- * 2097540,
- * 2097572
- *
- */
- // };
-
- /*
- *
- * RandomAccessFile tmpIn = new
- * RandomAccessFile("test - httpdocs.tar.gz", "r");
- * PSTMessage msg =
- * (PSTMessage)PSTObject.detectAndLoadPSTObject(pstFile, emails[0]);
- * PSTAttachmentInputStream attachmentStream =
- * msg.getAttachment(0).getFileInputStream();
- *
- * byte[] tmp = new byte[1024];
- * byte[] tmp2 = new byte[1024];
- *
- * for (int y = 1; y < 2000; y++) {
- * tmpIn.seek(760*y-50);
- * tmpIn.read(tmp);
- *
- * attachmentStream.seek(760*y-50);
- * attachmentStream.read(tmp2);
- *
- * for (int x = 0; x< tmp2.length; x++) {
- * if (tmp[x] != tmp2[x]) {
- *
- *
- * PSTObject.printHexFormatted(tmp, true);
- * PSTObject.printHexFormatted(tmp2, true);
- *
- * System.out.println(y);
- * System.out.println("Error");
- * System.exit(0);
- * }
- * }
- * System.out.println("Worked");
- * }
- *
- */
-
- /*
- * for (int x = 0; x < emails.length; x++) {
- * PSTMessage msg =
- * (PSTMessage)PSTObject.detectAndLoadPSTObject(pstFile, emails[x]);
- * PSTAttachment attach = msg.getAttachment(0);
- * //System.out.println(attach);
- * InputStream attachmentStream =
- * msg.getAttachment(0).getFileInputStream();
- * FileOutputStream out = new
- * FileOutputStream("test - "+attach.getLongFilename());
- *
- * int bufferSize = 8176;
- *
- * byte[] buffer = new byte[bufferSize];
- * int count = attachmentStream.read(buffer, 0, 8176);
- * while (count == bufferSize) {
- * out.write(buffer);
- * count = attachmentStream.read(buffer, 0, 8176);
- * }
- * byte[] endBuffer = new byte[count];
- * System.arraycopy(buffer, 0, endBuffer, 0, count);
- * out.write(endBuffer);
- * out.close();
- * }
- *
- */
- // System.exit(0);
-
- } catch (final Exception err) {
- err.printStackTrace();
- System.exit(1);
- }
-
- // do the tree thing
- final DefaultMutableTreeNode top = new DefaultMutableTreeNode(this.pstFile.getMessageStore());
- try {
- this.buildTree(top, this.pstFile.getRootFolder());
- } catch (final Exception err) {
- err.printStackTrace();
- System.exit(1);
- }
-
- final JTree folderTree = new JTree(top) {
- @Override
- public String convertValueToText(final Object value, final boolean selected, final boolean expanded,
- final boolean leaf, final int row, final boolean hasFocus) {
- final DefaultMutableTreeNode nodeValue = (DefaultMutableTreeNode) value;
- if (nodeValue.getUserObject() instanceof PSTFolder) {
- final PSTFolder folderValue = (PSTFolder) nodeValue.getUserObject();
-
- return folderValue.getDescriptorNodeId() + " - " + folderValue.getDisplayName() + " "
- + folderValue.getAssociateContentCount() + "";
- } else if (nodeValue.getUserObject() instanceof PSTMessageStore) {
- final PSTMessageStore folderValue = (PSTMessageStore) nodeValue.getUserObject();
- return folderValue.getDisplayName();
- } else {
- return value.toString();
- }
- }
- };
- final DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
- renderer.setLeafIcon(renderer.getDefaultClosedIcon());
- folderTree.setCellRenderer(renderer);
-
- // event handler for changing...
- folderTree.addTreeSelectionListener(e -> {
- final DefaultMutableTreeNode node = (DefaultMutableTreeNode) folderTree.getLastSelectedPathComponent();
- if (node == null) {
- return;
- }
- if (node.getUserObject() instanceof PSTFolder) {
- final PSTFolder folderValue = (PSTFolder) node.getUserObject();
- try {
- TestGui.this.selectFolder(folderValue);
- } catch (final Exception err) {
- System.out.println("unable to change folder");
- err.printStackTrace();
- }
- }
- });
- final JScrollPane treePane = new JScrollPane(folderTree);
-
- // the table
- JScrollPane emailTablePanel = null;
- try {
- this.emailTableModel = new EmailTableModel(this.pstFile.getRootFolder(), this.pstFile);
- final JTable emailTable = new JTable(this.emailTableModel);
- emailTablePanel = new JScrollPane(emailTable);
- emailTable.setFillsViewportHeight(true);
- final ListSelectionModel selectionModel = emailTable.getSelectionModel();
- selectionModel.addListSelectionListener(e -> {
- final JTable source = emailTable;
- TestGui.this.selectedMessage = TestGui.this.emailTableModel.getMessageAtRow(source.getSelectedRow());
- if (TestGui.this.selectedMessage instanceof PSTContact) {
- final PSTContact contact = (PSTContact) TestGui.this.selectedMessage;
- TestGui.this.emailText.setText(contact.toString());
- } else if (TestGui.this.selectedMessage instanceof PSTTask) {
- final PSTTask task = (PSTTask) TestGui.this.selectedMessage;
- TestGui.this.emailText.setText(task.toString());
- } else if (TestGui.this.selectedMessage instanceof PSTActivity) {
- final PSTActivity journalEntry = (PSTActivity) TestGui.this.selectedMessage;
- TestGui.this.emailText.setText(journalEntry.toString());
- } else if (TestGui.this.selectedMessage instanceof PSTRss) {
- final PSTRss rss = (PSTRss) TestGui.this.selectedMessage;
- TestGui.this.emailText.setText(rss.toString());
- } else if (TestGui.this.selectedMessage != null) {
- // System.out.println(selectedMessage.getMessageClass());
- TestGui.this.emailText.setText(TestGui.this.selectedMessage.getBody());
- // System.out.println(selectedMessage);
- // emailText.setText(selectedMessage.toString());
- // emailText.setText(selectedMessage.toString());
- // PSTTask task = selectedMessage.toTask();
- // emailText.setText(task.toString());
- }
- TestGui.this.setAttachmentText();
-
- // treePane.getViewport().setViewPosition(new Point(0,0));
- TestGui.this.emailText.setCaretPosition(0);
- });
- } catch (final Exception err) {
- err.printStackTrace();
- }
-
- this.f.setJMenuBar(this.createMenu());
-
- // the email
- this.emailText = new JTextPane();
- this.emailText.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
- // emailText.setFont(new Font("Arial Unicode MS", Font.PLAIN, 12));
-
- this.emailPanel = new JPanel(new BorderLayout());
- this.attachPanel = new JPanel(new BorderLayout());
- this.attachLabel = new JLabel("Attachments:");
- this.attachText = new JTextField("");
- this.attachText.setEditable(false);
- this.attachPanel.add(this.attachLabel, BorderLayout.WEST);
- this.attachPanel.add(this.attachText, BorderLayout.CENTER);
- this.emailPanel.add(this.attachPanel, BorderLayout.NORTH);
- this.emailPanel.add(this.emailText, BorderLayout.CENTER);
-
- final JSplitPane emailSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, emailTablePanel,
- new JScrollPane(this.emailPanel));
- emailSplitPane.setOneTouchExpandable(true);
- emailSplitPane.setDividerLocation(0.25);
-
- // add a split pane, 1 for our tree, the other for our emails
- final JSplitPane primaryPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treePane, emailSplitPane);
- primaryPane.setOneTouchExpandable(true);
- primaryPane.setDividerLocation(0.3);
- this.f.add(primaryPane);
-
- // Set the default close operation for the window,
- // or else the program won't exit when clicking close button
- this.f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-
- // Set the visibility as true, thereby displaying it
- this.f.setVisible(true);
- // f.setSize(800, 600);
- this.f.setExtendedState(this.f.getExtendedState() | Frame.MAXIMIZED_BOTH);
- }
-
- private void buildTree(final DefaultMutableTreeNode top, final PSTFolder theFolder) {
- // this is recursive, try and keep up.
- try {
- final Vector children = theFolder.getSubFolders();
- final Iterator childrenIterator = children.iterator();
- while (childrenIterator.hasNext()) {
- final PSTFolder folder = (PSTFolder) childrenIterator.next();
-
- final DefaultMutableTreeNode node = new DefaultMutableTreeNode(folder);
-
- if (folder.getSubFolders().size() > 0) {
- this.buildTree(node, folder);
- } else {
- }
- top.add(node);
- }
- } catch (final Exception err) {
- err.printStackTrace();
- System.exit(1);
- }
- }
-
- void setAttachmentText() {
- final StringBuffer s = new StringBuffer();
-
- try {
- if (this.selectedMessage != null) {
- final int numAttach = this.selectedMessage.getNumberOfAttachments();
- for (int x = 0; x < numAttach; x++) {
- final PSTAttachment attach = this.selectedMessage.getAttachment(x);
- String filename = attach.getLongFilename();
- if (filename.isEmpty()) {
- filename = attach.getFilename();
- }
- if (!filename.isEmpty()) {
- if (x != 0) {
- s.append(", ");
- }
- s.append(filename);
- }
- }
- }
- } catch (final Exception e) {
- }
-
- this.attachText.setText(s.toString());
- }
-
- void selectFolder(final PSTFolder folder) throws IOException, PSTException {
- // load up the non-folder children.
-
- this.emailTableModel.setFolder(folder);
-
- }
-
- public JMenuBar createMenu() {
- JMenuBar menuBar;
- JMenu menu;
-
- menuBar = new JMenuBar();
- menu = new JMenu("File");
- menu.setMnemonic(KeyEvent.VK_F);
- menuBar.add(menu);
-
- final JMenuItem menuItem = new JMenuItem("Save Attachments", KeyEvent.VK_S);
- menuItem.addActionListener(this);
- menu.add(menuItem);
-
- return menuBar;
- }
-
- @Override
- public void actionPerformed(final ActionEvent e) {
- final JMenuItem source = (JMenuItem) (e.getSource());
- if (source.getText() == "Save Attachments") {
- this.saveAttachments();
- }
- }
-
- private void saveAttachments() {
- if (this.selectedMessage != null) {
- final int numAttach = this.selectedMessage.getNumberOfAttachments();
- if (numAttach == 0) {
- JOptionPane.showMessageDialog(this.f, "Email has no attachments");
- return;
- }
- try {
- for (int x = 0; x < numAttach; x++) {
- final PSTAttachment attach = this.selectedMessage.getAttachment(x);
- final InputStream attachmentStream = attach.getFileInputStream();
- String filename = attach.getLongFilename();
- if (filename.isEmpty()) {
- filename = attach.getFilename();
- }
- final JFileChooser chooser = new JFileChooser();
- chooser.setSelectedFile(new File(filename));
- final int r = chooser.showSaveDialog(this.f);
- if (r == JFileChooser.APPROVE_OPTION) {
- final FileOutputStream out = new FileOutputStream(chooser.getSelectedFile());
- // 8176 is the block size used internally and should
- // give the best performance
- final int bufferSize = 8176;
- final byte[] buffer = new byte[bufferSize];
- int count;
- do {
- count = attachmentStream.read(buffer);
- out.write(buffer, 0, count);
- } while (count == bufferSize);
- out.close();
- }
- attachmentStream.close();
- }
- } catch (final IOException ioe) {
- JOptionPane.showMessageDialog(this.f, "Failed writing to file");
- } catch (final PSTException pste) {
- JOptionPane.showMessageDialog(this.f, "Error in PST file");
- }
- }
- }
-
- /**
- * @param args
- * @throws IOException
- * @throws PSTException
- */
- public static void main(final String[] args) throws PSTException, IOException {
- new TestGui();
- }
-
-}
-
-class EmailTableModel extends AbstractTableModel {
-
- PSTFolder theFolder = null;
- PSTFile theFile = null;
-
- HashMap cache = new HashMap();
-
- public EmailTableModel(final PSTFolder theFolder, final PSTFile theFile) {
- super();
-
- this.theFolder = theFolder;
- this.theFile = theFile;
- }
-
- String[] columnNames = { "Descriptor ID", "Subject", "From", "To", "Date", "Has Attachments" };
- String[][] rowData = { { "", "", "", "", "" } };
- int rowCount = 0;
-
- @Override
- public String getColumnName(final int col) {
- return this.columnNames[col].toString();
- }
-
- @Override
- public int getColumnCount() {
- return this.columnNames.length;
- }
-
- @Override
- public int getRowCount() {
- try {
- // System.out.println("Email count: "+theFolder.getEmailCount());
- return this.theFolder.getContentCount();
- } catch (final Exception err) {
- err.printStackTrace();
- System.exit(0);
- }
- return 0;
- }
-
- public PSTMessage getMessageAtRow(final int row) {
- PSTMessage next = null;
- try {
- if (this.cache.containsKey(row)) {
- next = (PSTMessage) this.cache.get(row);
- } else {
- this.theFolder.moveChildCursorTo(row);
- next = (PSTMessage) this.theFolder.getNextChild();
- this.cache.put(row, next);
- }
- } catch (final Exception e) {
- e.printStackTrace();
- }
- return next;
- }
-
- @Override
- public Object getValueAt(final int row, final int col) {
- // get the child at...
- try {
- final PSTMessage next = this.getMessageAtRow(row);
-
- if (next == null) {
- return null;
- }
-
- switch (col) {
- case 0:
- return next.getDescriptorNode().descriptorIdentifier + "";
- case 1:
- return next.getSubject();
- case 2:
- return next.getSentRepresentingName() + " <" + next.getSentRepresentingEmailAddress() + ">";
- case 3:
- return next.getReceivedByName() + " <" + next.getReceivedByAddress() + ">" + next.getDisplayTo();
- case 4:
- return next.getClientSubmitTime();
- // return next.isFlagged();
- // return next.isDraft();
- // PSTTask task = next.toTask();
- // return task.toString();
- case 5:
- return (next.hasAttachments() ? "Yes" : "No");
- }
- } catch (final Exception e) {
- e.printStackTrace();
- System.exit(0);
- }
-
- return "";
- }
-
- @Override
- public boolean isCellEditable(final int row, final int col) {
- return false;
- }
-
- public void setFolder(final PSTFolder theFolder) throws PSTException, IOException {
- theFolder.moveChildCursorTo(0);
- this.theFolder = theFolder;
- this.cache = new HashMap();
- this.fireTableDataChanged();
- }
-
-}
+/**
+ *
+ */
+
+package example;
+
+import java.awt.BorderLayout;
+import java.awt.Font;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Vector;
+
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.JTextPane;
+import javax.swing.JTree;
+import javax.swing.ListSelectionModel;
+import javax.swing.WindowConstants;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+import com.pff.*;
+
+/**
+ * @author toweruser
+ *
+ */
+public class TestGui implements ActionListener {
+ private PSTFile pstFile;
+ private EmailTableModel emailTableModel;
+ private JTextPane emailText;
+ private JPanel emailPanel;
+ private JPanel attachPanel;
+ private JLabel attachLabel;
+ private JTextField attachText;
+ private PSTMessage selectedMessage;
+ private JFrame f;
+
+ public TestGui(String filename) throws PSTException, IOException {
+
+ // setup the basic window
+ this.f = new JFrame("PST Browser");
+
+ // attempt to open the pst file
+ try {
+ this.pstFile = new PSTFile(filename);
+ pstFile.setGlobalCodepage("windows-1252");
+ } catch (final Exception err) {
+ err.printStackTrace();
+ System.exit(1);
+ }
+
+ // do the tree thing
+ final DefaultMutableTreeNode top = new DefaultMutableTreeNode(this.pstFile.getMessageStore());
+ try {
+ this.buildTree(top, this.pstFile.getRootFolder());
+ } catch (final Exception err) {
+ err.printStackTrace();
+ System.exit(1);
+ }
+
+ final JTree folderTree = new JTree(top) {
+ @Override
+ public String convertValueToText(final Object value, final boolean selected, final boolean expanded,
+ final boolean leaf, final int row, final boolean hasFocus) {
+ final DefaultMutableTreeNode nodeValue = (DefaultMutableTreeNode) value;
+ if (nodeValue.getUserObject() instanceof PSTFolder) {
+ final PSTFolder folderValue = (PSTFolder) nodeValue.getUserObject();
+
+ return folderValue.getDescriptorNodeId() + " - " + folderValue.getDisplayName() + " "
+ + folderValue.getAssociateContentCount() + "";
+ } else if (nodeValue.getUserObject() instanceof PSTMessageStore) {
+ final PSTMessageStore folderValue = (PSTMessageStore) nodeValue.getUserObject();
+ return folderValue.getDisplayName();
+ } else {
+ return value.toString();
+ }
+ }
+ };
+ final DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
+ renderer.setLeafIcon(renderer.getDefaultClosedIcon());
+ folderTree.setCellRenderer(renderer);
+
+ // event handler for changing...
+ folderTree.addTreeSelectionListener(e -> {
+ final DefaultMutableTreeNode node = (DefaultMutableTreeNode) folderTree.getLastSelectedPathComponent();
+ if (node == null) {
+ return;
+ }
+ if (node.getUserObject() instanceof PSTFolder) {
+ final PSTFolder folderValue = (PSTFolder) node.getUserObject();
+ try {
+ TestGui.this.selectFolder(folderValue);
+ } catch (final Exception err) {
+ System.out.println("unable to change folder");
+ err.printStackTrace();
+ }
+ }
+ });
+ final JScrollPane treePane = new JScrollPane(folderTree);
+
+ // the table
+ JScrollPane emailTablePanel = null;
+ try {
+ this.emailTableModel = new EmailTableModel(this.pstFile.getRootFolder(), this.pstFile);
+ final JTable emailTable = new JTable(this.emailTableModel);
+ emailTable.setAutoCreateRowSorter(true);
+ emailTablePanel = new JScrollPane(emailTable);
+ emailTable.setFillsViewportHeight(true);
+ final ListSelectionModel selectionModel = emailTable.getSelectionModel();
+ selectionModel.addListSelectionListener(e -> {
+ final JTable source = emailTable;
+ TestGui.this.selectedMessage = TestGui.this.emailTableModel.getMessageAtRow(source.convertRowIndexToModel(source.getSelectedRow()));
+ if (TestGui.this.selectedMessage instanceof PSTContact) {
+ final PSTContact contact = (PSTContact) TestGui.this.selectedMessage;
+ TestGui.this.emailText.setText(contact.toString());
+ } else if (TestGui.this.selectedMessage instanceof PSTAppointment) {
+ final PSTAppointment task = (PSTAppointment) TestGui.this.selectedMessage;
+ TestGui.this.emailText.setText(task.toString());
+ } else if (TestGui.this.selectedMessage instanceof PSTTask) {
+ final PSTTask task = (PSTTask) TestGui.this.selectedMessage;
+ TestGui.this.emailText.setText(task.toString());
+ } else if (TestGui.this.selectedMessage instanceof PSTActivity) {
+ final PSTActivity journalEntry = (PSTActivity) TestGui.this.selectedMessage;
+ TestGui.this.emailText.setText(journalEntry.toString());
+ } else if (TestGui.this.selectedMessage instanceof PSTRss) {
+ final PSTRss rss = (PSTRss) TestGui.this.selectedMessage;
+ TestGui.this.emailText.setText(rss.toString());
+ } else if (TestGui.this.selectedMessage != null) {
+ // System.out.println(selectedMessage.getMessageClass());
+ TestGui.this.emailText.setText(TestGui.this.selectedMessage.getBody());
+ // System.out.println(selectedMessage);
+ // emailText.setText(selectedMessage.toString());
+ // emailText.setText(selectedMessage.toString());
+ // PSTTask task = selectedMessage.toTask();
+ // emailText.setText(task.toString());
+ }
+ TestGui.this.setAttachmentText();
+
+ // treePane.getViewport().setViewPosition(new Point(0,0));
+ TestGui.this.emailText.setCaretPosition(0);
+ });
+ } catch (final Exception err) {
+ err.printStackTrace();
+ }
+
+ this.f.setJMenuBar(this.createMenu());
+
+ // the email
+ this.emailText = new JTextPane();
+ this.emailText.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
+ // emailText.setFont(new Font("Arial Unicode MS", Font.PLAIN, 12));
+
+ this.emailPanel = new JPanel(new BorderLayout());
+ this.attachPanel = new JPanel(new BorderLayout());
+ this.attachLabel = new JLabel("Attachments:");
+ this.attachText = new JTextField("");
+ this.attachText.setEditable(false);
+ this.attachPanel.add(this.attachLabel, BorderLayout.WEST);
+ this.attachPanel.add(this.attachText, BorderLayout.CENTER);
+ this.emailPanel.add(this.attachPanel, BorderLayout.NORTH);
+ this.emailPanel.add(this.emailText, BorderLayout.CENTER);
+
+ final JSplitPane emailSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, emailTablePanel,
+ new JScrollPane(this.emailPanel));
+ emailSplitPane.setOneTouchExpandable(true);
+ emailSplitPane.setDividerLocation(0.25);
+
+ // add a split pane, 1 for our tree, the other for our emails
+ final JSplitPane primaryPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treePane, emailSplitPane);
+ primaryPane.setOneTouchExpandable(true);
+ primaryPane.setDividerLocation(0.3);
+ this.f.add(primaryPane);
+
+ // Set the default close operation for the window,
+ // or else the program won't exit when clicking close button
+ this.f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+
+ // Set the visibility as true, thereby displaying it
+ this.f.setVisible(true);
+ // f.setSize(800, 600);
+ this.f.setExtendedState(this.f.getExtendedState() | Frame.MAXIMIZED_BOTH);
+ }
+
+ private void buildTree(final DefaultMutableTreeNode top, final PSTFolder theFolder) {
+ // this is recursive, try and keep up.
+ try {
+ final Vector children = theFolder.getSubFolders();
+ final Iterator childrenIterator = children.iterator();
+ while (childrenIterator.hasNext()) {
+ final PSTFolder folder = (PSTFolder) childrenIterator.next();
+
+ final DefaultMutableTreeNode node = new DefaultMutableTreeNode(folder);
+
+ if (folder.getSubFolders().size() > 0) {
+ this.buildTree(node, folder);
+ } else {
+ }
+ top.add(node);
+ }
+ } catch (final Exception err) {
+ err.printStackTrace();
+ System.exit(1);
+ }
+ }
+
+ void setAttachmentText() {
+ final StringBuffer s = new StringBuffer();
+
+ try {
+ if (this.selectedMessage != null) {
+ final int numAttach = this.selectedMessage.getNumberOfAttachments();
+ for (int x = 0; x < numAttach; x++) {
+ final PSTAttachment attach = this.selectedMessage.getAttachment(x);
+ String filename = attach.getLongFilename();
+ if (filename.isEmpty()) {
+ filename = attach.getFilename();
+ }
+ if (!filename.isEmpty()) {
+ if (x != 0) {
+ s.append(", ");
+ }
+ s.append(filename);
+ }
+ }
+ }
+ } catch (final Exception e) {
+ }
+
+ this.attachText.setText(s.toString());
+ }
+
+ void selectFolder(final PSTFolder folder) throws IOException, PSTException {
+ // load up the non-folder children.
+
+ this.emailTableModel.setFolder(folder);
+
+ }
+
+ public JMenuBar createMenu() {
+ JMenuBar menuBar;
+ JMenu menu;
+
+ menuBar = new JMenuBar();
+ menu = new JMenu("File");
+ menu.setMnemonic(KeyEvent.VK_F);
+ menuBar.add(menu);
+
+ final JMenuItem menuItem = new JMenuItem("Save Attachments", KeyEvent.VK_S);
+ menuItem.addActionListener(this);
+ menu.add(menuItem);
+
+ return menuBar;
+ }
+
+ @Override
+ public void actionPerformed(final ActionEvent e) {
+ final JMenuItem source = (JMenuItem) (e.getSource());
+ if (source.getText() == "Save Attachments") {
+ this.saveAttachments();
+ }
+ }
+
+ private void saveAttachments() {
+ if (this.selectedMessage != null) {
+ final int numAttach = this.selectedMessage.getNumberOfAttachments();
+ if (numAttach == 0) {
+ JOptionPane.showMessageDialog(this.f, "Email has no attachments");
+ return;
+ }
+ try {
+ for (int x = 0; x < numAttach; x++) {
+ final PSTAttachment attach = this.selectedMessage.getAttachment(x);
+ final InputStream attachmentStream = attach.getFileInputStream();
+ String filename = attach.getLongFilename();
+ if (filename.isEmpty()) {
+ filename = attach.getFilename();
+ }
+ final JFileChooser chooser = new JFileChooser();
+ chooser.setSelectedFile(new File(filename));
+ final int r = chooser.showSaveDialog(this.f);
+ if (r == JFileChooser.APPROVE_OPTION) {
+ final FileOutputStream out = new FileOutputStream(chooser.getSelectedFile());
+ // 8176 is the block size used internally and should
+ // give the best performance
+ final int bufferSize = 8176;
+ final byte[] buffer = new byte[bufferSize];
+ int count;
+ do {
+ count = attachmentStream.read(buffer);
+ out.write(buffer, 0, count);
+ } while (count == bufferSize);
+ out.close();
+ }
+ attachmentStream.close();
+ }
+ } catch (final IOException ioe) {
+ JOptionPane.showMessageDialog(this.f, "Failed writing to file");
+ } catch (final PSTException pste) {
+ JOptionPane.showMessageDialog(this.f, "Error in PST file");
+ }
+ }
+ }
+
+ /**
+ * Main.
+ *
+ * @param args the args
+ * @throws PSTException the pst exception
+ * @throws IOException the io exception
+ */
+ public static void main(final String[] args) throws PSTException, IOException {
+ new TestGui(args[0]);
+ }
+
+}
+
+class EmailTableModel extends AbstractTableModel {
+
+ PSTFolder theFolder = null;
+ ArrayList theFolderMessageList;
+ PSTFile theFile = null;
+
+ HashMap cache = new HashMap();
+
+ public EmailTableModel(final PSTFolder theFolder, final PSTFile theFile) {
+ super();
+
+ this.theFolder = theFolder;
+ this.theFile = theFile;
+ }
+
+ String[] columnNames = { "Descriptor ID", "MessageClass", "Subject", "From", "To", "Date", "Has Attachments" };
+ String[][] rowData = { { "", "", "", "", "" } };
+ int rowCount = 0;
+
+ @Override
+ public String getColumnName(final int col) {
+ return this.columnNames[col].toString();
+ }
+
+ @Override
+ public int getColumnCount() {
+ return this.columnNames.length;
+ }
+
+ @Override
+ public int getRowCount() {
+ try {
+ // System.out.println("Email count: "+theFolder.getEmailCount());
+ return this.theFolder.getContentCount();
+ } catch (final Exception err) {
+ err.printStackTrace();
+ System.exit(0);
+ }
+ return 0;
+ }
+
+ public PSTMessage getMessageAtRow(final int row) {
+ PSTMessage next = null;
+ try {
+ if (this.cache.containsKey(((Object)theFolder)+toString()+" - "+row)) {
+ next = (PSTMessage) this.cache.get(((Object)theFolder)+toString()+" - "+row);
+ } else {
+ this.theFolder.moveChildCursorTo(row);
+ next = (PSTMessage) this.theFolder.getNextChild();
+ this.cache.put(((Object)theFolder)+toString()+" - "+row, next);
+ }
+ } catch (final Exception e) {
+ e.printStackTrace();
+ }
+ return next;
+ }
+
+ @Override
+ public Object getValueAt(final int row, final int col) {
+ // get the child at...
+ try {
+ final PSTMessage next = this.getMessageAtRow(row);
+
+ if (next == null) {
+ return null;
+ }
+
+ switch (col) {
+ case 0:
+ return next.getDescriptorNode().descriptorIdentifier + "";
+ case 1:
+ return next.getMessageClass();
+ case 2:
+ return next.getSubject();
+ case 3:
+ return next.getSentRepresentingName() + " <" + next.getSentRepresentingEmailAddress() + ">";
+ case 4:
+ return next.getReceivedByName() + " <" + next.getReceivedByAddress() + ">" + next.getDisplayTo();
+ case 5:
+ return next.getClientSubmitTime();
+ // return next.isFlagged();
+ // return next.isDraft();
+ // PSTTask task = next.toTask();
+ // return task.toString();
+ case 6:
+ return (next.hasAttachments() ? "Yes" : "No");
+ }
+ } catch (final Exception e) {
+ e.printStackTrace();
+ System.exit(0);
+ }
+
+ return "";
+ }
+
+ @Override
+ public boolean isCellEditable(final int row, final int col) {
+ return false;
+ }
+
+ @Override
+ public Class> getColumnClass(int columnIndex) {
+ return String.class;
+ }
+
+ public void setFolder(final PSTFolder theFolder) throws PSTException, IOException {
+ theFolder.moveChildCursorTo(0);
+ this.theFolder = theFolder;
+ this.fireTableDataChanged();
+ }
+
+}
diff --git a/src/main/resources/PIDLongID.csv b/src/main/resources/PIDLongID.csv
new file mode 100644
index 0000000..e2d3510
--- /dev/null
+++ b/src/main/resources/PIDLongID.csv
@@ -0,0 +1,366 @@
+ID;Property;Description:;Data type;Area;Defining reference;Alternate names
+0x00000001;PidLidAttendeeCriticalChange;Specifies the date and time at which the meeting-related object was sent.;PtypTime, 0x0040;Meetings;[MS-OXOCAL] section 2.2.5.2;LID_ATTENDEE_CRITICAL_CHANGE
+0x00000002;PidLidWhere;Contains the value of the PidLidLocation property (section 2.159) from the associated Meeting object.;PtypString, 0x001F;Meetings;[MS-OXOCAL] section 2.2.5.3;LID_WHERE
+0x00000003;PidLidGlobalObjectId;Contains an ID for an object that represents an exception to a recurring series.;PtypBinary, 0x0102;Meetings;[MS-OXOCAL] section 2.2.1.27;LID_GLOBAL_OBJID
+0x00000004;PidLidIsSilent;Indicates whether the user did not include any text in the body of the Meeting Response object.;PtypBoolean, 0x000B;Meetings;[MS-OXOCAL] section 2.2.7.7;LID_IS_SILENT
+0x00000005;PidLidIsRecurring;Specifies whether the object is associated with a recurring series.;PtypBoolean, 0x000B;Meetings;[MS-OXOCAL] section 2.2.1.13;LID_IS_RECURRING
+0x00000006;PidLidRequiredAttendees;Identifies required attendees for the appointment or meeting.;PtypString, 0x001F;Meetings;[MS-XWDCAL] section 2.2.7.63;LID_REQUIRED_ATTENDEES
+0x00000007;PidLidOptionalAttendees;Specifies optional attendees.;PtypString, 0x001F;Meetings;[MS-XWDCAL] section 2.2.7.45;LID_OPTIONAL_ATTENDEES
+0x00000008;PidLidResourceAttendees;Identifies resource attendees for the appointment or meeting.;PtypString, 0x001F;Meetings;[MS-XWDCAL] section 2.2.7.64;LID_RESOURCE_ATTENDEES
+0x00000009;PidLidDelegateMail;Indicates whether a delegate responded to the meeting request.;PtypBoolean, 0x000B;Meetings;[MS-XWDCAL] section 2.2.7.21;LID_DELEGATE_MAIL
+0x0000000A;PidLidIsException;Indicates whether the object represents an exception (including an orphan instance).;PtypBoolean, 0x000B;Meetings;[MS-OXOCAL] section 2.2.1.35;LID_IS_EXCEPTION
+0x0000000C;PidLidTimeZone;Specifies information about the time zone of a recurring meeting.;PtypInteger32, 0x0003;Meetings;[MS-OXOCAL] section 2.2.5.6;LID_TIME_ZONE
+0x0000000D;PidLidStartRecurrenceDate;Identifies the start date of the recurrence pattern.;PtypInteger32, 0x0003;Meetings;[MS-XWDCAL] section 2.2.7.66;LID_START_RECUR_DATE
+0x0000000E;PidLidStartRecurrenceTime;Identifies the start time of the recurrence pattern.;PtypInteger32, 0x0003;Meetings;[MS-XWDCAL] section 2.2.7.67;LID_START_RECUR_TIME
+0x0000000F;PidLidEndRecurrenceDate;Identifies the end date of the recurrence range.;PtypInteger32, 0x0003;Meetings;[MS-XWDCAL] section 2.2.7.22;LID_END_RECUR_DATE
+0x00000010;PidLidEndRecurrenceTime;Identifies the end time of the recurrence range.;PtypInteger32, 0x0003;Meetings;[MS-XWDCAL] section 2.2.7.23;LID_END_RECUR_TIME
+0x00000011;PidLidDayInterval;Identifies the day interval for the recurrence pattern.;PtypInteger16, 0x0002;Meetings;[MS-XWDCAL] section 2.2.7.19;LID_DAY_INTERVAL
+0x00000012;PidLidWeekInterval;Identifies the number of weeks that occur between each meeting.;PtypInteger16, 0x0002;Meetings;[MS-XWDCAL] section 2.2.7.71;LID_WEEK_INTERVAL
+0x00000013;PidLidMonthInterval;Indicates the monthly interval of the appointment or meeting.;PtypInteger16, 0x0002;Meetings;[MS-XWDCAL] section 2.2.7.33;LID_MONTH_INTERVAL
+0x00000014;PidLidYearInterval;Indicates the yearly interval of the appointment or meeting.;PtypInteger16, 0x0002;Meetings;[MS-XWDCAL] section 2.2.7.73;LID_YEAR_INTERVAL
+0x00000015;PidLidClientIntent; Indicates what actions the user has taken on this Meeting object.;PtypInteger32, 0x0003;Calendar;[MS-OXOCAL] section 2.2.2.4;dispidClientIntent
+0x00000017;PidLidMonthOfYearMask;Indicates the calculated month of the year in which the appointment or meeting occurs.;PtypInteger32, 0x0003;Meetings;[MS-XWDCAL] section 2.2.7.35;LID_MOY_MASK
+0x00000018;PidLidOldRecurrenceType;Indicates the recurrence pattern for the appointment or meeting.;PtypInteger16, 0x0002;Meetings;[MS-XWDCAL] section 2.2.7.44;LID_RECUR_TYPE
+0x0000001A;PidLidOwnerCriticalChange;Specifies the date and time at which a Meeting Request object was sent by the organizer.;PtypTime, 0x0040;Meetings;[MS-OXOCAL] section 2.2.1.34;LID_OWNER_CRITICAL_CHANGE
+0x0000001C;PidLidCalendarType;Contains the value of the CalendarType field from the PidLidAppointmentRecur property (section 2.22).;PtypInteger32, 0x0003;Meetings;[MS-OXOCAL] section 2.2.6.11;LID_CALENDAR_TYPE
+0x00000023;PidLidCleanGlobalObjectId;Contains the value of the PidLidGlobalObjectId property (section 2.142) for an object that represents an Exception object to a recurring series, where the Year, Month, and Day fields are all zero.;PtypBinary, 0x0102;Meetings;[MS-OXOCAL] section 2.2.1.28;dispidCleanGlobalObjId
+0x00000024;PidLidAppointmentMessageClass;Indicates the message class of the Meeting object to be generated from the Meeting Request object.;PtypString, 0x001F;Meetings;[MS-OXOCAL] section 2.2.6.6;dispidApptMessageClass
+0x00000026;PidLidMeetingType;Indicates the type of Meeting Request object or Meeting Update object.;PtypInteger32, 0x0003;Meetings;[MS-OXOCAL] section 2.2.6.5;dispidMeetingType
+0x00000028;PidLidOldLocation;Indicates the original value of the PidLidLocation property (section 2.159) before a meeting update.;PtypString, 0x001F;Meetings;[MS-OXOCAL] section 2.2.6.7;dispidOldLocation
+0x00000029;PidLidOldWhenStartWhole;Indicates the original value of the PidLidAppointmentStartWhole property (section 2.29) before a meeting update.;PtypTime, 0x0040;Meetings;[MS-OXOCAL] section 2.2.6.8;dispidOldWhenStartWhole
+0x0000002A;PidLidOldWhenEndWhole;Indicates the original value of the PidLidAppointmentEndWhole property (section 2.14) before a meeting update.;PtypTime, 0x0040;Meetings;[MS-OXOCAL] section 2.2.6.9;dispidOldWhenEndWhole
+0x00001000;PidLidDayOfMonth;Identifies the day of the month for the appointment or meeting.;PtypInteger32, 0x0003;Calendar;[MS-XWDCAL] section 2.2.7.20;
+0x00001001;PidLidICalendarDayOfWeekMask;Identifies the day of the week for the appointment or meeting.;PtypInteger32, 0x0003;Calendar;[MS-XWDCAL] section 2.2.7.27;http://schemas.microsoft.com/mapi/dayofweekmask
+0x00001005;PidLidOccurrences;Indicates the number of occurrences in the recurring appointment or meeting.;PtypInteger32, 0x0003;Calendar;[MS-XWDCAL] section 2.2.7.43;
+0x00001006;PidLidMonthOfYear;Indicates the month of the year in which the appointment or meeting occurs.;PtypInteger32, 0x0003;Calendar;[MS-XWDCAL] section 2.2.7.34;
+0x0000100B;PidLidNoEndDateFlag;Indicates whether the recurrence pattern has an end date.;PtypBoolean, 0x000B;Calendar;[MS-XWDCAL] section 2.2.7.36;http://schemas.microsoft.com/mapi/fnoenddate
+0x0000100D;PidLidRecurrenceDuration;Identifies the length, in minutes, of the appointment or meeting.;PtypInteger32, 0x0003;Calendar;[MS-XWDCAL] section 2.2.7.48;
+0x00008005;PidLidFileUnder;Specifies the name under which to file a contact when displaying a list of contacts. ;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.1.11;dispidFileUnder
+0x00008006;PidLidFileUnderId;Specifies how to generate and recompute the value of the PidLidFileUnder property (section 2.132) when other contact name properties change.;PtypInteger32, 0x0003;Contact Properties;[MS-OXOCNTC] section 2.2.1.1.12;dispidFileUnderId
+0x00008007;PidLidContactItemData;Specifies the visible fields in the application's user interface that are used to help display the contact information. ;PtypMultipleInteger32, 0x1003;Contact Properties;[MS-OXOCNTC] section 2.2.1.10.22;dispidContactItemData
+0x00008010;PidLidDepartment;This property is ignored by the server and is set to an empty string by the client.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.6.4;dispidDepartment
+0x00008015;PidLidHasPicture;Specifies whether the attachment has a picture.;PtypBoolean, 0x000B;Contact Properties;[MS-OXOCNTC] section 2.2.1.8.1;dispidHasPicture
+0x0000801A;PidLidHomeAddress;Specifies the complete address of the home address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.8;dispidHomeAddress
+0x0000801B;PidLidWorkAddress;Specifies the complete address of the work address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.8;dispidWorkAddress
+0x0000801C;PidLidOtherAddress;Specifies the complete address of the other address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.8;dispidOtherAddress
+0x00008022;PidLidPostalAddressId;Specifies which physical address is the mailing address for this contact.;PtypInteger32, 0x0003;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.9;dispidPostalAddressId
+0x00008023;PidLidContactCharacterSet;Specifies the character set used for a Contact object.;PtypInteger32, 0x0003;Contact Properties;[MS-OXOCNTC] section 2.2.1.10.18;dispidContactCharSet
+0x00008025;PidLidAutoLog;Specifies to the application whether to create a Journal object for each action associated with this Contact object.;PtypBoolean, 0x000B;Contact Properties;[MS-OXOCNTC] section 2.2.1.10.19;dispidAutoLog
+0x00008026;PidLidFileUnderList;Specifies a list of possible values for the PidLidFileUnderId property (section 2.133).;PtypMultipleInteger32, 0x1003;Contact Properties;[MS-OXOCNTC] section 2.2.1.1.13;dispidFileUnderList
+0x00008028;PidLidAddressBookProviderEmailList;Specifies which electronic address properties are set on the Contact object.;PtypMultipleInteger32, 0x1003;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.11;dispidABPEmailList
+0x00008029;PidLidAddressBookProviderArrayType;Specifies the state of the electronic addresses of the contact and represents a set of bit flags.;PtypInteger32, 0x0003;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.12;dispidABPArrayType
+0x0000802B;PidLidHtml;Specifies the business webpage URL of the contact. ;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.10.12;dispidHTML
+0x0000802C;PidLidYomiFirstName;Specifies the phonetic pronunciation of the given name of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.1.9;dispidYomiFirstName
+0x0000802D;PidLidYomiLastName;Specifies the phonetic pronunciation of the surname of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.1.10;dispidYomiLastName
+0x0000802E;PidLidYomiCompanyName;Specifies the phonetic pronunciation of the company name of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.6.8;dispidYomiCompanyName
+0x00008040;PidLidBusinessCardDisplayDefinition;Contains user customization details for displaying a contact as a business card. ;PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.1.7.1;dispidBCDisplayDefinition
+0x00008041;PidLidBusinessCardCardPicture;Contains the image to be used on a business card.;PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.1.7.2;dispidBCCardPicture
+0x00008045;PidLidPromptSendUpdate;Indicates that the Meeting Response object was out-of-date when it was received.;PtypBoolean, 0x000B;Meeting Response;[MS-OXOCAL] section 2.2.7.8;dispidPromptSendUpdate
+0x00008045;PidLidWorkAddressStreet;Specifies the street portion of the work address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.1;dispidWorkAddressStreet
+0x00008046;PidLidWorkAddressCity;Specifies the city or locality portion of the work address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.2;dispidWorkAddressCity
+0x00008047;PidLidWorkAddressState;Specifies the state or province portion of the work address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.3;dispidWorkAddressState
+0x00008048;PidLidWorkAddressPostalCode;Specifies the postal code (ZIP code) portion of the work address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.4;dispidWorkAddressPostalCode
+0x00008049;PidLidWorkAddressCountry;Specifies the country or region portion of the work address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.5;dispidWorkAddressCountry
+0x0000804A;PidLidWorkAddressPostOfficeBox;Specifies the post office box portion of the work address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.7;dispidWorkAddressPostOfficeBox
+0x0000804C;PidLidDistributionListChecksum;Specifies the 32-bit cyclic redundancy check (CRC) polynomial checksum, as specified in [ISO/IEC8802-3], calculated on the value of the PidLidDistributionListMembers property (section 2.96).;PtypInteger32, 0x0003;Contact Properties;[MS-OXOCNTC] section 2.2.2.2.3;dispidDLChecksum
+0x0000804D;PidLidBirthdayEventEntryId;Specifies the EntryID of an optional Appointment object that represents the birthday of the contact.;PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.1.5.3;dispidBirthdayEventEID
+0x0000804E;PidLidAnniversaryEventEntryId;Specifies the EntryID of the Appointment object that represents an anniversary of the contact.;PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.1.5.6;dispidAnniversaryEventEID
+0x0000804F;PidLidContactUserField1;Contains text used to add custom text to a business card representation of a Contact object.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.7.3;dispidContactUserField1
+0x00008050;PidLidContactUserField2;Contains text used to add custom text to a business card representation of a Contact object.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.7.3;dispidContactUserField2
+0x00008051;PidLidContactUserField3;Contains text used to add custom text to a business card representation of a Contact object.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.7.3;dispidContactUserField3
+0x00008052;PidLidContactUserField4;Contains text used to add custom text to a business card representation of a Contact object.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.7.3;dispidContactUserField4
+0x00008053;PidLidDistributionListName;Specifies the name of the personal distribution list. ;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.2.1.2;dispidDLName
+0x00008054;PidLidDistributionListOneOffMembers;Specifies the list of one-off EntryIDs corresponding to the members of the personal distribution list. ;PtypMultipleBinary, 0x1102;Contact Properties;[MS-OXOCNTC] section 2.2.2.2.2;dispidDLOneOffMembers
+0x00008055;PidLidDistributionListMembers;Specifies the list of EntryIDs of the objects corresponding to the members of the personal distribution list. ;PtypMultipleBinary, 0x1102;Contact Properties;[MS-OXOCNTC] section 2.2.2.2.1;dispidDLMembers
+0x00008062;PidLidInstantMessagingAddress;Specifies the instant messaging address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.10.6;dispidInstMsg
+0x00008064;PidLidDistributionListStream;Specifies the list of EntryIDs and one-off EntryIDs corresponding to the members of the personal distribution list.;PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.2.2.4;dispidDLStream
+0x00008080;PidLidEmail1DisplayName;Specifies the user-readable display name for the email address.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.1;dispidEmail1DisplayName
+0x00008082;PidLidEmail1AddressType;Specifies the address type of an electronic address.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.2;dispidEmail1AddrType
+0x00008083;PidLidEmail1EmailAddress;Specifies the email address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.3;dispidEmail1EmailAddress
+0x00008084;PidLidEmail1OriginalDisplayName;Specifies the SMTP email address that corresponds to the email address for the Contact object.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.4;dispidEmail1OriginalDisplayName, Email1OriginalDisplayName, EXSCHEMA_MAPI_EMAIL1ORIGINALDISPLAYNAME
+0x00008085;PidLidEmail1OriginalEntryId;Specifies the EntryID of the object corresponding to this electronic address.;PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.5;dispidEmail1OriginalEntryID
+0x00008090;PidLidEmail2DisplayName;Specifies the user-readable display name for the email address.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.1;dispidEmail2DisplayName
+0x00008092;PidLidEmail2AddressType;Specifies the address type of the electronic address.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.2;dispidEmail2AddrType
+0x00008093;PidLidEmail2EmailAddress;Specifies the email address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.3;dispidEmail2EmailAddress
+0x00008094;PidLidEmail2OriginalDisplayName;Specifies the SMTP email address that corresponds to the email address for the Contact object.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.4;dispidEmail2OriginalDisplayName
+0x00008095;PidLidEmail2OriginalEntryId;Specifies the EntryID of the object that corresponds to this electronic address.;PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.5;dispidEmail2OriginalEntryID
+0x000080A0;PidLidEmail3DisplayName;Specifies the user-readable display name for the email address.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.1;dispidEmail3DisplayName
+0x000080A2;PidLidEmail3AddressType;Specifies the address type of the electronic address.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.2;dispidEmail3AddrType
+0x000080A3;PidLidEmail3EmailAddress;Specifies the email address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.3;dispidEmail3EmailAddress
+0x000080A4;PidLidEmail3OriginalDisplayName;Specifies the SMTP email address that corresponds to the email address for the Contact object.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.4;dispidEmail3OriginalDisplayName
+0x000080A5;PidLidEmail3OriginalEntryId;Specifies the EntryID of the object that corresponds to this electronic address.;PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.5;dispidEmail3OriginalEntryID
+0x000080B2;PidLidFax1AddressType;"Contains the string value ""FAX"".";PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.7;dispidFax1AddrType
+0x000080B3;PidLidFax1EmailAddress;"Contains a user-readable display name, followed by the ""@"" character, followed by a fax number.";PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.8;dispidFax1EmailAddress
+0x000080B4;PidLidFax1OriginalDisplayName;Contains the same value as the PidTagNormalizedSubject property (section 2.812).;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.9;dispidFax1OriginalDisplayName
+0x000080B5;PidLidFax1OriginalEntryId;Specifies a one-off EntryID that corresponds to this fax address.;PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.10;dispidFax1OriginalEntryID
+0x000080C2;PidLidFax2AddressType;"Contains the string value ""FAX"".";PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.7;dispidFax2AddrType
+0x000080C3;PidLidFax2EmailAddress;"Contains a user-readable display name, followed by the ""@"" character, followed by a fax number.";PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.8;dispidFax2EmailAddress
+0x000080C4;PidLidFax2OriginalDisplayName;Contains the same value as the PidTagNormalizedSubject property (section 2.812).;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.9;dispidFax2OriginalDisplayName
+0x000080C5;PidLidFax2OriginalEntryId;Specifies a one-off EntryID corresponding to this fax address.;PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.10;dispidFax2OriginalEntryID
+0x000080D2;PidLidFax3AddressType;"Contains the string value ""FAX"".";PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.7;dispidFax3AddrType
+0x000080D3;PidLidFax3EmailAddress;"Contains a user-readable display name, followed by the ""@"" character, followed by a fax number.";PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.8;dispidFax3EmailAddress
+0x000080D4;PidLidFax3OriginalDisplayName;Contains the same value as the PidTagNormalizedSubject property (section 2.812).;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.9;dispidFax3OriginalDisplayName
+0x000080D5;PidLidFax3OriginalEntryId;Specifies a one-off EntryID that corresponds to this fax address.;PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.1.2.10;dispidFax3OriginalEntryID
+0x000080D8;PidLidFreeBusyLocation;Specifies a URL path from which a client can retrieve free/busy status information for the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.10.10;dispidFreeBusyLocation
+0x000080DA;PidLidHomeAddressCountryCode;Specifies the country code portion of the home address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.6;dispidHomeAddressCountryCode
+0x000080DB;PidLidWorkAddressCountryCode;Specifies the country code portion of the work address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.6;dispidWorkAddressCountryCode
+0x000080DC;PidLidOtherAddressCountryCode;Specifies the country code portion of the other address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.6;dispidOtherAddressCountryCode
+0x000080DD;PidLidAddressCountryCode;Specifies the country code portion of the mailing address of the contact.;PtypString, 0x001F;Contact Properties;[MS-OXOCNTC] section 2.2.1.3.6;dispidAddressCountryCode
+0x000080DE;PidLidBirthdayLocal;Specifies the birthday of a contact.;PtypTime, 0x0040;Contact Properties;[MS-OXOCNTC] section 2.2.1.5.2;dispidApptBirthdayLocal
+0x000080DF;PidLidWeddingAnniversaryLocal;Specifies the wedding anniversary of the contact, at midnight in the client's local time zone, and is saved without any time zone conversions.;PtypTime, 0x0040;Contact Properties;[MS-OXOCNTC] section 2.2.1.5.5;dispidApptAnniversaryLocal
+0x000080E0;PidLidIsContactLinked;Specifies whether the contact is linked to other contacts.; PtypBoolean, 0x000B;Contact Properties;[MS-OXOCNTC] section 2.2.1.9.6;dispidIsContactLinked
+0x000080E2;PidLidContactLinkedGlobalAddressListEntryId;Specifies the EntryID of the GAL contact to which the duplicate contact is linked.; PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.1.9.1;dispidContactLinkedGALEntryID
+0x000080E3;PidLidContactLinkSMTPAddressCache;Contains a list of the SMTP addresses that are used by the contact.; PtypMultipleString, 0x101F;Contact Properties;[MS-OXOCNTC] section 2.2.1.9.5;dispidContactLinkSMTPAddressCache
+0x000080E5;PidLidContactLinkLinkRejectHistory;Contains a list of GAL contacts that were previously rejected for linking with the duplicate contact.; PtypMultipleBinary, 0x1102;Contact Properties;[MS-OXOCNTC] section 2.2.1.9.4;dispidContactLinkLinkRejectHistory
+0x000080E6;PidLidContactLinkGlobalAddressListLinkState;Specifies the state of the linking between the GAL contact and the duplicate contact.; PtypInteger32, 0x0003;Contact Properties;[MS-OXOCNTC] section 2.2.1.9.3;dispidContactLinkGALLinkState
+0x000080E8;PidLidContactLinkGlobalAddressListLinkId;Specifies the GUID of the GAL contact to which the duplicate contact is linked.; PtypGuid, 0x0048;Contact Properties;[MS-OXOCNTC] section 2.2.1.9.2;dispidContactLinkGALLinkID
+0x00008101;PidLidTaskStatus;Specifies the status of a task.;PtypInteger32, 0x0003;Tasks;[MS-OXOTASK] section 2.2.2.2.2;dispidTaskStatus
+0x00008102;PidLidPercentComplete;Indicates whether a time-flagged Message object is complete.;PtypFloating64, 0x0005;Tasks;[MS-OXOFLAG] section 2.2.2.3;dispidPercentComplete
+0x00008103;PidLidTeamTask;This property is set by the client but is ignored by the server.;PtypBoolean, 0x000B;Tasks;[MS-OXOTASK] section 2.2.2.2.36;dispidTeamTask
+0x00008104;PidLidTaskStartDate;Specifies the date on which the user expects work on the task to begin.;PtypTime, 0x0040;Tasks;[MS-OXOTASK] section 2.2.2.2.4;dispidTaskStartDate
+0x00008105;PidLidTaskDueDate;Specifies the date by which the user expects work on the task to be complete.;PtypTime, 0x0040;Tasks;[MS-OXOTASK] section 2.2.2.2.5;dispidTaskDueDate
+0x00008107;PidLidTaskResetReminder;Indicates whether future instances of recurring tasks need reminders, even though the value of the PidLidReminderSet property (section 2.222) is 0x00.;PtypBoolean, 0x000B;Tasks;[MS-OXOTASK] section 2.2.2.2.6;dispidTaskResetReminder
+0x00008108;PidLidTaskAccepted;Indicates whether a task assignee has replied to a task request for this Task object.;PtypBoolean, 0x000B;Tasks;[MS-OXOTASK] section 2.2.2.2.7;dispidTaskAccepted
+0x00008109;PidLidTaskDeadOccurrence;Indicates whether new occurrences remain to be generated.;PtypBoolean, 0x000B;Tasks;[MS-OXOTASK] section 2.2.2.2.8;dispidTaskDeadOccur
+0x0000810F;PidLidTaskDateCompleted;Specifies the date when the user completed work on the task.;PtypTime, 0x0040;Tasks;[MS-OXOTASK] section 2.2.2.2.9;dispidTaskDateCompleted
+0x00008110;PidLidTaskActualEffort;Indicates the number of minutes that the user actually spent working on a task.;PtypInteger32, 0x0003;Tasks;[MS-OXOTASK] section 2.2.2.2.11;dispidTaskActualEffort
+0x00008111;PidLidTaskEstimatedEffort;Indicates the number of minutes that the user expects to work on a task.;PtypInteger32, 0x0003;Tasks;[MS-OXOTASK] section 2.2.2.2.12;dispidTaskEstimatedEffort
+0x00008112;PidLidTaskVersion;Indicates which copy is the latest update of a Task object.;PtypInteger32, 0x0003;Tasks;[MS-OXOTASK] section 2.2.2.2.13;dispidTaskVersion
+0x00008113;PidLidTaskState;Indicates the current assignment state of the Task object.;PtypInteger32, 0x0003;Tasks;[MS-OXOTASK] section 2.2.2.2.14;dispidTaskState
+0x00008115;PidLidTaskLastUpdate;Contains the date and time of the most recent change made to the Task object.;PtypTime, 0x0040;Tasks;[MS-OXOTASK] section 2.2.2.2.10;dispidTaskLastUpdate
+0x00008116;PidLidTaskRecurrence;Contains a RecurrencePattern structure that provides information about recurring tasks.;PtypBinary, 0x0102;Tasks;[MS-OXOTASK] section 2.2.2.2.15;dispidTaskRecur
+0x00008117;PidLidTaskAssigners;Contains a stack of entries, each of which represents a task assigner.;PtypBinary, 0x0102;Tasks;[MS-OXOTASK] section 2.2.2.2.16;dispidTaskMyDelegators
+0x00008119;PidLidTaskStatusOnComplete;Indicates whether the task assignee has been requested to send an email message update upon completion of the assigned task.;PtypBoolean, 0x000B;Tasks;[MS-OXOTASK] section 2.2.2.2.17;dispidTaskSOC
+0x0000811A;PidLidTaskHistory;Indicates the type of change that was last made to the Task object.;PtypInteger32, 0x0003;Tasks;[MS-OXOTASK] section 2.2.2.2.18;dispidTaskHistory
+0x0000811B;PidLidTaskUpdates;Indicates whether the task assignee has been requested to send a task update when the assigned Task object changes.;PtypBoolean, 0x000B;Tasks;[MS-OXOTASK] section 2.2.2.2.19;dispidTaskUpdates
+0x0000811C;PidLidTaskComplete;Indicates that the task is complete.;PtypBoolean, 0x000B;Tasks;[MS-OXOTASK] section 2.2.2.2.20;dispidTaskComplete
+0x0000811E;PidLidTaskFCreator;Indicates that the Task object was originally created by the action of the current user or user agent instead of by the processing of a task request. ;PtypBoolean, 0x000B;Tasks;[MS-OXOTASK] section 2.2.2.2.21;dispidTaskFCreator
+0x0000811F;PidLidTaskOwner;Contains the name of the owner of the task.;PtypString, 0x001F;Tasks;[MS-OXOTASK] section 2.2.2.2.22;dispidTaskOwner
+0x00008120;PidLidTaskMultipleRecipients;Provides optimization hints about the recipients of a Task object.;PtypInteger32, 0x0003;Tasks;[MS-OXOTASK] section 2.2.2.2.23;dispidTaskMultRecips
+0x00008121;PidLidTaskAssigner;Specifies the name of the user that last assigned the task.;PtypString, 0x001F;Tasks;[MS-OXOTASK] section 2.2.2.2.24;dispidTaskDelegator
+0x00008122;PidLidTaskLastUser;Contains the name of the most recent user to have been the owner of the task.;PtypString, 0x001F;Tasks;[MS-OXOTASK] section 2.2.2.2.25;dispidTaskLastUser
+0x00008123;PidLidTaskOrdinal;Provides an aid to custom sorting of Task objects.;PtypInteger32, 0x0003;Tasks;[MS-OXOTASK] section 2.2.2.2.26;dispidTaskOrdinal
+0x00008124;PidLidTaskNoCompute;Not used. The client can set this property, but it has no impact on the Task-Related Objects Protocol and is ignored by the server.;PtypBoolean, 0x000B;Tasks;[MS-OXOTASK] section 2.2.2.2.35;dispidTaskNoCompute
+0x00008125;PidLidTaskLastDelegate;Contains the name of the user who most recently assigned the task, or the user to whom it was most recently assigned.;PtypString, 0x001F;Tasks;[MS-OXOTASK] section 2.2.2.2.27;dispidTaskLastDelegate
+0x00008126;PidLidTaskFRecurring;Indicates whether the task includes a recurrence pattern.;PtypBoolean, 0x000B;Tasks;[MS-OXOTASK] section 2.2.2.2.28;dispidTaskFRecur
+0x00008127;PidLidTaskRole;Not used. The client can set this property, but it has no impact on the Task-Related Objects Protocol and is ignored by the server.;PtypString, 0x001F;Tasks;[MS-OXOTASK] section 2.2.2.2.34;dispidTaskRole
+0x00008129;PidLidTaskOwnership;Indicates the role of the current user relative to the Task object.;PtypInteger32, 0x0003;Tasks;[MS-OXOTASK] section 2.2.2.2.29;dispidTaskOwnership
+0x0000812A;PidLidTaskAcceptanceState;Indicates the acceptance state of the task.;PtypInteger32, 0x0003;Tasks;[MS-OXOTASK] section 2.2.2.2.30;dispidTaskDelegValue
+0x0000812C;PidLidTaskFFixOffline;Indicates the accuracy of the PidLidTaskOwner property (section 2.328).;PtypBoolean, 0x000B;Tasks;[MS-OXOTASK] section 2.2.2.2.31;dispidTaskFFixOffline
+0x00008139;PidLidTaskCustomFlags;The client can set this property, but it has no impact on the Task-Related Objects Protocol and is ignored by the server.;PtypInteger32, 0x0003;Tasks;[MS-OXOTASK] section 2.2.2.2.33;dispidTaskCustomFlags
+0x00008201;PidLidAppointmentSequence;Specifies the sequence number of a Meeting object.;PtypInteger32, 0x0003;Meetings;[MS-OXOCAL] section 2.2.1.1;dispidApptSequence
+0x00008202;PidLidAppointmentSequenceTime;Indicates the date and time at which the PidLidAppointmentSequence property (section 2.25) was last modified.;PtypTime, 0x0040;Meetings;[MS-OXOCAL] section 2.2.4.1;dispidApptSeqTime
+0x00008203;PidLidAppointmentLastSequence;Indicates to the organizer the last sequence number that was sent to any attendee.;PtypInteger32, 0x0003;Meetings;[MS-OXOCAL] section 2.2.4.2;dispidApptLastSequence
+0x00008204;PidLidChangeHighlight;Specifies a bit field that indicates how the Meeting object has changed.;PtypInteger32, 0x0003;Meetings;[MS-OXOCAL] section 2.2.6.2;dispidChangeHighlight
+0x00008205;PidLidBusyStatus;Specifies the availability of a user for the event described by the object.;PtypInteger32, 0x0003;Calendar;[MS-OXOCAL] section 2.2.1.2;dispidBusyStatus
+0x00008206;PidLidFExceptionalBody;Indicates that the Exception Embedded Message object has a body that differs from the Recurring Calendar object. ;PtypBoolean, 0x000B;Meetings;[MS-OXOCAL] section 2.2.10.2.6;dispidFExceptionalBody
+0x00008207;PidLidAppointmentAuxiliaryFlags;Specifies a bit field that describes the auxiliary state of the object.;PtypInteger32, 0x0003;Meetings;[MS-OXOCAL] section 2.2.1.3;dispidApptAuxFlags
+0x00008208;PidLidLocation;Specifies the location of the event.;PtypString, 0x001F;Calendar;[MS-OXOCAL] section 2.2.1.4;dispidLocation
+0x00008209;PidLidMeetingWorkspaceUrl;Specifies the URL of the Meeting Workspace that is associated with a Calendar object.;PtypString, 0x001F;Meetings;[MS-OXOCAL] section 2.2.1.48;dispidMWSURL
+0x0000820A;PidLidForwardInstance;Indicates whether the Meeting Request object represents an exception to a recurring series, and whether it was forwarded (even when forwarded by the organizer) rather than being an invitation sent by the organizer.;PtypBoolean, 0x000B;Meetings;[MS-OXOCAL] section 2.2.6.3;dispidFwrdInstance
+0x0000820C;PidLidLinkedTaskItems;Indicates whether the user did not include any text in the body of the Meeting Response object.;PtypMultipleBinary, 0x1102;Tasks;[MS-OXOCAL] section 2.2.1.47;dispidLinkedTaskItems
+0x0000820D;PidLidAppointmentStartWhole;Specifies the start date and time of the appointment.;PtypTime, 0x0040;Calendar;[MS-OXOCAL] section 2.2.1.5;dispidApptStartWhole
+0x0000820E;PidLidAppointmentEndWhole;Specifies the end date and time for the event.;PtypTime, 0x0040;Calendar;[MS-OXOCAL] section 2.2.1.6;dispidApptEndWhole
+0x0000820F;PidLidAppointmentStartTime;Identifies the time that the appointment starts.;PtypTime, 0x0040;Calendar;[MS-XWDCAL] section 2.2.7.11;dispidApptStartTime
+0x00008210;PidLidAppointmentEndTime;Indicates the time that the appointment ends.;PtypTime, 0x0040;Calendar;[MS-XWDCAL] section 2.2.7.4;dispidApptEndTime
+0x00008211;PidLidAppointmentEndDate;Indicates the date that the appointment ends.;PtypTime, 0x0040;Calendar;[MS-XWDCAL] section 2.2.7.3;dispidApptEndDate
+0x00008212;PidLidAppointmentStartDate;Identifies the date that the appointment starts.;PtypTime, 0x0040;Calendar;[MS-XWDCAL] section 2.2.7.10;dispidApptStartDate
+0x00008213;PidLidAppointmentDuration;Specifies the length of the event, in minutes.;PtypInteger32, 0x0003;Calendar;[MS-OXOCAL] section 2.2.1.7;dispidApptDuration
+0x00008214;PidLidAppointmentColor;Specifies the color to be used when displaying the Calendar object.;PtypInteger32, 0x0003;Calendar;[MS-OXOCAL] section 2.2.1.50;dispidApptColor
+0x00008215;PidLidAppointmentSubType;Specifies whether the event is an all-day event.;PtypBoolean, 0x000B;Calendar;[MS-OXOCAL] section 2.2.1.9;dispidApptSubType
+0x00008216;PidLidAppointmentRecur;Specifies the dates and times when a recurring series occurs.;PtypBinary, 0x0102;Calendar;[MS-OXOCAL] section 2.2.1.44;dispidApptRecur
+0x00008217;PidLidAppointmentStateFlags;Specifies a bit field that describes the state of the object.;PtypInteger32, 0x0003;Meetings;[MS-OXOCAL] section 2.2.1.10;dispidApptStateFlags
+0x00008218;PidLidResponseStatus;Specifies the response status of an attendee.;PtypInteger32, 0x0003;Meetings;[MS-OXOCAL] section 2.2.1.11;dispidResponseStatus
+0x00008220;PidLidAppointmentReplyTime;Specifies the date and time at which the attendee responded to a received meeting request or Meeting Update object.;PtypTime, 0x0040;Meetings;[MS-OXOCAL] section 2.2.4.3;dispidApptReplyTime
+0x00008223;PidLidRecurring;Specifies whether the object represents a recurring series.;PtypBoolean, 0x000B;Calendar;[MS-OXOCAL] section 2.2.1.12;dispidRecurring
+0x00008224;PidLidIntendedBusyStatus;Contains the value of the PidLidBusyStatus property (section 2.47) on the Meeting object in the organizer's calendar at the time that the Meeting Request object or Meeting Update object was sent.;PtypInteger32, 0x0003;Meetings;[MS-OXOCAL] section 2.2.6.4;dispidIntendedBusyStatus
+0x00008226;PidLidAppointmentUpdateTime;Indicates the time at which the appointment was last updated.;PtypTime, 0x0040;Meetings;[MS-XWDCAL] section 2.2.7.15;dispidApptUpdateTime
+0x00008228;PidLidExceptionReplaceTime;Specifies the date and time, in UTC, within a recurrence pattern that an exception will replace.;PtypTime, 0x0040;Calendar;[MS-OXOCAL] section 2.2.10.2.5;dispidExceptionReplaceTime
+0x00008229;PidLidFInvited;Indicates whether invitations have been sent for the meeting that this Meeting object represents.;PtypBoolean, 0x000B;Meetings;[MS-OXOCAL] section 2.2.4.4;dispidFInvited
+0x0000822B;PidLidFExceptionalAttendees;Indicates that the object is a Recurring Calendar object with one or more exceptions, and that at least one of the Exception Embedded Message objects has at least one RecipientRow structure, as described in [MS-OXCDATA] section 2.8.3.;PtypBoolean, 0x000B;Meetings;[MS-OXOCAL] section 2.2.2.3;dispidFExceptionalAttendees
+0x0000822E;PidLidOwnerName;Indicates the name of the owner of the mailbox.;PtypString, 0x001F;Meetings;[MS-XWDCAL] section 2.2.7.47;dispidOwnerName
+0x0000822F;PidLidFOthersAppointment;Indicates whether the Calendar folder from which the meeting was opened is another user's calendar.;PtypBoolean, 0x000B;Meetings;[MS-XWDCAL] section 2.2.7.26;dispidFOthersAppt, http://schemas.microsoft.com/mapi/fothersappt
+0x00008230;PidLidAppointmentReplyName;Specifies the user who last replied to the meeting request or meeting update.;PtypString, 0x001F;Meetings;[MS-OXOCAL] section 2.2.4.5;dispidApptReplyName, http://schemas.microsoft.com/mapi/apptreplyname
+0x00008231;PidLidRecurrenceType;Specifies the recurrence type of the recurring series.;PtypInteger32, 0x0003;Calendar;[MS-OXOCAL] section 2.2.1.45;dispidRecurType
+0x00008232;PidLidRecurrencePattern;Specifies a description of the recurrence pattern of the Calendar object.;PtypString, 0x001F;Calendar;[MS-OXOCAL] section 2.2.1.46;dispidRecurPattern
+0x00008233;PidLidTimeZoneStruct;Specifies time zone information for a recurring meeting.;PtypBinary, 0x0102;Calendar;[MS-OXOCAL] section 2.2.1.39;dispidTimeZoneStruct
+0x00008234;PidLidTimeZoneDescription;Specifies a human-readable description of the time zone that is represented by the data in the PidLidTimeZoneStruct property (section 2.342).;PtypString, 0x001F;Calendar;[MS-OXOCAL] section 2.2.1.40;dispidTimeZoneDesc
+0x00008235;PidLidClipStart;Specifies the start date and time of the event in UTC.;PtypTime, 0x0040;Calendar;[MS-OXOCAL] section 2.2.1.14;dispidClipStart
+0x00008236;PidLidClipEnd;Specifies the end date and time of the event in UTC.;PtypTime, 0x0040;Calendar;[MS-OXOCAL] section 2.2.1.15;dispidClipEnd
+0x00008237;PidLidOriginalStoreEntryId;Specifies the EntryID of the delegator’s message store.;PtypBinary, 0x0102;Meetings; [MS-OXOCAL] section 2.2.4.9;dispidOrigStoreEid, http://schemas.microsoft.com/mapi/origstoreeid
+0x00008238;PidLidAllAttendeesString;Specifies a list of all the attendees except for the organizer, including resources and unsendable attendees.;PtypString, 0x001F;Meetings;[MS-OXOCAL] section 2.2.1.16;dispidAllAttendeesString
+0x0000823A;PidLidAutoFillLocation;Indicates whether the value of the PidLidLocation property (section 2.159) is set to the PidTagDisplayName property (section 2.676).;PtypBoolean, 0x000B;Meetings;[MS-OXOCAL] section 2.2.4.8;dispidAutoFillLocation
+0x0000823B;PidLidToAttendeesString;Contains a list of all of the sendable attendees who are also required attendees.;PtypString, 0x001F;Meetings;[MS-OXOCAL] section 2.2.1.17;dispidToAttendeesString
+0x0000823C;PidLidCcAttendeesString;Contains a list of all the sendable attendees who are also optional attendees.;PtypString, 0x001F;Meetings;[MS-OXOCAL] section 2.2.1.18;dispidCCAttendeesString
+0x00008240;PidLidConferencingCheck;;PtypBoolean, 0x000B;Conferencing;[MS-OXOCAL] section 2.2.1.56.2;dispidConfCheck
+0x00008241;PidLidConferencingType;Specifies the type of the meeting. ;PtypInteger32, 0x0003;Conferencing;[MS-OXOCAL] section 2.2.1.56.3;dispidConfType
+0x00008242;PidLidDirectory;Specifies the directory server to be used.;PtypString, 0x001F;Conferencing;[MS-OXOCAL] section 2.2.1.56.4;dispidDirectory
+0x00008243;PidLidOrganizerAlias;Specifies the email address of the organizer.;PtypString, 0x001F;Conferencing;[MS-OXOCAL] section 2.2.1.56.6;dispidOrgAlias
+0x00008244;PidLidAutoStartCheck;Specifies whether to automatically start the conferencing application when a reminder for the start of a meeting is executed.;PtypBoolean, 0x000B;Conferencing;[MS-OXOCAL] section 2.2.1.56.1 ;dispidAutoStartCheck
+0x00008246;PidLidAllowExternalCheck;This property is set to TRUE.;PtypBoolean, 0x000B;Conferencing;[MS-OXOCAL] section 2.2.1.56.5;dispidAllowExternCheck
+0x00008247;PidLidCollaborateDoc;Specifies the document to be launched when the user joins the meeting. ;PtypString, 0x001F;Conferencing;[MS-OXOCAL] section 2.2.1.56.7;dispidCollaborateDoc
+0x00008248;PidLidNetShowUrl;Specifies the URL to be launched when the user joins the meeting.;PtypString, 0x001F;Conferencing;[MS-OXOCAL] section 2.2.1.56.8;dispidNetShowURL
+0x00008249;PidLidOnlinePassword;Specifies the password for a meeting on which the PidLidConferencingType property (section 2.66) has the value 0x00000002. ;PtypString, 0x001F;Conferencing;[MS-OXOCAL] section 2.2.1.56.9;dispidOnlinePassword
+0x00008250;PidLidAppointmentProposedStartWhole;Specifies the proposed value for the PidLidAppointmentStartWhole property (section 2.29) for a counter proposal.;PtypTime, 0x0040;Meetings;[MS-OXOCAL] section 2.2.7.3;dispidApptProposedStartWhole
+0x00008251;PidLidAppointmentProposedEndWhole;Specifies the proposed value for the PidLidAppointmentEndWhole property (section 2.14) for a counter proposal.;PtypTime, 0x0040;Meetings;[MS-OXOCAL] section 2.2.7.4;dispidApptProposedEndWhole
+0x00008256;PidLidAppointmentProposedDuration;Indicates the proposed value for the PidLidAppointmentDuration property (section 2.11) for a counter proposal.;PtypInteger32, 0x0003;Meetings;[MS-OXOCAL] section 2.2.7.5;dispidApptProposedDuration
+0x00008257;PidLidAppointmentCounterProposal;Indicates whether a Meeting Response object is a counter proposal.;PtypBoolean, 0x000B;Meetings;[MS-OXOCAL] section 2.2.4.7;dispidApptCounterProposal
+0x00008259;PidLidAppointmentProposalNumber;Specifies the number of attendees who have sent counter proposals that have not been accepted or rejected by the organizer.;PtypInteger32, 0x0003;Meetings;[MS-OXOCAL] section 2.2.4.6;dispidApptProposalNum
+0x0000825A;PidLidAppointmentNotAllowPropose;Indicates whether attendees are not allowed to propose a new date and/or time for the meeting.;PtypBoolean, 0x000B;Meetings;[MS-OXOCAL] section 2.2.1.26;dispidApptNotAllowPropose
+0x0000825D;PidLidAppointmentUnsendableRecipients;Contains a list of unsendable attendees.;PtypBinary, 0x0102;Meetings;[MS-OXOCAL] section 2.2.1.25;dispidApptUnsendableRecips
+0x0000825E;PidLidAppointmentTimeZoneDefinitionStartDisplay;Specifies time zone information that indicates the time zone of the PidLidAppointmentStartWhole property (section 2.29).;PtypBinary, 0x0102;Calendar;[MS-OXOCAL] section 2.2.1.42;dispidApptTZDefStartDisplay
+0x0000825F;PidLidAppointmentTimeZoneDefinitionEndDisplay;Specifies time zone information that indicates the time zone of the PidLidAppointmentEndWhole property (section 2.14).;PtypBinary, 0x0102;Calendar;[MS-OXOCAL] section 2.2.1.43;dispidApptTZDefEndDisplay
+0x00008260;PidLidAppointmentTimeZoneDefinitionRecur;Specifies time zone information that describes how to convert the meeting date and time on a recurring series to and from UTC.;PtypBinary, 0x0102;Calendar;[MS-OXOCAL] section 2.2.1.41;dispidApptTZDefRecur
+0x00008261;PidLidForwardNotificationRecipients;Contains a list of RecipientRow structures, as described in [MS-OXCDATA] section 2.8.3, that indicate the recipients of a meeting forward. ;PtypBinary, 0x0102;Meetings;[MS-OXOCAL] section 2.2.9.3;dispidForwardNotificationRecipients
+0x0000827A;PidLidInboundICalStream;Contains the contents of the iCalendar MIME part of the original MIME message.;PtypBinary, 0x0102;Calendar;[MS-OXCICAL] section 2.1.3.4.1;InboundICalStream, dispidInboundICalStream
+0x0000827B;PidLidSingleBodyICal;Indicates that the original MIME message contained a single MIME part.;PtypBoolean, 0x000B;Calendar;[MS-OXCICAL] section 2.1.3.4.2;IsSingleBodyICal, dispidIsSingleBodyICal
+0x00008501;PidLidReminderDelta;Specifies the interval, in minutes, between the time at which the reminder first becomes overdue and the start time of the Calendar object.;PtypInteger32, 0x0003;Reminders;[MS-OXORMDR] section 2.2.1.3;dispidReminderDelta, http://schemas.microsoft.com/mapi/reminderdelta
+0x00008502;PidLidReminderTime;Specifies the initial signal time for objects that are not Calendar objects.;PtypTime, 0x0040;Reminders;[MS-OXORMDR] section 2.2.1.4;dispidReminderTime
+0x00008503;PidLidReminderSet;Specifies whether a reminder is set on the object.;PtypBoolean, 0x000B;Reminders;[MS-OXORMDR] section 2.2.1.1;dispidReminderSet
+0x00008504;PidLidReminderTimeTime;Indicates the time of the reminder for the appointment or meeting.;PtypTime, 0x0040;Reminders;[MS-XWDCAL] section 2.2.7.60;dispidReminderTimeTime
+0x00008505;PidLidReminderTimeDate;Indicates the time and date of the reminder for the appointment or meeting.;PtypTime, 0x0040;Reminders;[MS-XWDCAL] section 2.2.7.59;dispidReminderTimeDate
+0x00008506;PidLidPrivate;Indicates whether the end user wishes for this Message object to be hidden from other users who have access to the Message object.;PtypBoolean, 0x000B;General Message Properties;[MS-OXCMSG] section 2.2.1.15;dispidPrivate
+0x0000850E;PidLidAgingDontAgeMe;Specifies whether to automatically archive the message.;PtypBoolean, 0x000B;Common;[MS-OXCMSG] section 2.2.1.33;dispidAgingDontAgeMe
+0x00008510;PidLidSideEffects;Specifies how a Message object is handled by the client in relation to certain user interface actions by the user, such as deleting a message.;PtypInteger32, 0x0003;Run-time configuration;[MS-OXCMSG] section 2.2.1.16;dispidSideEffects
+0x00008511;PidLidRemoteStatus;Indicates the remote status of the calendar item.;PtypInteger32, 0x0003;Run-time configuration;[MS-XWDCAL] section 2.2.7.62;dispidRemoteStatus
+0x00008514;PidLidSmartNoAttach;Indicates whether the Message object has no end-user visible attachments.;PtypBoolean, 0x000B;Run-time configuration;[MS-OXCMSG] section 2.2.1.14;dispidSmartNoAttach
+0x00008516;PidLidCommonStart;Indicates the start time for the Message object. ;PtypTime, 0x0040;General Message Properties;[MS-OXCMSG] section 2.2.1.18;dispidCommonStart
+0x00008517;PidLidCommonEnd;Indicates the end time for the Message object. ;PtypTime, 0x0040;General Message Properties;[MS-OXCMSG] section 2.2.1.19;dispidCommonEnd
+0x00008518;PidLidTaskMode;Specifies the assignment status of the embedded Task object.;PtypInteger32, 0x0003;Tasks;[MS-OXOTASK] section 2.2.3.2;dispidTaskMode
+0x00008519;PidLidTaskGlobalId;Contains a unique GUID for this task, which is used to locate an existing task upon receipt of a task response or task update.;PtypBinary, 0x0102;Tasks;[MS-OXOTASK] section 2.2.2.2.32;dispidTaskGlobalObjId
+0x0000851A;PidLidAutoProcessState;Specifies the options used in the automatic processing of email messages.;PtypInteger32, 0x0003;General Message Properties;[MS-OXOMSG] section 2.2.1.73;dispidSniffState
+0x0000851C;PidLidReminderOverride;Specifies whether the client is to respect the current values of the PidLidReminderPlaySound property (section 2.221) and the PidLidReminderFileParameter property (section 2.219), or use the default values for those properties.;PtypBoolean, 0x000B;Reminders;[MS-OXORMDR] section 2.2.1.5;dispidReminderOverride
+0x0000851D;PidLidReminderType;This property is not set and, if set, is ignored.;PtypInteger32, 0x0003;Reminders;[MS-OXORMDR] section 2.2.1.9;dispidReminderType, http://schemas.microsoft.com/mapi/remindertype
+0x0000851E;PidLidReminderPlaySound;Specifies whether the client is to play a sound when the reminder becomes overdue.;PtypBoolean, 0x000B;Reminders;[MS-OXORMDR] section 2.2.1.6;dispidReminderPlaySound
+0x0000851F;PidLidReminderFileParameter;Specifies the filename of the sound that a client is to play when the reminder for that object becomes overdue. ;PtypString, 0x001F;Reminders;[MS-OXORMDR] section 2.2.1.7;dispidReminderFileParam
+0x00008520;PidLidVerbStream;Specifies what voting responses the user can make in response to the message.;PtypBinary, 0x0102;Run-time configuration;[MS-OXOMSG] section 2.2.1.74;dispidVerbStream
+0x00008524;PidLidVerbResponse;Specifies the voting option that a respondent has selected.;PtypString, 0x001F;General Message Properties;[MS-OXOMSG] section 2.2.1.75;dispidVerbResponse
+0x00008530;PidLidFlagRequest;Contains user-specifiable text to be associated with the flag.;PtypString, 0x001F;Flagging;[MS-OXOFLAG] section 2.2.1.9;dispidRequest
+0x00008535;PidLidBilling;Specifies billing information for the contact.;PtypString, 0x001F;General Message Properties;[MS-OXOCNTC] section 2.2.1.10.24;dispidBilling
+0x00008536;PidLidNonSendableTo;Contains a list of all of the unsendable attendees who are also required attendees.;PtypString, 0x001F;Meetings;[MS-OXOCAL] section 2.2.1.19;dispidNonSendableTo
+0x00008537;PidLidNonSendableCc;Contains a list of all of the unsendable attendees who are also optional attendees.;PtypString, 0x001F;Meetings;[MS-OXOCAL] section 2.2.1.20;dispidNonSendableCC
+0x00008538;PidLidNonSendableBcc;Contains a list of all of the unsendable attendees who are also resources.;PtypString, 0x001F;Meetings;[MS-OXOCAL] section 2.2.1.21;dispidNonSendableBCC
+0x00008539;PidLidCompanies;Contains a list of company names, each of which is associated with a contact that is specified in the PidLidContacts property ([MS-OXCMSG] section 2.2.1.57.2).;PtypMultipleString, 0x101F;General Message Properties;[MS-OXOJRNL] section 2.2.2.4;dispidCompanies, http://schemas.microsoft.com/exchange/companies
+0x0000853A;PidLidContacts;Contains the PidTagDisplayName property (section 2.676) of each Address Book EntryID referenced in the value of the PidLidContactLinkEntry property (section 2.70).;PtypMultipleString, 0x101F;General Message Properties;[MS-OXCMSG] section 2.2.1.57.2;dispidContacts
+0x00008543;PidLidNonSendToTrackStatus;Contains the value from the response table.;PtypMultipleInteger32, 0x1003;General Message Properties;[MS-OXOCAL] section 2.2.1.22;dispidNonSendToTrackStatus
+0x00008544;PidLidNonSendCcTrackStatus;Contains the value from the response table.;PtypMultipleInteger32, 0x1003;General Message Properties;[MS-OXOCAL] section 2.2.1.23;dispidNonSendCcTrackStatus
+0x00008545;PidLidNonSendBccTrackStatus;Contains the value from the response table.;PtypMultipleInteger32, 0x1003;General Message Properties;[MS-OXOCAL] section 2.2.1.24;dispidNonSendBccTrackStatus
+0x00008552;PidLidCurrentVersion;Specifies the build number of the client application that sent the message.;PtypInteger32, 0x0003;General Message Properties;[MS-OXCMSG] section 2.2.1.34;dispidCurrentVersion
+0x00008554;PidLidCurrentVersionName;Specifies the name of the client application that sent the message.;PtypString, 0x001F;General Message Properties;[MS-OXCMSG] section 2.2.1.35;dispidCurrentVersionName
+0x00008560;PidLidReminderSignalTime;Specifies the point in time when a reminder transitions from pending to overdue. ;PtypTime, 0x0040;Reminders;[MS-OXORMDR] section 2.2.1.2;dispidReminderNextTime
+0x00008580;PidLidInternetAccountName;Specifies the user-visible email account name through which the email message is sent.;PtypString, 0x001F;General Message Properties;[MS-OXOMSG] section 2.2.1.62;dispidInetAcctName
+0x00008581;PidLidInternetAccountStamp;Specifies the email account ID through which the email message is sent.;PtypString, 0x001F;General Message Properties;[MS-OXOMSG] section 2.2.1.63;dispidInetAcctStamp
+0x00008582;PidLidUseTnef;Specifies whether Transport Neutral Encapsulation Format (TNEF) is to be included on a message when the message is converted from TNEF to MIME or SMTP format.;PtypBoolean, 0x000B;Run-time configuration;[MS-OXOMSG] section 2.2.1.66;dispidUseTNEF
+0x00008584;PidLidContactLinkSearchKey;Contains the list of SearchKeys for a Contact object linked to by the Message object.;PtypBinary, 0x0102;Contact Properties;[MS-OXCMSG] section 2.2.1.57.4;dispidContactLinkSearchKey
+0x00008585;PidLidContactLinkEntry;Contains the elements of the PidLidContacts property (section 2.77).;PtypBinary, 0x0102;Contact Properties;[MS-OXCMSG] section 2.2.1.57.1;dispidContactLinkEntry
+0x00008586;PidLidContactLinkName;;PtypString, 0x001F;Contact Properties;[MS-OXCMSG] section 2.2.1.57.3;dispidContactLinkName
+0x0000859C;PidLidSpamOriginalFolder;Specifies which folder a message was in before it was filtered into the Junk Email folder.;PtypBinary, 0x0102;Spam;[MS-OXCSPAM] section 2.2.1.1;dispidSpamOriginalFolder
+0x000085A0;PidLidToDoOrdinalDate;Contains the current time, in UTC, which is used to determine the sort order of objects in a consolidated to-do list.;PtypTime, 0x0040;Tasks;[MS-OXOFLAG] section 2.2.1.13;dispidToDoOrdinalDate
+0x000085A1;PidLidToDoSubOrdinal;Contains the numerals 0 through 9 that are used to break a tie when the PidLidToDoOrdinalDate property (section 2.344) is used to perform a sort of objects.;PtypString, 0x001F;Tasks;[MS-OXOFLAG] section 2.2.1.14;dispidToDoSubOrdinal
+0x000085A4;PidLidToDoTitle;Contains user-specifiable text to identify this Message object in a consolidated to-do list.;PtypString, 0x001F;Tasks;[MS-OXOFLAG] section 2.2.1.12;dispidToDoTitle
+0x000085B1;PidLidInfoPathFormName;Contains the name of the form associated with this message.;PtypString, 0x001F;Common;[MS-OXCMSG] section 2.2.1.27;
+0x000085B5;PidLidClassified;Indicates whether the contents of this message are regarded as classified information.;PtypBoolean, 0x000B;General Message Properties;[MS-OXCMSG] section 2.2.1.25;dispidClassified
+0x000085B6;PidLidClassification;Contains a list of the classification categories to which the associated Message object has been assigned.;PtypString, 0x001F;General Message Properties;[MS-OXCMSG] section 2.2.1.23;dispidClassification
+0x000085B7;PidLidClassificationDescription;Contains a human-readable summary of each of the classification categories included in the PidLidClassification property (section 2.53).;PtypString, 0x001F;General Message Properties;[MS-OXCMSG] section 2.2.1.24;dispidClassDesc
+0x000085B8;PidLidClassificationGuid;Contains the GUID that identifies the list of email classification categories used by a Message object.;PtypString, 0x001F;General Message Properties;[MS-OXCMAIL] section 2.5.1;dispidClassGuid
+0x000085BA;PidLidClassificationKeep;Indicates whether the message uses any classification categories.;PtypBoolean, 0x000B;General Message Properties;[MS-OXCMAIL] section 2.5.2;dispidClassKeep
+0x000085BD;PidLidReferenceEntryId;Specifies the value of the EntryID of the Contact object unless the Contact object is a copy of an earlier original.;PtypBinary, 0x0102;Contact Properties;[MS-OXOCNTC] section 2.2.1.10.1;dispidReferenceEID
+0x000085BF;PidLidValidFlagStringProof;Contains the value of the PidTagMessageDeliveryTime property (section 2.789) when modifying the PidLidFlagRequest property (section 2.136).;PtypTime, 0x0040;Tasks;[MS-OXOFLAG] section 2.2.1.11;dispidValidFlagStringProof
+0x000085C0;PidLidFlagString;Contains an index identifying one of a set of pre-defined text strings to be associated with the flag.;PtypInteger32, 0x0003;Tasks;[MS-OXOFLAG] section 2.2.1.10;dispidFlagStringEnum
+0x000085C6;PidLidConversationActionMoveFolderEid;Contains the EntryID for the destination folder.;PtypBinary, 0x0102;Conversation Actions;[MS-OXOCFG] section 2.2.8.3;dispidConvActionMoveFolderEid
+0x000085C7;PidLidConversationActionMoveStoreEid;Contains the EntryID for a move to a folder in a different message store.;PtypBinary, 0x0102;Conversation Actions;[MS-OXOCFG] section 2.2.8.4;dispidConvActionMoveStoreEid
+0x000085C8;PidLidConversationActionMaxDeliveryTime;Contains the maximum value of the PidTagMessageDeliveryTime property (section 2.789) of all of the Email objects modified in response to the last time that the user changed a conversation action on the client.;PtypTime, 0x0040;Conversation Actions;[MS-OXOCFG] section 2.2.8.2;dispidConvActionMaxDeliveryTime
+0x000085C9;PidLidConversationProcessed;Specifies a sequential number to be used in the processing of a conversation action.;PtypInteger32, 0x0003;Conversation Actions;[MS-OXOCFG] section 2.2.8.6;dispidConvExLegacyProcessedRand
+0x000085CA;PidLidConversationActionLastAppliedTime;Contains the time, in UTC, that an Email object was last received in the conversation, or the last time that the user modified the conversation action, whichever occurs later.;PtypTime, 0x0040;Conversation Actions;[MS-OXOCFG] section 2.2.8.1;dispidConvActionLastAppliedTime
+0x000085CB;PidLidConversationActionVersion;Contains the version of the conversation action FAI message.;PtypInteger32, 0x0003;Conversation Actions;[MS-OXOCFG] section 2.2.8.5;dispidConvActionVersion
+0x000085CC;PidLidServerProcessed;Indicates whether the Meeting Request object or Meeting Update object has been processed.;PtypBoolean, 0x000B;Calendar;[MS-OXOCAL] section 2.2.5.4;dispidExchangeProcessed
+0x000085CD;PidLidServerProcessingActions;Indicates what processing actions have been taken on this Meeting Request object or Meeting Update object.;PtypInteger32, 0x0003;Calendar;[MS-OXOCAL] section 2.2.5.5;dispidExchangeProcessingAction
+0x000085E0;PidLidPendingStateForSiteMailboxDocument;Specifies the synchronization state of the Document object that is in the Document Libraries folder of the site mailbox.; PtypInteger32, 0x0003;Site Mailbox ;[MS-OXODOC] section 2.2.1.34;dispidPendingStateforTMDocument
+0x00008700;PidLidLogType;Briefly describes the journal activity that is being recorded.;PtypString, 0x001F;Journal;[MS-OXOJRNL] section 2.2.1.1;dispidLogType
+0x00008706;PidLidLogStart;Contains the time, in UTC, at which the activity began.;PtypTime, 0x0040;Journal;[MS-OXOJRNL] section 2.2.1.3;dispidLogStart
+0x00008707;PidLidLogDuration;Contains the duration, in minutes, of the activity.;PtypInteger32, 0x0003;Journal;[MS-OXOJRNL] section 2.2.1.5;dispidLogDuration
+0x00008708;PidLidLogEnd;Contains the time, in UTC, at which the activity ended.;PtypTime, 0x0040;Journal;[MS-OXOJRNL] section 2.2.1.4;dispidLogEnd
+0x0000870C;PidLidLogFlags;Contains metadata about the Journal object.;PtypInteger32, 0x0003;Journal;[MS-OXOJRNL] section 2.2.1.6;dispidLogFlags
+0x0000870E;PidLidLogDocumentPrinted;Indicates whether the document was printed during journaling.;PtypBoolean, 0x000B;Journal;[MS-OXOJRNL] section 2.2.1.7;dispidLogDocPrinted
+0x0000870F;PidLidLogDocumentSaved;Indicates whether the document was saved during journaling.;PtypBoolean, 0x000B;Journal;[MS-OXOJRNL] section 2.2.1.8;dispidLogDocSaved
+0x00008710;PidLidLogDocumentRouted;Indicates whether the document was sent to a routing recipient during journaling.;PtypBoolean, 0x000B;Journal;[MS-OXOJRNL] section 2.2.1.9;dispidLogDocRouted
+0x00008711;PidLidLogDocumentPosted;Indicates whether the document was sent by email or posted to a server folder during journaling. ;PtypBoolean, 0x000B;Journal;[MS-OXOJRNL] section 2.2.1.10;dispidLogDocPosted
+0x00008712;PidLidLogTypeDesc;Contains an expanded description of the journal activity that is being recorded.;PtypString, 0x001F;Journal;[MS-OXOJRNL] section 2.2.1.2;dispidLogTypeDesc
+0x00008900;PidLidPostRssChannelLink;Contains the URL of the RSS or Atom feed from which the XML file came.;PtypString, 0x001F;RSS;[MS-OXORSS] section 2.2.1.1;dispidPostRssChannelLink
+0x00008901;PidLidPostRssItemLink;Contains the URL of the link from an RSS or Atom item.;PtypString, 0x001F;RSS;[MS-OXORSS] section 2.2.1.2;dispidPostRssItemLink
+0x00008902;PidLidPostRssItemHash;Contains a hash of the feed XML computed by using an implementation-dependent algorithm.;PtypInteger32, 0x0003;RSS;[MS-OXORSS] section 2.2.1.3;dispidPostRssItemHash
+0x00008903;PidLidPostRssItemGuid;Contains a unique identifier for the RSS object.;PtypString, 0x001F;RSS;[MS-OXORSS] section 2.2.1.4;dispidPostRssItemGuid
+0x00008904;PidLidPostRssChannel;Contains the contents of the title field from the XML of the Atom feed or RSS channel.;PtypString, 0x001F;RSS;[MS-OXORSS] section 2.2.1.5;dispidPostRssChannel
+0x00008905;PidLidPostRssItemXml;Contains the item element and all of its sub-elements from an RSS feed, or the entry element and all of its sub-elements from an Atom feed.;PtypString, 0x001F;RSS;[MS-OXORSS] section 2.2.1.6;dispidPostRssItemXml
+0x00008906;PidLidPostRssSubscription;Contains the user's preferred name for the RSS or Atom subscription.;PtypString, 0x001F;RSS;[MS-OXORSS] section 2.2.1.7;dispidPostRssSubscription
+0x00008A00;PidLidSharingStatus;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingStatus
+0x00008A01;PidLidSharingProviderGuid;"Contains the value ""%xAE.F0.06.00.00.00.00.00.C0.00.00.00.00.00.00.46"".";PtypBinary, 0x0102;Sharing;[MS-OXSHARE] section 2.2.2.12;dispidSharingProviderGuid
+0x00008A02;PidLidSharingProviderName;Contains a user-displayable name of the sharing provider identified by the PidLidSharingProviderGuid property (section 2.266).;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.14;dispidSharingProviderName
+0x00008A03;PidLidSharingProviderUrl;Contains a URL related to the sharing provider identified by the PidLidSharingProviderGuid property (section 2.266).;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.16;dispidSharingProviderUrl
+0x00008A04;PidLidSharingRemotePath;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingRemotePath
+0x00008A05;PidLidSharingRemoteName;Contains the value of the PidTagDisplayName property (section 2.676) on the folder being shared.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.3.1;dispidSharingRemoteName
+0x00008A06;PidLidSharingRemoteUid;Contains the EntryID of the folder being shared.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.3.7;dispidSharingRemoteUid
+0x00008A07;PidLidSharingInitiatorName;Contains the value of the PidTagDisplayName property (section 2.676) from the Address Book object identified by the PidLidSharingInitiatorEntryId property (section 2.248).;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.8;dispidSharingInitiatorName
+0x00008A08;PidLidSharingInitiatorSmtp;Contains the value of the PidTagSmtpAddress property (section 2.1020) from the Address Book object identified by the PidLidSharingInitiatorEntryId property (section 2.248).;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.9;dispidSharingInitiatorSmtp
+0x00008A09;PidLidSharingInitiatorEntryId;Contains the value of the PidTagEntryId property (section 2.683) for the Address Book object of the currently logged-on user.;PtypBinary, 0x0102;Sharing;[MS-OXSHARE] section 2.2.2.7;dispidSharingInitiatorEid
+0x00008A0A;PidLidSharingFlags;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingFlags
+0x00008A0B;PidLidSharingProviderExtension;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingProviderExtension
+0x00008A0C;PidLidSharingRemoteUser;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingRemoteUser
+0x00008A0D;PidLidSharingRemotePass;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingRemotePass
+0x00008A0E;PidLidSharingLocalPath;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingLocalPath
+0x00008A0F;PidLidSharingLocalName;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingLocalName
+0x00008A10;PidLidSharingLocalUid;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingLocalUid
+0x00008A13;PidLidSharingFilter;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypBinary, 0x0102;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingFilter
+0x00008A14;PidLidSharingLocalType;Contains the value of the PidTagContainerClass property (section 2.642) of the folder being shared.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.10;dispidSharingLocalType
+0x00008A15;PidLidSharingFolderEntryId;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypBinary, 0x0102;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingFolderEid
+0x00008A17;PidLidSharingCapabilities;Indicates that the Message object relates to a special folder.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.2.1;dispidSharingCaps
+0x00008A18;PidLidSharingFlavor;Indicates the type of Sharing Message object.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.2.5;dispidSharingFlavor
+0x00008A19;PidLidSharingAnonymity;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingAnonymity
+0x00008A1A;PidLidSharingReciprocation;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingReciprocation
+0x00008A1B;PidLidSharingPermissions;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingPermissions
+0x00008A1C;PidLidSharingInstanceGuid;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypBinary, 0x0102;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingInstanceGuid
+0x00008A1D;PidLidSharingRemoteType;Contains the same value as the PidLidSharingLocalType property (section 2.259).;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.3.5;dispidSharingRemoteType
+0x00008A1E;PidLidSharingParticipants;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingParticipants
+0x00008A1F;PidLidSharingLastSyncTime;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypTime, 0x0040;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingLastSync
+0x00008A21;PidLidSharingExtensionXml;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingExtXml
+0x00008A22;PidLidSharingRemoteLastModificationTime;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypTime, 0x0040;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingRemoteLastMod
+0x00008A23;PidLidSharingLocalLastModificationTime;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypTime, 0x0040;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingLocalLastMod
+0x00008A24;PidLidSharingConfigurationUrl;Contains a zero-length string.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.3;dispidSharingConfigUrl
+0x00008A25;PidLidSharingStart;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypTime, 0x0040;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingStart
+0x00008A26;PidLidSharingStop;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypTime, 0x0040;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingStop
+0x00008A27;PidLidSharingResponseType;Contains the type of response with which the recipient of the sharing request responded.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.4.2;dispidSharingResponseType
+0x00008A28;PidLidSharingResponseTime;Contains the time at which the recipient of the sharing request sent a sharing response.;PtypTime, 0x0040;Sharing;[MS-OXSHARE] section 2.2.4.1;dispidSharingResponseTime
+0x00008A29;PidLidSharingOriginalMessageEntryId;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypBinary, 0x0102;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingOriginalMessageEid
+0x00008A2A;PidLidSharingSyncInterval;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingSyncInterval
+0x00008A2B;PidLidSharingDetail;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingDetail
+0x00008A2C;PidLidSharingTimeToLive;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingTimeToLive
+0x00008A2D;PidLidSharingBindingEntryId;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypBinary, 0x0102;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingBindingEid
+0x00008A2E;PidLidSharingIndexEntryId;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypBinary, 0x0102;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingIndexEid
+0x00008A2F;PidLidSharingRemoteComment;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingRemoteComment
+0x00008A40;PidLidSharingWorkingHoursStart;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypTime, 0x0040;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingWorkingHoursStart
+0x00008A41;PidLidSharingWorkingHoursEnd;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypTime, 0x0040;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingWorkingHoursEnd
+0x00008A42;PidLidSharingWorkingHoursDays;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingWorkingHoursDays
+0x00008A43;PidLidSharingWorkingHoursTimeZone;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypBinary, 0x0102;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingWorkingHoursTZ
+0x00008A44;PidLidSharingDataRangeStart;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypTime, 0x0040;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingDataRangeStart
+0x00008A45;PidLidSharingDataRangeEnd;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypTime, 0x0040;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingDataRangeEnd
+0x00008A46;PidLidSharingRangeStart;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingRangeStart
+0x00008A47;PidLidSharingRangeEnd;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingRangeEnd
+0x00008A48;PidLidSharingRemoteStoreUid;Contains a hexadecimal string representation of the value of the PidTagStoreEntryId property (section 2.1028) on the folder being shared.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.3.3;dispidSharingRemoteStoreUid
+0x00008A49;PidLidSharingLocalStoreUid;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingLocalStoreUid
+0x00008A4B;PidLidSharingRemoteByteSize;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingRemoteByteSize
+0x00008A4C;PidLidSharingRemoteCrc;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingRemoteCrc
+0x00008A4D;PidLidSharingLocalComment;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingLocalComment
+0x00008A4E;PidLidSharingRoamLog;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingRoamLog
+0x00008A4F;PidLidSharingRemoteMessageCount;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingRemoteMsgCount
+0x00008A51;PidLidSharingBrowseUrl;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingBrowseUrl
+0x00008A55;PidLidSharingLastAutoSyncTime;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypTime, 0x0040;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingLastAutoSync
+0x00008A56;PidLidSharingTimeToLiveAuto;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingTimeToLiveAuto
+0x00008A5B;PidLidSharingRemoteVersion;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingRemoteVersion
+0x00008A5C;PidLidSharingParentBindingEntryId;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypBinary, 0x0102;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingParentBindingEid
+0x00008A60;PidLidSharingSyncFlags;Contains a value that is ignored by the server no matter what value is generated by the client.;PtypInteger32, 0x0003;Sharing;[MS-OXSHARE] section 2.2.6;dispidSharingSyncFlags
+0x00008B00;PidLidNoteColor;Specifies the suggested background color of the Note object.;PtypInteger32, 0x0003;Sticky Notes;[MS-OXONOTE] section 2.2.1.1;dispidNoteColor
+0x00008B02;PidLidNoteWidth;Specifies the width of the visible message window in pixels.;PtypInteger32, 0x0003;Sticky Notes;[MS-OXONOTE] section 2.2.1.2;dispidNoteWidth
+0x00008B03;PidLidNoteHeight;Specifies the height of the visible message window in pixels.;PtypInteger32, 0x0003;Sticky Notes;[MS-OXONOTE] section 2.2.1.3;dispidNoteHeight
+0x00008B04;PidLidNoteX;Specifies the distance, in pixels, from the left edge of the screen that a user interface displays a Note object.;PtypInteger32, 0x0003;Sticky Notes;[MS-OXONOTE] section 2.2.1.4;dispidNoteX
+0x00008B05;PidLidNoteY;Specifies the distance, in pixels, from the top edge of the screen that a user interface displays a Note object.;PtypInteger32, 0x0003;Sticky Notes;[MS-OXONOTE] section 2.2.1.5;dispidNoteY
+0x00009000;PidLidCategories;Contains the array of text labels assigned to this Message object.;PtypMultipleString, 0x101F;Common;[MS-OXCMSG] section 2.2.1.22;dispidCategories
diff --git a/src/main/resources/PIDName.csv b/src/main/resources/PIDName.csv
new file mode 100644
index 0000000..f7b623f
--- /dev/null
+++ b/src/main/resources/PIDName.csv
@@ -0,0 +1,140 @@
+Property;Description;Property Name;Property Type;Area;Defining reference;Alternate names
+PidNameAcceptLanguage;Contains the value of the MIME Accept-Language header.;Accept-Language;PtypString, 0x001F;Email;[MS-OXCMSG] section 2.2.1.42;AcceptLanguage
+PidNameApplicationName;Specifies the application used to open the file attached to the Document object.;AppName;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.9;urn:schemas-microsoft-com:office:office#NameOfApplication
+PidNameAttachmentMacContentType;Contains the Content-Type of the Mac attachment.;AttachmentMacContentType;PtypString, 0x001F;Message Attachment Properties;[MS-OXCMSG] section 2.2.2.29;
+PidNameAttachmentMacInfo;Contains the headers and resource fork data associated with the Mac attachment.;AttachmentMacInfo;PtypBinary, 0x0102;Message Attachment Properties;[MS-OXCMSG] section 2.2.2.29;
+PidNameAttachmentOriginalPermissionType;Contains the original permission type data associated with a web reference attachment.;AttachmentOriginalPermissionType;PtypInteger32, 0x0003;Message Attachment Properties;[MS-OXCMSG] section 2.2.2.27;
+PidNameAttachmentPermissionType;Contains the permission type data associated with a web reference attachment.;AttachmentPermissionType;PtypInteger32, 0x0003;Message Attachment Properties;[MS-OXCMSG] section 2.2.2.28;
+PidNameAttachmentProviderType;Contains the provider type data associated with a web reference attachment.;AttachmentProviderType;PtypeString, 0x001F;Message Attachment Properties;[MS-OXCMSG] section 2.2.2.26;
+PidNameAudioNotes;Contains textual annotations to a voice message after it has been delivered to the user's mailbox.;UMAudioNotes;PtypString, 0x001F;Unified Messaging;[MS-OXOUM] section 2.2.5.15;UMAudioNotes
+PidNameAuthor;Specifies the author of the file attached to the Document object.;Author;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.3;urn:schemas-microsoft-com:office:office#Author
+PidNameAutomaticSpeechRecognitionData;Contains an unprotected voice message.;AsrData;PtypBinary, 0x0102;Unified Messaging;[MS-OXOUM] section 2.2.5.13;
+PidNameBirthdayContactAttributionDisplayName;Indicates the name of the contact associated with the birthday event.;BirthdayContactAttributionDisplayName;PtypString, 0x001F;Contact Properties;[MS-OXOCAL] section 2.2.1.52;
+PidNameBirthdayContactEntryId;Indicate the EntryID of the contact associated with the birthday event.;BirthdayContactEntryId;PtypBinary, 0x0102;Contact Properties;[MS-OXOCAL] section 2.2.1.53;
+PidNameBirthdayContactPersonGuid;Indicates the person ID's GUID of the contact associated with the birthday event.;BirthdayContactPersonGuid;PtypBinary, 0x0102;Contact Properties;[MS-OXOCAL] section 2.2.1.54;
+PidNameByteCount;Specifies the size, in bytes, of the file attached to the Document object.;ByteCount;PtypInteger32, 0x0003;Common;[MS-OXODOC] section 2.2.1.22;urn:schemas-microsoft-com:office:office#Bytes
+PidNameCalendarAttendeeRole;Specifies the role of the attendee.;urn:schemas:calendar:attendeerole;PtypInteger32, 0x0003;Common;[MS-XWDCAL] section 2.2.2.7;urn:schemas:calendar:attendeerole
+PidNameCalendarBusystatus;Specifies whether the attendee is busy at the time of an appointment on their calendar.;urn:schemas:calendar:busystatus;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.8;urn:schemas:calendar:busystatus
+PidNameCalendarContact;Identifies the name of a contact who is an attendee of a meeting.;urn:schemas:calendar:contact;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.9;urn:schemas:calendar:contact
+PidNameCalendarContactUrl;Identifies the URL where you can access contact information in HTML format.;urn:schemas:calendar:contacturl;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.10;urn:schemas:calendar:contacturl
+PidNameCalendarCreated;Identifies the date and time, in UTC, when the organizer created the appointment or meeting.;urn:schemas:calendar:created;PtypTime, 0x0040;Common;[MS-XWDCAL] section 2.2.2.11;urn:schemas:calendar:created
+PidNameCalendarDescriptionUrl;Specifies the URL of a resource that contains a description of an appointment or meeting.;urn:schemas:calendar:descriptionurl;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.12;urn:schemas:calendar:descriptionurl
+PidNameCalendarDuration;Identifies the duration, in seconds, of an appointment or meeting.;urn:schemas:calendar:duration;PtypInteger32, 0x0003;Common;[MS-XWDCAL] section 2.2.2.13;urn:schemas:calendar:duration
+PidNameCalendarExceptionDate;Identifies a list of dates that are exceptions to a recurring appointment.;urn:schemas:calendar:exdate;PtypMultipleTime, 0x1040;Common;[MS-XWDCAL] section 2.2.2.14;urn:schemas:calendar:exdate
+PidNameCalendarExceptionRule;Specifies an exception rule for a recurring appointment.;urn:schemas:calendar:exrule;PtypMultipleString, 0x101F;Common;[MS-XWDCAL] section 2.2.2.15;urn:schemas:calendar:exrule
+PidNameCalendarGeoLatitude;Specifies the geographical latitude of the location of an appointment.;urn:schemas:calendar:geolatitude;PtypFloating64, 0x0005;Common;[MS-XWDCAL] section 2.2.2.16;urn:schemas:calendar:geolatitude
+PidNameCalendarGeoLongitude;Specifies the geographical longitude of the location of an appointment.;urn:schemas:calendar:geolongitude;PtypFloating64, 0x0005;Common;[MS-XWDCAL] section 2.2.2.17;urn:schemas:calendar:geolongitude
+PidNameCalendarInstanceType;Specifies the type of an appointment.;urn:schemas:calendar:instancetype;PtypInteger32, 0x0003;Common;[MS-XWDCAL] section 2.2.2.18;urn:schemas:calendar:instancetype
+PidNameCalendarIsOrganizer;Specifies whether an attendee is the organizer of an appointment or meeting.;urn:schemas:calendar:isorganizer;PtypBoolean, 0x000B;Common;[MS-XWDCAL] section 2.2.2.19;urn:schemas:calendar:isorganizer
+PidNameCalendarLastModified;Specifies the date and time, in UTC, when an appointment was last modified.;urn:schemas:calendar:lastmodified;PtypTime, 0x0040;Common;[MS-XWDCAL] section 2.2.2.20;urn:schemas:calendar:lastmodified
+PidNameCalendarLocationUrl;Specifies a URL with location information in HTML format.;urn:schemas:calendar:locationurl;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.21;urn:schemas:calendar:locationurl
+PidNameCalendarMeetingStatus;Specifies the status of an appointment or meeting.;urn:schemas:calendar:meetingstatus;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.22;urn:schemas:calendar:meetingstatus
+PidNameCalendarMethod;Specifies the iCalendar method that is associated with an Appointment object.;urn:schemas:calendar:method;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.23;urn:schemas:calendar:method
+PidNameCalendarProductId;Identifies the product that created the iCalendar-formatted stream.;urn:schemas:calendar:prodid;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.24;urn:schemas:calendar:prodid
+PidNameCalendarRecurrenceIdRange;Specifies which instances of a recurring appointment are being referred to.;urn:schemas:calendar:recurrenceidrange;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.25;urn:schemas:calendar:recurrenceidrange
+PidNameCalendarReminderOffset;Identifies the number of seconds before an appointment starts that a reminder is to be displayed.;urn:schemas:calendar:reminderoffset;PtypInteger32, 0x0003;Common;[MS-XWDCAL] section 2.2.2.26;urn:schemas:calendar:reminderoffset
+PidNameCalendarResources;Identifies a list of resources, such as rooms and video equipment, that are available for an appointment.;urn:schemas:calendar:resources;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.27;urn:schemas:calendar:resources
+PidNameCalendarRsvp;Specifies whether the organizer of an appointment or meeting requested a response.;urn:schemas:calendar:rsvp;PtypBoolean, 0x000B;Common;[MS-XWDCAL] section 2.2.2.28;urn:schemas:calendar:rsvp
+PidNameCalendarSequence;Specifies the sequence number of a version of an appointment.;urn:schemas:calendar:sequence;PtypInteger32, 0x0003;Common;[MS-XWDCAL] section 2.2.2.29;urn:schemas:calendar:sequence
+PidNameCalendarTimeZone;Specifies the time zone of an appointment or meeting.;urn:schemas:calendar:timezone;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.30;urn:schemas:calendar:timezone
+PidNameCalendarTimeZoneId;Specifies the time zone identifier of an appointment or meeting.;urn:schemas:calendar:timezoneid;PtypInteger32, 0x0003;Common;[MS-XWDCAL] section 2.2.2.31;urn:schemas:calendar:timezoneid
+PidNameCalendarTransparent;Specifies whether an appointment or meeting is visible to busy time searches.;urn:schemas:calendar:transparent;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.32;urn:schemas:calendar:transparent
+PidNameCalendarUid;Specifies the unique identifier of an appointment or meeting.;urn:schemas:calendar:uid;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.33;urn:schemas:calendar:uid
+PidNameCalendarVersion;Identifies the version of the iCalendar specification, as specified in [MS-OXCICAL] section 2.1.3.1.1.3, that is required to correctly interpret an iCalendar object.;urn:schemas:calendar:version;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.2.34;urn:schemas:calendar:version
+PidNameCategory;Specifies the category of the file attached to the Document object.;Category;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.18;urn:schemas-microsoft-com:office:office#Category
+PidNameCharacterCount;Specifies the character count of the file attached to the Document object.;CharCount;PtypInteger32, 0x0003;Common;[MS-OXODOC] section 2.2.1.16;urn:schemas-microsoft-com:office:office#Characters
+PidNameComments;Specifies the comments of the file attached to the Document object.;Comments;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.5;urn:schemas-microsoft-com:office:office#Comments
+PidNameCompany;Specifies the company for which the file was created.;Company;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.21;urn:schemas-microsoft-com:office:office#Company
+PidNameContentBase;Specifies the value of the MIME Content-Base header, which defines the base URI for resolving relative URLs contained within the message body.;Content-Base;PtypString, 0x001F;Email;[MS-OXCMSG] section 2.2.1.41;BodyContentBase
+PidNameContentClass;Contains a string that identifies the type of content of a Message object.;Content-Class;PtypString, 0x001F;Email;[MS-OXCMSG] section 2.2.1.48;DAV:contentclass, urn:schemas:mailheader:content-class
+PidNameContentType;Specifies the type of the body part content.;Content-Type;PtypString, 0x001F;Email;[MS-OXCMSG] section 2.2.1.50;urn:schemas:mailheader:content-type
+PidNameCreateDateTimeReadOnly;Specifies the time, in UTC, that the file was first created.;CreateDtmRo;PtypTime, 0x0040;Common;[MS-OXODOC] section 2.2.1.12;urn:schemas-microsoft-com:office:office#Created
+PidNameCrossReference;Contains the name of the host (with domains omitted) and a white-space-separated list of colon-separated pairs of newsgroup names and message numbers.;Xref;PtypString, 0x001F;Email;[MS-OXCMAIL] section 2.5.3;urn:schemas:mailheader:xref
+PidNameDavId;Specifies a unique ID for the calendar item.;DAV:id;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.1.2;DAV:id
+PidNameDavIsCollection;Indicates whether a Calendar object is a collection.;DAV:iscollection;PtypBoolean, 0x000B;Common;[MS-XWDCAL] section 2.2.1.3;DAV:iscollection
+PidNameDavIsStructuredDocument;Indicates whether a Calendar object is a structured document.;DAV:isstructureddocument;PtypBoolean, 0x000B;Common;[MS-XWDCAL] section 2.2.1.4;DAV:isstructureddocument
+PidNameDavParentName;Specifies the name of the Folder object that contains the Calendar object.;DAV:parentname;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.1.5;DAV:parentname
+PidNameDavUid;Specifies the unique identifier for an item.;DAV:uid;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.1.6;DAV:uid
+PidNameDocumentParts;Specifies the title of each part of the document.;DocParts;PtypMultipleString, 0x101F;Common;[MS-OXODOC] section 2.2.1.29;urn:schemas-microsoft-com:office:office#PartTitles
+PidNameEditTime;Specifies the time that the file was last edited.;EditTime;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.10;urn:schemas-microsoft-com:office:office#TotalTime
+PidNameExchangeIntendedBusyStatus;Specifies the intended free/busy status of a meeting in a Meeting request.;http://schemas.microsoft.com/exchange/intendedbusystatus;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.8.1;http://schemas.microsoft.com/exchange/intendedbusystatus
+PidNameExchangeJunkEmailMoveStamp;Indicates that the message is not to be processed by a spam filter.;http://schemas.microsoft.com/exchange/junkemailmovestamp;PtypInteger32, 0x0003;Secure Messaging Properties;[MS-OXCSPAM] section 2.2.1.2;http://schemas.microsoft.com/exchange/junkemailmovestamp
+PidNameExchangeModifyExceptionStructure;Specifies a structure that modifies an exception to the recurrence.;http://schemas.microsoft.com/exchange/modifyexceptionstruct;PtypBinary, 0x0102;Common;[MS-XWDCAL] section 2.2.8.2;http://schemas.microsoft.com/exchange/modifyexceptionstruct
+PidNameExchangeNoModifyExceptions;Indicates whether exceptions to a recurring appointment can be modified.;http://schemas.microsoft.com/exchange/nomodifyexceptions;PtypBoolean, 0x000B;Common;[MS-XWDCAL] section 2.2.8.3;http://schemas.microsoft.com/exchange/nomodifyexceptions
+PidNameExchangePatternEnd;Identifies the maximum time when an instance of a recurring appointment ends.;http://schemas.microsoft.com/exchange/patternend;PtypTime, 0x0040;Common;[MS-XWDCAL] section 2.2.8.4;http://schemas.microsoft.com/exchange/patternend
+PidNameExchangePatternStart;Identifies the absolute minimum time when an instance of a recurring appointment starts.;http://schemas.microsoft.com/exchange/patternstart;PtypTime, 0x0040;Common;[MS-XWDCAL] section 2.2.8.5;http://schemas.microsoft.com/exchange/patternstart
+PidNameExchangeReminderInterval;Identifies the time, in seconds, between reminders.;http://schemas.microsoft.com/exchange/reminderinterval;PtypInteger32, 0x0003;Common;[MS-XWDCAL] section 2.2.8.6;http://schemas.microsoft.com/exchange/reminderinterval
+PidNameExchDatabaseSchema;Specifies an array of URLs that identifies other folders within the same message store that contain schema definition items.;urn:schemas-microsoft-com:exch-data:baseschema;PtypMultipleString, 0x101F;Common;[MS-XWDCAL] section 2.2.5.1;urn:schemas-microsoft-com:exch-data:baseschema
+PidNameExchDataExpectedContentClass;Specifies an array of names that indicates the expected content classes of items within a folder.;urn:schemas-microsoft-com:exch-data:expected-content-class;PtypMultipleString, 0x101F;Common;[MS-XWDCAL] section 2.2.5.2;urn:schemas-microsoft-com:exch-data:expected-content-class
+PidNameExchDataSchemaCollectionReference;Specifies an array of names that indicates the expected content classes of items within a folder.;urn:schemas-microsoft-com:exch-data:schema-collection-ref;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.5.3;urn:schemas-microsoft-com:exch-data:schema-collection-ref
+PidNameExtractedAddresses;Contains an XML document with a single AddressSet element.;XmlExtractedAddresses;PtypString, 0x001F;Extracted Entities;[MS-OXCEXT] section 2.2.2.1;dispidXmlExtractedAddresses
+PidNameExtractedContacts;Contains an XML document with a single ContactSet element.;XmlExtractedContacts;PtypString, 0x001F;Extracted Entities;[MS-OXCEXT] section 2.2.2.2;dispidXmlExtractedContacts
+PidNameExtractedEmails;Contains an XML document with a single EmailSet element.;XmlExtractedEmails;PtypString, 0x001F;Extracted Entities;[MS-OXCEXT] section 2.2.2.3;dispidXmlExtractedEmails
+PidNameExtractedMeetings;Contains an XML document with a single MeetingSet element.;XmlExtractedMeetings;PtypString, 0x001F;Extracted Entities;[MS-OXCEXT] section 2.2.2.4;dispidXmlExtractedMeetings
+PidNameExtractedPhones;Contains an XML document with a single PhoneSet element.;XmlExtractedPhones;PtypString, 0x001F;Extracted Entities;[MS-OXCEXT] section 2.2.2.5;dispidXmlExtractedPhones
+PidNameExtractedTasks;Contains an XML document with a single TaskSet element.;XmlExtractedTasks;PtypString, 0x001F;Extracted Entities;[MS-OXCEXT] section 2.2.2.6;dispidXmlExtractedTasks
+PidNameExtractedUrls;Contains an XML document with a single UrlSet element.;XmlExtractedUrls;PtypString, 0x001F;Extracted Entities;[MS-OXCEXT] section 2.2.2.7;dispidXmlExtractedUrls
+PidNameFrom;Specifies the SMTP email alias of the organizer of an appointment or meeting.;From;PtypString, 0x001F;Email;[MS-XWDCAL] section 2.2.2.35;urn:schemas:calendar:organizer
+PidNameHeadingPairs;Specifies which group of headings are indented in the document.;HeadingPairs;PtypBinary, 0x0102;Common;[MS-OXODOC] section 2.2.1.30;urn:schemas-microsoft-com:office:office#HeadingPairs
+PidNameHiddenCount;Specifies the hidden value of the file attached to the Document object.;HiddenCount;PtypInteger32, 0x0003;Common;[MS-OXODOC] section 2.2.1.27;urn:schemas-microsoft-com:office:office#HiddenSlides
+PidNameHttpmailCalendar;Specifies the URL for the Calendar folder for a particular user.;urn:schemas:httpmail:calendar;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.3.1;urn:schemas:httpmail:calendar
+PidNameHttpmailHtmlDescription;Specifies the HTML content of the message.;urn:schemas:httpmail:htmldescription;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.3.2;urn:schemas:httpmail:htmldescription
+PidNameHttpmailSendMessage;Specifies the email submission URI to which outgoing email is submitted.;urn:schemas:httpmail:sendmsg;PtypString, 0x001F;Common;[MS-XWDCAL] section 2.2.3.3;urn:schemas:httpmail:sendmsg
+PidNameICalendarRecurrenceDate;Identifies an array of instances of a recurring appointment.;urn:schemas:calendar:rdate;PtypMultipleTime, 0x1040;Common;[MS-XWDCAL] section 2.2.2.36;urn:schemas:calendar:rdate
+PidNameICalendarRecurrenceRule;Specifies the rule for the pattern that defines a recurring appointment.;urn:schemas:calendar:rrule;PtypMultipleString, 0x101F;Common;[MS-XWDCAL] section 2.2.2.37;urn:schemas:calendar:rrule
+PidNameInternetSubject;Specifies the subject of the message.;Subject;PtypString, 0x001F;Email;[MS-XWDCAL] section 2.2.4.1;urn:schemas:mailheader:subject
+PidNameIsBirthdayContactWritable;Indicates whether the contact associated with the birthday event is writable.;IsBirthdayContactWritable;PtypBoolean, 0x000B;Contact Properties;[MS-OXOCAL] section 2.2.1.55;
+PidNameKeywords;Contains keywords or categories for the Message object.;Keywords;PtypMultipleString, 0x101F;General Message Properties;[MS-OXCMSG] section 2.2.1.17;urn:schemas-microsoft-com:office:office#Keywords, http://schemas.microsoft.com/exchange/keywords-utf8
+PidNameLastAuthor;Specifies the most recent author of the file attached to the Document object.;LastAuthor;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.7;urn:schemas-microsoft-com:office:office#LastAuthor
+PidNameLastPrinted;Specifies the time, in UTC, that the file was last printed.;LastPrinted;PtypTime, 0x0040;Common;[MS-OXODOC] section 2.2.1.11;urn:schemas-microsoft-com:office:office#LastPrinted
+PidNameLastSaveDateTime;Specifies the time, in UTC, that the file was last saved.;LastSaveDtm;PtypTime, 0x0040;Common;[MS-OXODOC] section 2.2.1.13;urn:schemas-microsoft-com:office:office#LastSaved
+PidNameLineCount;Specifies the number of lines in the file attached to the Document object.;LineCount;PtypInteger32, 0x0003;Common;[MS-OXODOC] section 2.2.1.23;urn:schemas-microsoft-com:office:office#Lines
+PidNameLinksDirty;Indicates whether the links in the document are up-to-date.;LinksDirty;PtypBoolean, 0x000B;Common;[MS-OXODOC] section 2.2.1.31;urn:schemas-microsoft-com:office:office#LinksUpToDate
+PidNameLocationUrl;;urn:schemas:calendar:locationurl;PtypString, 0x001F;Calendar;;urn:schemas:calendar:locationurl, LocationUrl
+PidNameManager;Specifies the manager of the file attached to the Document object.;Manager;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.20;urn:schemas-microsoft-com:office:office#Manager
+PidNameMeetingDoNotForward;Specifies whether to allow the meeting to be forwarded.;DoNotForward;PtypBoolean, 0x000B;Meetings;[MS-OXOCAL] section 2.2.1.51;
+PidNameMSIPLabels;Contains the string that specifies the CLP label information.;msip_labels;PtypString, 0x001F;Email;[MS-OXCMSG] section 2.2.1.59 ;
+PidNameMultimediaClipCount;Specifies the number of multimedia clips in the file attached to the Document object.;MMClipCount;PtypInteger32, 0x0003;Common;[MS-OXODOC] section 2.2.1.28;urn:schemas-microsoft-com:office:office#MultimediaClips
+PidNameNoteCount;Specifies the number of notes in the file attached to the Document object.;NoteCount;PtypInteger32, 0x0003;Common;[MS-OXODOC] section 2.2.1.26;urn:schemas-microsoft-com:office:office#Notes
+PidNameOMSAccountGuid;Contains the GUID of the SMS account used to deliver the message.;OMSAccountGuid;PtypString, 0x001F;SMS;[MS-OXOSMMS] section 2.2.1.1 ;
+PidNameOMSMobileModel;Indicates the model of the mobile device used to send the SMS or MMS message.;OMSMobileModel;PtypString, 0x001F;SMS;[MS-OXOSMMS] section 2.2.1.6;
+PidNameOMSScheduleTime;Contains the time, in UTC, at which the client requested that the service provider send the SMS or MMS message.;OMSScheduleTime;PtypTime, 0x0040;SMS;[MS-OXOSMMS] section 2.2.1.2;
+PidNameOMSServiceType;Contains the type of service used to send an SMS or MMS message.;OMSServiceType;PtypInteger32, 0x0003;SMS;[MS-OXOSMMS] section 2.2.1.3;
+PidNameOMSSourceType;Contains the source of an SMS or MMS message.;OMSSourceType;PtypInteger32, 0x0003;SMS;[MS-OXOSMMS] section 2.2.1.4;
+PidNamePageCount;Specifies the page count of the file attached to the Document object.;PageCount;PtypInteger32, 0x0003;Common;[MS-OXODOC] section 2.2.1.14;urn:schemas-microsoft-com:office:office#Pages
+PidNameParagraphCount;Specifies the number of paragraphs in the file attached to the Document object.;ParCount;PtypInteger32, 0x0003;Common;[MS-OXODOC] section 2.2.1.24;urn:schemas-microsoft-com:office:office#Paragraphs
+PidNamePhishingStamp;Indicates whether a message is likely to be phishing.;http://schemas.microsoft.com/outlook/phishingstamp;PtypInteger32, 0x0003;Secure Messaging Properties;[MS-OXPHISH] section 2.2.1.1;
+PidNamePresentationFormat;Specifies the presentation format of the file attached to the Document object.;PresFormat;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.19;urn:schemas-microsoft-com:office:office#PresentationFormat
+PidNameQuarantineOriginalSender;Specifies the original sender of a message.;quarantine-original-sender;PtypString, 0x001F;Common;[MS-OXCMAIL] section 2.5.4;
+PidNameRevisionNumber;Specifies the revision number of the file attached to the Document object.;RevNumber;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.8;urn:schemas-microsoft-com:office:office#Revision
+PidNameRightsManagementLicense;Specifies the value used to cache the Use License for the rights-managed email message.;DRMLicense;PtypMultipleBinary, 0x1102;Secure Messaging Properties;[MS-OXORMMS] section 2.2.1.1;
+PidNameScale;Indicates whether the image is to be scaled or cropped.;Scale;PtypBoolean, 0x000B;Common;[MS-OXODOC] section 2.2.1.32;urn:schemas-microsoft-com:office:office#ScaleCrop
+PidNameSecurity;Specifies the security level of the file attached to the Document object.;Security;PtypInteger32, 0x0003;Common;[MS-OXODOC] section 2.2.1.17;urn:schemas-microsoft-com:office:office#Security
+PidNameSlideCount;Specifies the number of slides in the file attached to the Document object.;SlideCount;PtypInteger32, 0x0003;Common;[MS-OXODOC] section 2.2.1.25;urn:schemas-microsoft-com:office:office#Slides
+PidNameSubject;Specifies the subject of the file attached to the Document object.;Subject;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.2;urn:schemas-microsoft-com:office:office#Subject
+PidNameTemplate;Specifies the template of the file attached to the Document object.;Template;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.6;urn:schemas-microsoft-com:office:office#Template
+PidNameThumbnail;Specifies the data representing the thumbnail image of the document.;Thumbnail;PtypBinary, 0x0102;Common;[MS-OXODOC] section 2.2.1.33;urn:schemas-microsoft-com:office:office#ThumbNail
+PidNameTitle;Specifies the title of the file attached to the Document object.;Title;PtypString, 0x001F;Common;[MS-OXODOC] section 2.2.1.1;urn:schemas-microsoft-com:office:office#Title
+PidNameWordCount;Specifies the word count of the file attached to the Document object.;WordCount;PtypInteger32, 0x0003;Common;[MS-OXODOC] section 2.2.1.15;urn:schemas-microsoft-com:office:office#Words
+PidNameXCallId;Contains a unique identifier associated with the phone call.;X-CallID;PtypString, 0x001F;Unified Messaging;[MS-OXOUM] section 2.2.5.12;
+PidNameXFaxNumberOfPages;Specifies how many discrete pages are contained within an attachment representing a facsimile message.;X-FaxNumberOfPages;PtypInteger16, 0x0002;Unified Messaging;[MS-OXOUM] section 2.2.5.8;
+PidNameXRequireProtectedPlayOnPhone;Indicates that the client only renders the message on a phone.;X-RequireProtectedPlayOnPhone;PtypBoolean, 0x000B;Unified Messaging;[MS-OXOUM] section 2.2.5.14;
+PidNameXSenderTelephoneNumber;Contains the telephone number of the caller associated with a voice mail message.;X-CallingTelephoneNumber;PtypString, 0x001F;Unified Messaging;[MS-OXOUM] section 2.2.5.2;
+PidNameXSharingBrowseUrl;Contains a value that is ignored by the server no matter what value is generated by the client.;X-Sharing-Browse-Url;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;
+PidNameXSharingCapabilities;Contains a string representation of the value of the PidLidSharingCapabilities property (section 2.237).;X-Sharing-Capabilities;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.2;
+PidNameXSharingConfigUrl;Contains the same value as the PidLidSharingConfigurationUrl property (section 2.238).;X-Sharing-Config-Url;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.4;
+PidNameXSharingExendedCaps;Contains a value that is ignored by the server no matter what value is generated by the client.;X-Sharing-Exended-Caps;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;
+PidNameXSharingFlavor;Contains a hexadecimal string representation of the value of the PidLidSharingFlavor property (section 2.245).;X-Sharing-Flavor;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.6;
+PidNameXSharingInstanceGuid;Contains a value that is ignored by the server no matter what value is generated by the client.;X-Sharing-Instance-Guid;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;
+PidNameXSharingLocalType;Contains the same value as the PidLidSharingLocalType property (section 2.259).;X-Sharing-Local-Type;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.11;
+PidNameXSharingProviderGuid;Contains the hexadecimal string representation of the value of the PidLidSharingProviderGuid property (section 2.266).;X-Sharing-Provider-Guid;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.13;
+PidNameXSharingProviderName;Contains the same value as the PidLidSharingProviderName property (section 2.267).;X-Sharing-Provider-Name;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.15;
+PidNameXSharingProviderUrl;Contains the same value as the PidLidSharingProviderUrl property (section 2.268).;X-Sharing-Provider-Url;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.2.17;
+PidNameXSharingRemoteName;Contains the same value as the PidLidSharingRemoteName property (section 2.277).;X-Sharing-Remote-Name;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.3.2;
+PidNameXSharingRemotePath;Contains a value that is ignored by the server no matter what value is generated by the client.;X-Sharing-Remote-Path;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.6;
+PidNameXSharingRemoteStoreUid;Contains the same value as the PidLidSharingRemoteStoreUid property (section 2.282).;X-Sharing-Remote-Store-Uid;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.3.4;
+PidNameXSharingRemoteType;Contains the same value as the PidLidSharingRemoteType property (section 2.281).;X-Sharing-Remote-Type;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.3.6;
+PidNameXSharingRemoteUid;Contains the same value as the PidLidSharingRemoteUid property (section 2.282).;X-Sharing-Remote-Uid;PtypString, 0x001F;Sharing;[MS-OXSHARE] section 2.2.3.8;
+PidNameXVoiceMessageAttachmentOrder;Contains the list of names for the audio file attachments that are to be played as part of a message, in reverse order.;X-AttachmentOrder;PtypString, 0x001F;Unified Messaging;[MS-OXOUM] section 2.2.5.10;
+PidNameXVoiceMessageDuration;Specifies the length of the attached audio message, in seconds.;X-VoiceMessageDuration;PtypInteger16, 0x0002;Unified Messaging;[MS-OXOUM] section 2.2.5.4;
+PidNameXVoiceMessageSenderName;Contains the name of the caller who left the attached voice message, as provided by the voice network's caller ID system.;X-VoiceMessageSenderName;PtypString, 0x001F;Unified Messaging;[MS-OXOUM] section 2.2.5.6;
diff --git a/src/main/resources/PIDShortID.csv b/src/main/resources/PIDShortID.csv
new file mode 100644
index 0000000..680c104
--- /dev/null
+++ b/src/main/resources/PIDShortID.csv
@@ -0,0 +1,576 @@
+"ID";"Property";"Description:";"Data type";"Area";"Defining reference";"Alternate names"
+"0x0001";"PidTagTemplateData";"Describes the controls used in the template that is used to retrieve address book information.";"PtypBinary, 0x0102";"Address Book";"[MS-OXOABKT] section 2.2.2";"PR_EMS_TEMPLATE_BLOB"
+"0x0002";"PidTagAlternateRecipientAllowed";"Specifies whether the sender permits the message to be auto-forwarded.";"PtypBoolean, 0x000B";"Address Properties";"[MS-OXCMSG] section 2.2.1.36";"PR_ALTERNATE_RECIPIENT_ALLOWED, ptagAlternateRecipientAllowed"
+"0x0004";"PidTagAutoForwardComment";"Contains text included in an automatically-generated message.";"PtypString, 0x001F";"General Report Properties";"[MS-OXCMSG] section 2.2.1.21";"PR_AUTO_FORWARD_COMMENT, PR_AUTO_FORWARD_COMMENT_A, PR_AUTO_FORWARD_COMMENT_W"
+"0x0004";"PidTagScriptData";"Contains a series of instructions that can be executed to format an address and the data that is needed to execute those instructions.";"PtypBinary, 0x0102";"Address Book";"[MS-OXOABKT] section 2.2.2";"PR_EMS_SCRIPT_BLOB"
+"0x0005";"PidTagAutoForwarded";"Indicates that a Message object has been automatically generated or automatically forwarded.";"PtypBoolean, 0x000B";"General Report Properties";"[MS-OXCMSG] section 2.2.1.20";"PR_AUTO_FORWARDED, ptagAutoForwarded"
+"0x000F";"PidTagDeferredDeliveryTime";"Contains the date and time, in UTC, at which the sender prefers that the message be delivered.";"PtypTime, 0x0040";"MapiEnvelope ";"[MS-OXOMSG] section 2.2.1.6";"PR_DEFERRED_DELIVERY_TIME, ptagDeferredDeliveryTime, http://schemas.microsoft.com/exchange/deferred-delivery-iso"
+"0x0010";"PidTagDeliverTime";"Contains the delivery time for a delivery status notification, as specified [RFC3464], or a message disposition notification, as specified in [RFC3798].";"PtypTime, 0x0040";"Email";"[MS-OXOMSG] section 2.2.2.29";"PR_DELIVER_TIME, ptagDeliverTime"
+"0x0015";"PidTagExpiryTime";"Contains the time, in UTC, after which a client wants to receive an expiry event if the message arrives late.";"PtypTime, 0x0040";"MapiEnvelope ";"[MS-OXOMSG] section 2.2.3.7";"PR_EXPIRY_TIME, ptagExpiryTime, urn:schemas:httpmail:expiry-date, http://schemas.microsoft.com/exchange/expiry-date-iso"
+"0x0017";"PidTagImportance";"Indicates the level of importance assigned by the end user to the Message object.";"PtypInteger32, 0x0003";"General Message Properties ";"[MS-OXCMSG] section 2.2.1.11";"PR_IMPORTANCE, ptagImportance, urn:schemas:httpmail:importance, http://schemas.microsoft.com/exchange/importance-long, http://schemas.microsoft.com/exchange/x-priority-long"
+"0x001A";"PidTagMessageClass";"Denotes the specific type of the Message object.";"PtypString, 0x001F";"Common Property set";"[MS-OXCMSG] section 2.2.1.3 ";"PR_MESSAGE_CLASS, PR_MESSAGE_CLASS_A, ptagMessageClass, PR_MESSAGE_CLASS_W, http://schemas.microsoft.com/exchange/outlookmessageclasshttp://schemas.microsoft.com/exchange/outlookmessageclass"
+"0x0023";"PidTagOriginatorDeliveryReportRequested";"Indicates whether an email sender requests an email delivery receipt from the messaging system.";"PtypBoolean, 0x000B";"MIME Properties ";"[MS-OXOMSG] section 2.2.1.20";"PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED, http://schemas.microsoft.com/exchange/deliveryreportrequested"
+"0x0025";"PidTagParentKey";"Contains the search key that is used to correlate the original message and the reports about the original message.";"PtypBinary, 0x0102";"MapiEnvelope";"[MS-OXOMSG] section 2.2.2.18";"PR_PARENT_KEY, ptagParentKey"
+"0x0026";"PidTagPriority";"Indicates the client's request for the priority with which the message is to be sent by the messaging system.";"PtypInteger32, 0x0003";"Email ";"[MS-OXCMSG] section 2.2.1.12";"PR_PRIORITY, ptagPriority, urn:schemas:httpmail:priority, urn:schemas:httpmail:priority"
+"0x0029";"PidTagReadReceiptRequested";"Specifies whether the email sender requests a read receipt from all recipients when this email message is read or opened.";"PtypBoolean, 0x000B";"Email ";"[MS-OXOMSG] section 2.2.1.29";"PR_READ_RECEIPT_REQUESTED, ptagReadReceiptRequested, http://schemas.microsoft.com/exchange/readreceiptrequested"
+"0x002A";"PidTagReceiptTime";"Contains the sent time for a message disposition notification, as specified in [RFC3798].";"PtypTime, 0x0040";"Email";"[MS-OXOMSG] section 2.2.2.33";"PR_RECEIPT_TIME, ptagReceiptTime"
+"0x002B";"PidTagRecipientReassignmentProhibited";"Specifies whether adding additional or different recipients is prohibited for the email message when forwarding the email message.";"PtypBoolean, 0x000B";"MapiEnvelope";"[MS-OXOMSG] section 2.2.1.42";"PR_RECIPIENT_REASSIGNMENT_PROHIBITED, ptagRecipientReassignmentProhibited"
+"0x002E";"PidTagOriginalSensitivity";"Contains the sensitivity value of the original email message.";"PtypInteger32, 0x0003";"General Message Properties";"[MS-OXOMSG] section 2.2.1.22";"PR_ORIGINAL_SENSITIVITY, ptagOriginalSensitivity"
+"0x0030";"PidTagReplyTime";"Specifies the time, in UTC, that the sender has designated for an associated work item to be due.";"PtypTime, 0x0040";"MapiEnvelope ";"[MS-OXOFLAG] section 2.2.3.1";"PR_REPLY_TIME, urn:schemas:httpmail:reply-by, http://schemas.microsoft.com/exchange/reply-by-iso"
+"0x0031";"PidTagReportTag";"Contains the data that is used to correlate the report and the original message.";"PtypBinary, 0x0102";"MapiEnvelope";"[MS-OXOMSG] section 2.2.2.22";"PR_REPORT_TAG, ptagReportTag"
+"0x0032";"PidTagReportTime";"Indicates the last time that the contact list that is controlled by the PidTagJunkIncludeContacts property (section 2.758) was updated.";"PtypTime, 0x0040";"MapiEnvelope Property set";"[MS-OXCSPAM] section 2.2.2.6";"PR_REPORT_TIME, ptagReportTime, http://schemas.microsoft.com/exchange/reporttime"
+"0x0036";"PidTagSensitivity";"Indicates the sender's assessment of the sensitivity of the Message object.";"PtypInteger32, 0x0003";"General Message Properties ";"[MS-OXCMSG] section 2.2.1.13";"PR_SENSITIVITY, ptagSensitivity, http://schemas.microsoft.com/exchange/sensitivity-long, http://schemas.microsoft.com/exchange/sensitivity"
+"0x0037";"PidTagSubject";"Contains the subject of the email message.";"PtypString, 0x001F";"General Message Properties ";"[MS-OXCMSG] section 2.2.1.46";"PR_SUBJECT, PR_SUBJECT_A, ptagSubject, PR_SUBJECT_W, urn:schemas:httpmail:subject, http://schemas.microsoft.com/exchange/subject-utf8"
+"0x0039";"PidTagClientSubmitTime";"Contains the current time, in UTC, when the email message is submitted.";"PtypTime, 0x0040";"Message Time Properties ";"[MS-OXOMSG] section 2.2.3.11";"PR_CLIENT_SUBMIT_TIME, urn:schemas:httpmail:date, http://schemas.microsoft.com/exchange/date-iso"
+"0x003A";"PidTagReportName";"Contains the display name for the entity (usually a server agent) that generated the report message.";"PtypString, 0x001F";"MapiEnvelope";"[MS-OXOMSG] section 2.2.2.20";"PR_REPORT_NAME, PR_REPORT_NAME_A, PR_REPORT_NAME_W"
+"0x003B";"PidTagSentRepresentingSearchKey";"Contains a binary-comparable key that represents the end user who is represented by the sending mailbox owner.";"PtypBinary, 0x0102";"Address Properties";"[MS-OXOMSG] section 2.2.1.58";"PR_SENT_REPRESENTING_SEARCH_KEY, ptagSentRepresentingSearchKey"
+"0x003D";"PidTagSubjectPrefix";"Contains the prefix for the subject of the message.";"PtypString, 0x001F";"General Message Properties";"[MS-OXCMSG] section 2.2.1.9";"PR_SUBJECT_PREFIX, PR_SUBJECT_PREFIX_A, ptagSubjectPrefix, PR_SUBJECT_PREFIX_W"
+"0x003F";"PidTagReceivedByEntryId";"Contains the address book EntryID of the mailbox receiving the Email object.";"PtypBinary, 0x0102";"Address Properties";"[MS-OXOMSG] section 2.2.1.38";"PR_RECEIVED_BY_ENTRYID"
+"0x0040";"PidTagReceivedByName";"Contains the email message receiver's display name.";"PtypString, 0x001F";"Address Properties";"[MS-OXOMSG] section 2.2.1.39";"PR_RECEIVED_BY_NAME, PR_RECEIVED_BY_NAME_A, PR_RECEIVED_BY_NAME_W"
+"0x0041";"PidTagSentRepresentingEntryId";"Contains the identifier of the end user who is represented by the sending mailbox owner.";"PtypBinary, 0x0102";"Address Properties";"[MS-OXOMSG] section 2.2.1.56";"PR_SENT_REPRESENTING_ENTRYID, ptagSentRepresentingEntryId"
+"0x0042";"PidTagSentRepresentingName";"Contains the display name for the end user who is represented by the sending mailbox owner.";"PtypString, 0x001F";"Address Properties ";"[MS-OXOMSG] section 2.2.1.57";"PR_SENT_REPRESENTING_NAME, PR_SENT_REPRESENTING_NAME_A, ptagSentRepresentingName, PR_SENT_REPRESENTING_NAME_W, urn:schemas:httpmail:fromname, http://schemas.microsoft.com/exchange/from-name-utf8"
+"0x0043";"PidTagReceivedRepresentingEntryId";"Contains an address book EntryID that identifies the end user represented by the receiving mailbox owner.";"PtypBinary, 0x0102";"Address Properties";"[MS-OXOMSG] section 2.2.1.25";"PR_RCVD_REPRESENTING_ENTRYID, ptagRcvdRepresentingEntryId"
+"0x0044";"PidTagReceivedRepresentingName";"Contains the display name for the end user represented by the receiving mailbox owner.";"PtypString, 0x001F";"Address Properties";"[MS-OXOMSG] section 2.2.1.26";"PR_RCVD_REPRESENTING_NAME, PR_RCVD_REPRESENTING_NAME_A, ptagRcvdRepresentingName, PR_RCVD_REPRESENTING_NAME_W"
+"0x0045";"PidTagReportEntryId";"Specifies an entry ID that identifies the application that generated a report message.";"PtypBinary, 0x0102";"MapiEnvelope";"[MS-OXOMSG] section 2.2.1.45";"PR_REPORT_ENTRYID, ptagReportEntryId"
+"0x0046";"PidTagReadReceiptEntryId";"Contains an address book EntryID.";"PtypBinary, 0x0102";"MapiEnvelope";"[MS-OXOMSG] section 2.2.2.26";"PR_READ_RECEIPT_ENTRYID, ptagReadReceiptEntryId"
+"0x0047";"PidTagMessageSubmissionId";"Contains a message identifier assigned by a message transfer agent.";"PtypBinary, 0x0102";"Email";"[MS-OXOMSG] section 2.2.1.79";"PR_MESSAGE_SUBMISSION_ID, ptagMessageSubmissionId"
+"0x0049";"PidTagOriginalSubject";"Specifies the subject of the original message.";"PtypString, 0x001F";"General Message Properties ";"[MS-OXOMSG] section 2.2.2.16";"PR_ORIGINAL_SUBJECT, PR_ORIGINAL_SUBJECT_A, ptagOriginalSubject, PR_ORIGINAL_SUBJECT_W, http://schemas.microsoft.com/exchange/originalsubject, http://schemas.microsoft.com/mapi/original_subject"
+"0x004B";"PidTagOriginalMessageClass";"Designates the PidTagMessageClass property ([MS-OXCMSG] section 2.2.1.3) from the original message.";"PtypString, 0x001F";"Secure Messaging Properties";"[MS-OXOMSG] section 2.2.1.86";"PR_ORIG_MESSAGE_CLASS, PR_ORIG_MESSAGE_CLASS_A, PR_ORIG_MESSAGE_CLASS_W"
+"0x004C";"PidTagOriginalAuthorEntryId";"Contains an address book EntryID structure ([MS-OXCDATA] section 2.2.5.2) and is defined in report messages to identify the user who sent the original message.";"PtypBinary, 0x0102";"Email";"[MS-OXOMSG] section 2.2.1.32";"PR_ORIGINAL_AUTHOR_ENTRYID "
+"0x004D";"PidTagOriginalAuthorName";"Contains the display name of the sender of the original message referenced by a report message.";"PtypString, 0x001F";"Email";"[MS-OXOMSG] section 2.2.1.33";"PR_ORIGINAL_AUTHOR_NAME_W"
+"0x004E";"PidTagOriginalSubmitTime";"Specifies the original email message's submission date and time, in UTC.";"PtypTime, 0x0040";"General Message Properties ";"[MS-OXOMSG] section 2.2.2.17";"PR_ORIGINAL_SUBMIT_TIME, ptagOriginalSubmitTime, http://schemas.microsoft.com/exchange/originaldate, http://schemas.microsoft.com/mapi/original_submit_time"
+"0x004F";"PidTagReplyRecipientEntries";"Identifies a FlatEntryList structure ([MS-OXCDATA] section 2.3.3) of address book EntryIDs for recipients that are to receive a reply.";"PtypBinary, 0x0102";"MapiEnvelope ";"[MS-OXOMSG] section 2.2.1.43";"PR_REPLY_RECIPIENT_ENTRIES, ptagReplyRecipientEntries, http://schemas.microsoft.com/exchange/reply-to-base64"
+"0x0050";"PidTagReplyRecipientNames";"Contains a list of display names for recipients that are to receive a reply.";"PtypString, 0x001F";"MapiEnvelope";"[MS-OXOMSG] section 2.2.1.44";"PR_REPLY_RECIPIENT_NAMES, PR_REPLY_RECIPIENT_NAMES_A, ptagReplyRecipientNames, PR_REPLY_RECIPIENT_NAMES_W"
+"0x0051";"PidTagReceivedBySearchKey";"Identifies an address book search key that contains a binary-comparable key that is used to identify correlated objects for a search.";"PtypBinary, 0x0102";"Address Properties";"[MS-OXOMSG] section 2.2.1.40";"PR_RECEIVED_BY_SEARCH_KEY"
+"0x0052";"PidTagReceivedRepresentingSearchKey";"Identifies an address book search key that contains a binary-comparable key of the end user represented by the receiving mailbox owner.";"PtypBinary, 0x0102";"Address Properties";"[MS-OXOMSG] section 2.2.1.27";"PR_RCVD_REPRESENTING_SEARCH_KEY, ptagRcvdRepresentingSearchKey"
+"0x0053";"PidTagReadReceiptSearchKey";"Contains an address book search key.";"PtypBinary, 0x0102";"MapiEnvelope";"[MS-OXOMSG] section 2.2.2.28";"PR_READ_RECEIPT_SEARCH_KEY, ptagReadReceiptSearchKey"
+"0x0054";"PidTagReportSearchKey";"Contains an address book search key representing the entity (usually a server agent) that generated the report message.";"PtypBinary, 0x0102";"MapiEnvelope";"[MS-OXOMSG] section 2.2.2.21";"PR_REPORT_SEARCH_KEY, ptagReportSearchKey"
+"0x0055";"PidTagOriginalDeliveryTime";"Contains the delivery time, in UTC, from the original message.";"PtypTime, 0x0040";"General Message Properties";"[MS-OXOMSG] section 2.2.2.2";"PR_ORIGINAL_DELIVERY_TIME, ptagOriginalDeliveryTime"
+"0x0057";"PidTagMessageToMe";"Indicates that the receiving mailbox owner is one of the primary recipients of this email message.";"PtypBoolean, 0x000B";"General Message Properties";"[MS-OXOMSG] section 2.2.1.17";"PR_MESSAGE_TO_ME, ptagMessageToMe"
+"0x0058";"PidTagMessageCcMe";"Descripton: Indicates that the receiving mailbox owner is a carbon copy (Cc) recipient of this email message.";"PtypBoolean, 0x000B";"General Message Properties";"[MS-OXOMSG] section 2.2.1.18";"PR_MESSAGE_CC_ME, ptagMessageCcMe"
+"0x0059";"PidTagMessageRecipientMe";"Indicates that the receiving mailbox owner is a primary or a carbon copy (Cc) recipient of this email message.";"PtypBoolean, 0x000B";"General Message Properties";"[MS-OXOMSG] section 2.2.1.19";"PR_MESSAGE_RECIP_ME, ptagMessageRecipMe"
+"0x005A";"PidTagOriginalSenderName";"Contains the value of the original message sender's PidTagSenderName property (section 2.1004), and is set on delivery report messages.";"PtypString, 0x001F";"General Message Properties ";"[MS-OXOMSG] section 2.2.2.9";"PR_ORIGINAL_SENDER_NAME, PR_ORIGINAL_SENDER_NAME_A, ptagOriginalSenderName, PR_ORIGINAL_SENDER_NAME_W, http://schemas.microsoft.com/exchange/originalsendername"
+"0x005B";"PidTagOriginalSenderEntryId";"Contains an address book EntryID that is set on delivery report messages.";"PtypBinary, 0x0102";"General Message Properties";"[MS-OXOMSG] section 2.2.2.8";"PR_ORIGINAL_SENDER_ENTRYID, ptagOriginalSenderEntryId"
+"0x005C";"PidTagOriginalSenderSearchKey";"Contains an address book search key set on the original email message.";"PtypBinary, 0x0102";"General Message Properties";"[MS-OXOMSG] section 2.2.2.10";"PR_ORIGINAL_SENDER_SEARCH_KEY, ptagOriginalSenderSearchKey"
+"0x005D";"PidTagOriginalSentRepresentingName";"Contains the display name of the end user who is represented by the original email message sender.";"PtypString, 0x001F";"General Message Properties";"[MS-OXOMSG] section 2.2.2.14";"PR_ORIGINAL_SENT_REPRESENTING_NAME, PR_ORIGINAL_SENT_REPRESENTING_NAME_A, ptagOriginalSentRepresentingName, PR_ORIGINAL_SENT_REPRESENTING_NAME_W"
+"0x005E";"PidTagOriginalSentRepresentingEntryId";"Identifies an address book EntryID that contains the entry identifier of the end user who is represented by the original message sender.";"PtypBinary, 0x0102";"General Message Properties";"[MS-OXOMSG] section 2.2.2.13";"PR_ORIGINAL_SENT_REPRESENTING_ENTRYID, ptagOriginalSentRepresentingEntryId"
+"0x005F";"PidTagOriginalSentRepresentingSearchKey";"Identifies an address book search key that contains the SearchKey of the end user who is represented by the original message sender.";"PtypBinary, 0x0102";"General Message Properties";"[MS-OXOMSG] section 2.2.2.15";"PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY, ptagOriginalSentRepresentingSearchKey"
+"0x0060";"PidTagStartDate";"Contains the value of the PidLidAppointmentStartWhole property (section 2.29).";"PtypTime, 0x0040";"MapiEnvelope ";"[MS-OXOCAL] section 2.2.1.30";"PR_START_DATE, http://schemas.microsoft.com/mapi/start_date"
+"0x0061";"PidTagEndDate";"Contains the value of the PidLidAppointmentEndWhole property (section 2.14).";"PtypTime, 0x0040";"MapiEnvelope Property set";"[MS-OXOCAL] section 2.2.1.31";"PR_END_DATE, http://schemas.microsoft.com/mapi/end_date"
+"0x0062";"PidTagOwnerAppointmentId";"Specifies a quasi-unique value among all of the Calendar objects in a user's mailbox.";"PtypInteger32, 0x0003";"Appointment ";"[MS-OXOCAL] section 2.2.1.29";"PR_OWNER_APPT_ID, http://schemas.microsoft.com/mapi/owner_appt_id"
+"0x0063";"PidTagResponseRequested";"Indicates whether a response is requested to a Message object.";"PtypBoolean, 0x000B";"MapiEnvelope Property set";"[MS-OXOMSG] section 2.2.1.46";"PR_RESPONSE_REQUESTED, urn:schemas:calendar:responserequested, http://schemas.microsoft.com/mapi/response_requested"
+"0x0064";"PidTagSentRepresentingAddressType";"Contains an email address type.";"PtypString, 0x001F";"Address Properties";"[MS-OXOMSG] section 2.2.1.54";"PR_SENT_REPRESENTING_ADDRTYPE, PR_SENT_REPRESENTING_ADDRTYPE_A, ptagSentRepresentingAddrType, PR_SENT_REPRESENTING_ADDRTYPE_W"
+"0x0065";"PidTagSentRepresentingEmailAddress";"Contains an email address for the end user who is represented by the sending mailbox owner.";"PtypString, 0x001F";"Address Properties";"[MS-OXOMSG] section 2.2.1.55";"PR_SENT_REPRESENTING_EMAIL_ADDRESS, PR_SENT_REPRESENTING_EMAIL_ADDRESS_A, PR_SENT_REPRESENTING_EMAIL_ADDRESS_W"
+"0x0066";"PidTagOriginalSenderAddressType";"Contains the value of the original message sender's PidTagSenderAddressType property (section 2.1000).";"PtypString, 0x001F";"General Message Properties";"[MS-OXOMSG] section 2.2.2.6";"PR_ORIGINAL_SENDER_ADDRTYPE, PR_ORIGINAL_SENDER_ADDRTYPE_A, ptagOriginalSenderAddrType, PR_ORIGINAL_SENDER_ADDRTYPE_W"
+"0x0067";"PidTagOriginalSenderEmailAddress";"Contains the value of the original message sender's PidTagSenderEmailAddress property (section 2.1001).";"PtypString, 0x001F";"General Message Properties";"[MS-OXOMSG] section 2.2.2.7";"PR_ORIGINAL_SENDER_EMAIL_ADDRESS, PR_ORIGINAL_SENDER_EMAIL_ADDRESS_A, PR_ORIGINAL_SENDER_EMAIL_ADDRESS_W"
+"0x0068";"PidTagOriginalSentRepresentingAddressType";"Contains the address type of the end user who is represented by the original email message sender.";"PtypString, 0x001F";"General Message Properties";"[MS-OXOMSG] section 2.2.2.11";"PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE, PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_A, ptagOriginalSentRepresentingAddrType, PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_W"
+"0x0069";"PidTagOriginalSentRepresentingEmailAddress";"Contains the email address of the end user who is represented by the original email message sender.";"PtypString, 0x001F";"General Message Properties";"[MS-OXOMSG] section 2.2.2.12";"PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS, PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_A, PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_W"
+"0x0070";"PidTagConversationTopic";"Contains an unchanging copy of the original subject.";"PtypString, 0x001F";"General Message Properties ";"[MS-OXOMSG] section 2.2.1.5";"PR_CONVERSATION_TOPIC, PR_CONVERSATION_TOPIC_A, ptagConversationTopic, PR_CONVERSATION_TOPIC_W, urn:schemas:httpmail:thread-topic"
+"0x0071";"PidTagConversationIndex";"Indicates the relative position of this message within a conversation thread.";"PtypBinary, 0x0102";"General Message Properties";"[MS-OXOMSG] section 2.2.1.3 ";"PR_CONVERSATION_INDEX, ptagConversationIndex"
+"0x0072";"PidTagOriginalDisplayBcc";"Contains the value of the PidTagDisplayBcc property (section 2.674) from the original message.";"PtypString, 0x001F";"General Message Properties ";"[MS-OXOMSG] section 2.2.2.5";"PR_ORIGINAL_DISPLAY_BCC, PR_ORIGINAL_DISPLAY_BCC_A, ptagOriginalDisplayBcc, PR_ORIGINAL_DISPLAY_BCC_W, http://schemas.microsoft.com/exchange/originaldisplaybcc"
+"0x0073";"PidTagOriginalDisplayCc";"Contains the value of the PidTagDisplayCc property(section 2.675) from the original message.";"PtypString, 0x001F";"General Message Properties ";"[MS-OXOMSG] section 2.2.2.4";"PR_ORIGINAL_DISPLAY_CC, PR_ORIGINAL_DISPLAY_CC_A, ptagOriginalDisplayCc, PR_ORIGINAL_DISPLAY_CC_W, http://schemas.microsoft.com/exchange/originaldisplaycc, http://schemas.microsoft.com/mapi/original_display_cc"
+"0x0074";"PidTagOriginalDisplayTo";"Contains the value of the PidTagDisplayTo property (section 2.678) from the original message.";"PtypString, 0x001F";"General Message Properties ";"[MS-OXOMSG] section 2.2.2.3";"PR_ORIGINAL_DISPLAY_TO, PR_ORIGINAL_DISPLAY_TO_A, ptagOriginalDisplayTo, PR_ORIGINAL_DISPLAY_TO_W, http://schemas.microsoft.com/exchange/originaldisplayto, http://schemas.microsoft.com/mapi/original_display_to"
+"0x0075";"PidTagReceivedByAddressType";"Contains the email message receiver's email address type.";"PtypString, 0x001F";"MapiEnvelope";"[MS-OXOMSG] section 2.2.1.36";"PR_RECEIVED_BY_ADDRTYPE, PR_RECEIVED_BY_ADDRTYPE_A, ptagReceivedByAddrType, PR_RECEIVED_BY_ADDRTYPE_W"
+"0x0076";"PidTagReceivedByEmailAddress";"Contains the email message receiver's email address.";"PtypString, 0x001F";"Address Properties";"[MS-OXOMSG] section 2.2.1.37";"PR_RECEIVED_BY_EMAIL_ADDRESS, PR_RECEIVED_BY_EMAIL_ADDRESS_A, PR_RECEIVED_BY_EMAIL_ADDRESS_W"
+"0x0077";"PidTagReceivedRepresentingAddressType";"Contains the email address type for the end user represented by the receiving mailbox owner.";"PtypString, 0x001F";"Address Properties";"[MS-OXOMSG] section 2.2.1.23";"PR_RCVD_REPRESENTING_ADDRTYPE, PR_RCVD_REPRESENTING_ADDRTYPE_A, ptagRcvdRepresentingAddrType, PR_RCVD_REPRESENTING_ADDRTYPE_W"
+"0x0078";"PidTagReceivedRepresentingEmailAddress";"Contains the email address for the end user represented by the receiving mailbox owner.";"PtypString, 0x001F";"Address Properties";"[MS-OXOMSG] section 2.2.1.24";"PR_RCVD_REPRESENTING_EMAIL_ADDRESS, PR_RCVD_REPRESENTING_EMAIL_ADDRESS_A, PR_RCVD_REPRESENTING_EMAIL_ADDRESS_W"
+"0x007D";"PidTagTransportMessageHeaders";"Contains transport-specific message envelope information for email.";"PtypString, 0x001F";"Email";"[MS-OXOMSG] section 2.2.1.61";"PR_TRANSPORT_MESSAGE_HEADERS, PR_TRANSPORT_MESSAGE_HEADERS_A, PR_TRANSPORT_MESSAGE_HEADERS_W"
+"0x007F";"PidTagTnefCorrelationKey";"Contains a value that correlates a Transport Neutral Encapsulation Format (TNEF) attachment with a message.";"PtypBinary, 0x0102";"MapiEnvelope";"[MS-OXCMSG] section 2.2.1.29";"PR_TNEF_CORRELATION_KEY"
+"0x0080";"PidTagReportDisposition";"Contains a string indicating whether the original message was displayed to the user or deleted (report messages only).";"PtypString, 0x001F";"Email";"[MS-OXOMSG] section 2.2.1.34";"PR_REPORT_DISPOSITION_W "
+"0x0081";"PidTagReportDispositionMode";"Contains a description of the action that a client has performed on behalf of a user (report messages only). ";"PtypString, 0x001F";"Email";"[MS-OXOMSG] section 2.2.1.35";"PR_REPORT_DISPOSITION_MODE_W "
+"0x0807";"PidTagAddressBookRoomCapacity";"Contains the maximum occupancy of the room.";"PtypInteger32, 0x0003";"Address Book";"[MS-OXOABK] section 2.2.9.1";"PR_EMS_AB_ROOM_CAPACITY"
+"0x0809";"PidTagAddressBookRoomDescription";"Contains a description of the Resource object.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.9.2";"PR_EMS_AB_ROOM_DESCRIPTION, PR_EMS_AB_ROOM_DESCRIPTION_A, PR_EMS_AB_ROOM_DESCRIPTION_W"
+"0x0C04";"PidTagNonDeliveryReportReasonCode";"Contains an integer value that indicates a reason for delivery failure.";"PtypInteger32, 0x0003";"Email";"[MS-OXOMSG] section 2.2.2.31";"PR_NDR_REASON_CODE, ptagNDRReasonCode"
+"0x0C05";"PidTagNonDeliveryReportDiagCode";"Contains the diagnostic code for a delivery status notification, as specified in [RFC3464].";"PtypInteger32, 0x0003";"Email";"[MS-OXOMSG] section 2.2.2.30";"PR_NDR_DIAG_CODE, ptagNonDeliveryDiagCode"
+"0x0C06";"PidTagNonReceiptNotificationRequested";"Specifies whether the client sends a non-read receipt.";"PtypBoolean, 0x000B";"Email";"[MS-OXOMSG] section 2.2.1.31";"PR_NON_RECEIPT_NOTIFICATION_REQUESTED"
+"0x0C08";"PidTagOriginatorNonDeliveryReportRequested";"Specifies whether an email sender requests suppression of nondelivery receipts.";"PtypBoolean, 0x000B";"MIME Properties";"[MS-OXOMSG] section 2.2.1.21";"PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED"
+"0x0C15";"PidTagRecipientType";"Represents the recipient type of a recipient on the message.";"PtypInteger32, 0x0003";"MapiRecipient";"[MS-OXOMSG] section 2.2.3.1";"PR_RECIPIENT_TYPE, ptagRecipientType"
+"0x0C17";"PidTagReplyRequested";"Indicates whether a reply is requested to a Message object.";"PtypBoolean, 0x000B";"MapiRecipient";"[MS-OXOMSG] section 2.2.1.45";"PR_REPLY_REQUESTED, ptagReplyRequested"
+"0x0C19";"PidTagSenderEntryId";"Identifies an address book EntryID that contains the address book EntryID of the sending mailbox owner.";"PtypBinary, 0x0102";"Address Properties";"[MS-OXOMSG] section 2.2.1.50";"PR_SENDER_ENTRYID, ptagSenderEntryId"
+"0x0C1A";"PidTagSenderName";"Contains the display name of the sending mailbox owner.";"PtypString, 0x001F";"Address Properties ";"[MS-OXOMSG] section 2.2.1.51";"PR_SENDER_NAME, PR_SENDER_NAME_A, ptagSenderName, PR_SENDER_NAME_W, urn:schemas:httpmail:sendername, http://schemas.microsoft.com/exchange/sender-name-utf8"
+"0x0C1B";"PidTagSupplementaryInfo";"Contains supplementary information about a delivery status notification, as specified in [RFC3464].";"PtypString, 0x001F";"Email";"[MS-OXOMSG] section 2.2.2.36";"PR_SUPPLEMENTARY_INFO, ptagSupplementaryInfo"
+"0x0C1D";"PidTagSenderSearchKey";"Identifies an address book search key.";"PtypBinary, 0x0102";"Address Properties";"[MS-OXOMSG] section 2.2.1.52";"PR_SENDER_SEARCH_KEY, ptagSenderSearchKey"
+"0x0C1E";"PidTagSenderAddressType";"Contains the email address type of the sending mailbox owner.";"PtypString, 0x001F";"Address Properties";"[MS-OXOMSG] section 2.2.1.48";"PR_SENDER_ADDRTYPE, PR_SENDER_ADDRTYPE_A, ptagSenderAddrType, PR_SENDER_ADDRTYPE_W"
+"0x0C1F";"PidTagSenderEmailAddress";"Contains the email address of the sending mailbox owner.";"PtypString, 0x001F";"Address Properties";"[MS-OXOMSG] section 2.2.1.49";"PR_SENDER_EMAIL_ADDRESS, PR_SENDER_EMAIL_ADDRESS_A, PR_SENDER_EMAIL_ADDRESS_W"
+"0x0C20";"PidTagNonDeliveryReportStatusCode";"Contains the value of the Status field for a delivery status notification, as specified in [RFC3464].";"PtypInteger32, 0x0003";"Email";"[MS-OXOMSG] section 2.2.2.32";"PR_NDR_STATUS_CODE, ptagNDRStatusCode"
+"0x0C21";"PidTagRemoteMessageTransferAgent";"Contains the value of the Remote-MTA field for a delivery status notification, as specified in [RFC3464].";"PtypString, 0x001F";"Email";"[MS-OXOMSG] section 2.2.2.34";"PR_DSN_REMOTE_MTA, ptagDsnRemoteMta"
+"0x0E01";"PidTagDeleteAfterSubmit";"Indicates that the original message is to be deleted after it is sent.";"PtypBoolean, 0x000B";"MapiNonTransmittable";"[MS-OXOMSG] section 2.2.3.8";"PR_DELETE_AFTER_SUBMIT, ptagDeleteAfterSubmit"
+"0x0E02";"PidTagDisplayBcc";"Contains a list of blind carbon copy (Bcc) recipient display names.";"PtypString, 0x001F";"Message Properties ";"[MS-OXOMSG] section 2.2.1.7";"PR_DISPLAY_BCC, PR_DISPLAY_BCC_A, ptagDisplayBcc, PR_DISPLAY_BCC_W, urn:schemas:httpmail:displaybcc"
+"0x0E03";"PidTagDisplayCc";"Contains a list of carbon copy (Cc) recipient display names.";"PtypString, 0x001F";"Message Properties ";"[MS-OXOMSG] section 2.2.1.8";"PR_DISPLAY_CC, PR_DISPLAY_CC_A, ptagDisplayCc, PR_DISPLAY_CC_W, urn:schemas:httpmail:displaycc"
+"0x0E04";"PidTagDisplayTo";"Contains a list of the primary recipient display names, separated by semicolons, when an email message has primary recipients .";"PtypString, 0x001F";"Message Properties";"[MS-OXOMSG] section 2.2.1.9";"PR_DISPLAY_TO, PR_DISPLAY_TO_A, ptagDisplayTo, PR_DISPLAY_TO_W"
+"0x0E06";"PidTagMessageDeliveryTime";"Specifies the time (in UTC) when the server received the message.";"PtypTime, 0x0040";"Message Time Properties ";"[MS-OXOMSG] section 2.2.3.9";"PR_MESSAGE_DELIVERY_TIME, urn:schemas:httpmail:datereceived"
+"0x0E07";"PidTagMessageFlags";"Specifies the status of the Message object.";"PtypInteger32, 0x0003";"General Message Properties";"[MS-OXCMSG] section 2.2.1.6";"PR_MESSAGE_FLAGS, ptagMessageFlags"
+"0x0E08";"PidTagMessageSize";"Contains the size, in bytes, consumed by the Message object on the server.";"PtypInteger32, 0x0003";"General Message Properties";"[MS-OXCFOLD] section 2.2.2.2.1.10";"PR_MESSAGE_SIZE, ptagMessageSize"
+"0x0E08";"PidTagMessageSizeExtended";"Specifies the 64-bit version of the PidTagMessageSize property (section 2.796).";"PtypInteger64, 0x0014";"General Message Properties";"[MS-OXCFOLD] section 2.2.2.2.1.11";"PR_MESSAGE_SIZE_EXTENDED, ptagMessageSizeExtended"
+"0x0E09";"PidTagParentEntryId";"Contains the EntryID of the folder where messages or subfolders reside.";"PtypBinary, 0x0102";"ID Properties";"[MS-OXCFOLD] section 2.2.2.2.1.7";"PR_PARENT_ENTRYID, ptagParentEntryId"
+"0x0E0F";"PidTagResponsibility";"Specifies whether another mail agent has ensured that the message will be delivered.";"PtypBoolean, 0x000B";"MapiNonTransmittable";"[MS-OXCMSG] section 2.2.1.37";"PR_RESPONSIBILITY, ptagResponsibility"
+"0x0E12";"PidTagMessageRecipients";"Identifies all of the recipients of the current message.";"PtypObject, 0x000D";"Address Properties";"[MS-OXCMSG] section 2.2.1.47";"PR_MESSAGE_RECIPIENTS, ptagMessageRecipients"
+"0x0E13";"PidTagMessageAttachments";"Identifies all attachments to the current message.";"PtypObject, 0x000D";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.1.52";"PR_MESSAGE_ATTACHMENTS, ptagMessageAttachments"
+"0x0E17";"PidTagMessageStatus";"Specifies the status of a message in a contents table.";"PtypInteger32, 0x0003";"General Message Properties";"[MS-OXCMSG] section 2.2.1.8";"PR_MSG_STATUS, ptagMsgStatus"
+"0x0E1B";"PidTagHasAttachments";"Indicates whether the Message object contains at least one attachment.";"PtypBoolean, 0x000B";"Message Attachment Properties Property set";"[MS-OXCMSG] section 2.2.1.2";"PR_HASATTACH, ptagHasAttach, urn:schemas:httpmail:hasattachment"
+"0x0E1D";"PidTagNormalizedSubject";"Contains the normalized subject of the message.";"PtypString, 0x001F";"Email ";"[MS-OXCMSG] section 2.2.1.10";"PR_NORMALIZED_SUBJECT, PR_NORMALIZED_SUBJECT_A, ptagNormalizedSubject, PR_NORMALIZED_SUBJECT_W, urn:schemas:httpmail:normalizedsubject"
+"0x0E1F";"PidTagRtfInSync";"Indicates whether the PidTagBody property (section 2.618) and the PidTagRtfCompressed property (section 2.941) contain the same text (ignoring formatting).";"PtypBoolean, 0x000B";"Email";"[MS-OXCMSG] section 2.2.1.56.5";"PR_RTF_IN_SYNC, ptagRTFInSync"
+"0x0E20";"PidTagAttachSize";"Contains the size, in bytes, consumed by the Attachment object on the server.";"PtypInteger32, 0x0003";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.5";"PR_ATTACH_SIZE, ptagAttachSize"
+"0x0E21";"PidTagAttachNumber";"Identifies the Attachment object within its Message object.";"PtypInteger32, 0x0003";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.6";"PR_ATTACH_NUM, ptagAttachNum"
+"0x0E28";"PidTagPrimarySendAccount";"Specifies the first server that a client is to use to send the email with.";"PtypString, 0x001F";"MapiNonTransmittable";"[MS-OXOMSG] section 2.2.1.64";"PR_PRIMARY_SEND_ACCT"
+"0x0E29";"PidTagNextSendAcct";"Specifies the server that a client is currently attempting to use to send email.";"PtypString, 0x001F";"Outlook Application";"[MS-OXOMSG] section 2.2.1.65";"PR_NEXT_SEND_ACCT"
+"0x0E2B";"PidTagToDoItemFlags";"Contains flags associated with objects.";"PtypInteger32, 0x0003";"MapiNonTransmittable";"[MS-OXOFLAG] section 2.2.1.6";"PR_TODO_ITEM_FLAGS, ptagToDoItemFlags"
+"0x0E2C";"PidTagSwappedToDoStore";"Contains the value of the PidTagStoreEntryId property (section 2.1028) of the message when the value of the PidTagSwappedToDoData property (section 2.1037) is set.";"PtypBinary, 0x0102";"MapiNonTransmittable";"[MS-OXOFLAG] section 2.2.1.8";"PR_SWAPPED_TODO_STORE, ptagSwappedTodoStore"
+"0x0E2D";"PidTagSwappedToDoData";"Contains a secondary storage location for flags when sender flags or sender reminders are supported.";"PtypBinary, 0x0102";"MapiNonTransmittable";"[MS-OXOFLAG] section 2.2.1.7";"PR_SWAPPED_TODO_DATA, ptagSwappedTodoData"
+"0x0E69";"PidTagRead";"Indicates whether a message has been read.";"PtypBoolean, 0x000B";"MapiNonTransmittable Property set";"[MS-OXCMSG] section 2.2.1.53";"PR_READ, ptagRead, urn:schemas:httpmail:read"
+"0x0E6A";"PidTagSecurityDescriptorAsXml";"Contains security attributes in XML.";"PtypString, 0x001F";"Access Control Properties ";"[MS-XWDVSEC] section 2.2.2";"PR_NT_SECURITY_DESCRIPTOR_AS_XML, PR_NT_SECURITY_DESCRIPTOR_AS_XML_A, PR_NT_SECURITY_DESCRIPTOR_AS_XML_W, http://schemas.microsoft.com/exchange/security/descriptor"
+"0x0E79";"PidTagTrustSender";"Specifies whether the associated message was delivered through a trusted transport channel.";"PtypInteger32, 0x0003";"MapiNonTransmittable";"[MS-OXCMSG] section 2.2.1.45";"PR_TRUST_SENDER, ptagTrustSender"
+"0x0E84";"PidTagExchangeNTSecurityDescriptor";"Contains the calculated security descriptor for the item.";"PtypBinary, 0x0102";"Calendar Document ";"[MS-XWDCAL] section 2.2.8.8";"http://schemas.microsoft.com/exchange/ntsecuritydescriptor, http://schemas.microsoft.com/exchange/ntsecuritydescriptor"
+"0x0E99";"PidTagExtendedRuleMessageActions";"Contains action information about named properties used in the rule.";"PtypBinary, 0x0102";"Rules";"[MS-OXORULE] section 2.2.4.1.9";"PR_EXTENDED_RULE_MSG_ACTIONS"
+"0x0E9A";"PidTagExtendedRuleMessageCondition";"Contains condition information about named properties used in the rule.";"PtypBinary, 0x0102";"Rules";"[MS-OXORULE] section 2.2.4.1.10";"PR_EXTENDED_RULE_MSG_CONDITION"
+"0x0E9B";"PidTagExtendedRuleSizeLimit";"Contains the maximum size, in bytes, that the user is allowed to accumulate for a single extended rule.";"PtypInteger32, 0x0003";"Rules";"[MS-OXCSTOR] section 2.2.2.1.1.1";"PR_EXTENDED_RULE_SIZE_LIMIT"
+"0x0FF4";"PidTagAccess";"Indicates the operations available to the client for the object.";"PtypInteger32, 0x0003";"Access Control Properties";"[MS-OXCPRPT] section 2.2.1.1";"PR_ACCESS, ptagAccess"
+"0x0FF5";"PidTagRowType";"Identifies the type of the row.";"PtypInteger32, 0x0003";"MapiNonTransmittable";"[MS-OXCTABL] section 2.2.1.3";"PR_ROW_TYPE, ptagRowType"
+"0x0FF6";"PidTagInstanceKey";"Contains an object on an NSPI server.";"PtypBinary, 0x0102";"Table Properties";"[MS-OXOABK] section 2.2.3.6";"PR_INSTANCE_KEY, ptagInstanceKey"
+"0x0FF7";"PidTagAccessLevel";"Indicates the client's access level to the object.";"PtypInteger32, 0x0003";"Access Control Properties";"[MS-OXCPRPT] section 2.2.1.2";"PR_ACCESS_LEVEL, ptagAccessLevel"
+"0x0FF8";"PidTagMappingSignature";"A 16-byte constant that is present on all Address Book objects, but is not present on objects in an offline address book.";"PtypBinary, 0x0102";"Miscellaneous Properties";"[MS-OXOABK] section 2.2.3.32";"PR_MAPPING_SIGNATURE, ptagMappingSignature"
+"0x0FF9";"PidTagRecordKey";"Contains a unique binary-comparable identifier for a specific object.";"PtypBinary, 0x0102";"ID Properties";"[MS-OXCPRPT] section 2.2.1.8";"PR_RECORD_KEY, ptagRecordKey"
+"0x0FFB";"PidTagStoreEntryId";"Contains the unique EntryID of the message store where an object resides.";"PtypBinary, 0x0102";"ID Properties";"[MS-OXCMSG] section 2.2.1.44";"PR_STORE_ENTRYID, ptagStoreEntryId"
+"0x0FFE";"PidTagObjectType";"Indicates the type of Server object.";"PtypInteger32, 0x0003";"Common ";"[MS-OXCPRPT] section 2.2.1.7";"PR_OBJECT_TYPE, ptagObjectType"
+"0x0FFF";"PidTagEntryId";"Contains the information to identify many different types of messaging objects.";"PtypBinary, 0x0102";"ID Properties";"[MS-OXCPERM] section 2.2.4";"PR_ENTRYID, ptagEntryId"
+"0x1000";"PidTagBody";"Contains message body text in plain text format.";"PtypString, 0x001F";"General Message Properties ";"[MS-OXCMSG] section 2.2.1.56.1";"PR_BODY, PR_BODY_A, ptagBody, PR_BODY_W, urn:schemas:httpmail:textdescription"
+"0x1001";"PidTagReportText";"Contains the optional text for a report message.";"PtypString, 0x001F";"MapiMessage";"[MS-OXOMSG] section 2.2.2.23";"PR_REPORT_TEXT, PR_REPORT_TEXT_A, ptagReportText, PR_REPORT_TEXT_W"
+"0x1009";"PidTagRtfCompressed";"Contains message body text in compressed RTF format.";"PtypBinary, 0x0102";"Email";"[MS-OXCMSG] section 2.2.1.56.4";"PR_RTF_COMPRESSED, ptagRTFCompressed"
+"0x1013";"PidTagBodyHtml";"Contains the HTML body of the Message object.";"PtypString, 0x001F";"General Message Properties";"[MS-OXCMSG] section 2.2.1.56.3";"PR_BODY_HTML, PR_BODY_HTML_A, ptagBodyHtml, PR_BODY_HTML_W"
+"0x1013";"PidTagHtml";"Contains message body text in HTML format.";"PtypBinary, 0x0102";"General Message Properties";"[MS-OXCMSG] section 2.2.1.56.9";"PR_HTML, ptagHtml"
+"0x1014";"PidTagBodyContentLocation";"Contains a globally unique Uniform Resource Identifier (URI) that serves as a label for the current message body.";"PtypString, 0x001F";"MIME Properties";"[MS-OXCMSG] section 2.2.1.56.8";"PR_BODY_CONTENT_LOCATION, PR_BODY_CONTENT_LOCATION_A, PR_BODY_CONTENT_LOCATION_W"
+"0x1015";"PidTagBodyContentId";"Contains a GUID that corresponds to the current message body.";"PtypString, 0x001F";"Exchange";"[MS-OXCMSG] section 2.2.1.56.7";"PR_BODY_CONTENT_ID, PR_BODY_CONTENT_ID_A, PR_BODY_CONTENT_ID_W"
+"0x1016";"PidTagNativeBody";"Indicates the best available format for storing the message body.";"PtypInteger32, 0x0003";"BestBody";"[MS-OXCMSG] section 2.2.1.56.2";"PR_NATIVE_BODY_INFO, ptagNativeBodyInfo"
+"0x1035";"PidTagInternetMessageId";"Corresponds to the message-id field.";"PtypString, 0x001F";"MIME Properties";"[MS-OXOMSG] section 2.2.1.12";"PR_INTERNET_MESSAGE_ID, PR_INTERNET_MESSAGE_ID_A, PR_INTERNET_MESSAGE_ID_W"
+"0x1039";"PidTagInternetReferences";"Contains a list of message IDs that specify the messages to which this reply is related.";"PtypString, 0x001F";"MIME Properties";"[MS-OXCMSG] section 2.2.1.26";"PR_INTERNET_REFERENCES, PR_INTERNET_REFERENCES_A, PR_INTERNET_REFERENCES_W"
+"0x1042";"PidTagInReplyToId";"Contains the value of the original message's PidTagInternetMessageId property (section 2.748) value.";"PtypString, 0x001F";"General Message Properties";"[MS-OXOMSG] section 2.2.1.13";"PR_IN_REPLY_TO_ID, PR_IN_REPLY_TO_ID_A, PR_IN_REPLY_TO_ID_W"
+"0x1043";"PidTagListHelp";"Contains a URI that provides detailed help information for the mailing list from which an email message was sent.";"PtypString, 0x001F";"Miscellaneous Properties";"[MS-OXOMSG] section 2.2.1.81";"PR_LIST_HELP, PR_LIST_HELP_A, PR_LIST_HELP_W"
+"0x1044";"PidTagListSubscribe";"Contains the URI that subscribes a recipient to a message??s associated mailing list.";"PtypString, 0x001F";"Miscellaneous Properties";"[MS-OXOMSG] section 2.2.1.82";"PR_LIST_SUBSCRIBE, PR_LIST_SUBSCRIBE_A, PR_LIST_SUBSCRIBE_W"
+"0x1045";"PidTagListUnsubscribe";"Contains the URI that unsubscribes a recipient from a message??s associated mailing list.";"PtypString, 0x001F";"Miscellaneous Properties";"[MS-OXOMSG] section 2.2.1.83";"PR_LIST_UNSUBSCRIBE, PR_LIST_UNSUBSCRIBE_A, PR_LIST_UNSUBSCRIBE_W"
+"0x1046";"PidTagOriginalMessageId";"Contains the message ID of the original message included in replies or resent messages.";"PtypString, 0x001F";"Mail";"[MS-OXOMSG] section 2.2.1.85";"ptagOriginalInternetMessageID, OriginalMessageId"
+"0x1080";"PidTagIconIndex";"Specifies which icon is to be used by a user interface when displaying a group of Message objects.";"PtypInteger32, 0x0003";"General Message Properties";"[MS-OXOMSG] section 2.2.1.10";"PR_ICON_INDEX, ptagIconIndex"
+"0x1081";"PidTagLastVerbExecuted";"Specifies the last verb executed for the message item to which it is related.";"PtypInteger32, 0x0003";"History Properties";"[MS-OXOMSG] section 2.2.1.14";"PR_LAST_VERB_EXECUTED, ptagLastVerbExecuted"
+"0x1082";"PidTagLastVerbExecutionTime";"Contains the date and time, in UTC, during which the operation represented in the PidTagLastVerbExecuted property (section 2.767) took place.";"PtypTime, 0x0040";"History Properties";"[MS-OXOMSG] section 2.2.1.15";"PR_LAST_VERB_EXECUTION_TIME, ptagLastVerbExecutionTime"
+"0x1090";"PidTagFlagStatus";"Specifies the flag state of the Message object.";"PtypInteger32, 0x0003";"Miscellaneous Properties";"[MS-OXOFLAG] section 2.2.1.1";"PR_FLAG_STATUS, ptagFlagStatus"
+"0x1091";"PidTagFlagCompleteTime";"Specifies the date and time, in UTC, that the Message object was flagged as complete.";"PtypTime, 0x0040";"Miscellaneous Properties ";"[MS-OXOFLAG] section 2.2.1.3";"PR_FLAG_COMPLETE_TIME, ptagFlagCompleteTime, urn:schemas:httpmail:flagcompleted"
+"0x1095";"PidTagFollowupIcon";"Specifies the flag color of the Message object.";"PtypInteger32, 0x0003";"RenMessageFolder";"[MS-OXOFLAG] section 2.2.1.2";"PR_FOLLOWUP_ICON, ptagFollowupIcon"
+"0x1096";"PidTagBlockStatus";"Indicates the user's preference for viewing external content (such as links to images on an HTTP server) in the message body.";"PtypInteger32, 0x0003";"Secure Messaging Properties";"[MS-OXOMSG] section 2.2.1.1";"PR_BLOCK_STATUS, ptagBlockStatus"
+"0x10C3";"PidTagICalendarStartTime";"Contains the date and time, in UTC, when the appointment or meeting starts.";"PtypTime, 0x0040";"Calendar Property set";"[MS-XWDCAL] section 2.2.2.41";"urn:schemas:calendar:dtstart"
+"0x10C4";"PidTagICalendarEndTime";"Contains the date and time, in UTC, when an appointment or meeting ends.";"PtypTime, 0x0040";"Calendar ";"[MS-XWDCAL] section 2.2.2.39";"urn:schemas:calendar:dtend"
+"0x10C5";"PidTagCdoRecurrenceid";"Identifies a specific instance of a recurring appointment.";"PtypTime, 0x0040";"Exchange ";"[MS-XWDCAL] section 2.2.2.38";"PR_CDO_RECURRENCEID, urn:schemas:calendar:recurrenceid"
+"0x10CA";"PidTagICalendarReminderNextTime";"Contains the date and time, in UTC, for the activation of the next reminder.";"PtypTime, 0x0040";"Calendar ";"[MS-XWDCAL] section 2.2.2.40";"urn:schemas:calendar:remindernexttime"
+"0x10F4";"PidTagAttributeHidden";"Specifies the hide or show status of a folder.";"PtypBoolean, 0x000B";"Access Control Properties ";"[MS-OXCFOLD] section 2.2.2.2.2.1";"PR_ATTR_HIDDEN, ptagAttrHidden, DAV:ishidden"
+"0x10F6";"PidTagAttributeReadOnly";"Indicates whether an item can be modified or deleted.";"PtypBoolean, 0x000B";"Access Control Properties ";"[MS-XWDCAL] section 2.2.1.8";"PR_ATTR_READONLY, ptagAttrReadonly, DAV:isreadonly"
+"0x3000";"PidTagRowid";"Contains a unique identifier for a recipient in a message's recipient table.";"PtypInteger32, 0x0003";"MapiCommon";"[MS-OXCMSG] section 2.2.1.38";"PR_ROWID, ptagRowId"
+"0x3001";"PidTagDisplayName";"Contains the display name of the folder.";"PtypString, 0x001F";"MapiCommon";"[MS-OXCFOLD] section 2.2.2.2.2.5";"PR_DISPLAY_NAME, PR_DISPLAY_NAME_A, ptagDisplayName, PR_DISPLAY_NAME_W, urn:schemas:contacts:cn"
+"0x3002";"PidTagAddressType";"Contains the email address type of a Message object.";"PtypString, 0x001F";"Address Properties";"[MS-OXOABK] section 2.2.3.13";"PR_ADDRTYPE, PR_ADDRTYPE_A, ptagAddrType, PR_ADDRTYPE_W"
+"0x3003";"PidTagEmailAddress";"Contains the email address of a Message object.";"PtypString, 0x001F";"MapiCommon";"[MS-OXOABK] section 2.2.3.14";"PR_EMAIL_ADDRESS, PR_EMAIL_ADDRESS_A, PR_EMAIL_ADDRESS_W"
+"0x3004";"PidTagComment";"Contains a comment about the purpose or content of the Address Book object.";"PtypString, 0x001F";"Common ";"[MS-OXCFOLD] section 2.2.2.2.2.2";"PR_COMMENT, PR_COMMENT_A, ptagComment, PR_COMMENT_W, DAV:comment, http://schemas.microsoft.com/exchange/summary-utf8"
+"0x3005";"PidTagDepth";"Specifies the number of nested categories in which a given row is contained.";"PtypInteger32, 0x0003";"MapiCommon";"[MS-OXCTABL] section 2.2.1.4";"PR_DEPTH, ptagDepth"
+"0x3007";"PidTagCreationTime";"Contains the time, in UTC, that the object was created.";"PtypTime, 0x0040";"Message Time Properties";"[MS-OXCMSG] section 2.2.2.3";"PR_CREATION_TIME, ptagCreationTime, DAV:creationdate"
+"0x3008";"PidTagLastModificationTime";"Contains the time, in UTC, of the last modification to the object.";"PtypTime, 0x0040";"Message Time Properties ";"[MS-OXCMSG] section 2.2.2.2";"PR_LAST_MODIFICATION_TIME, ptagLastModificationTime, urn:schemas:calendar:lastmodifiedtime, DAV:getlastmodified"
+"0x300B";"PidTagSearchKey";"Contains a unique binary-comparable key that identifies an object for a search.";"PtypBinary, 0x0102";"ID Properties";"[MS-OXCPRPT] section 2.2.1.9";"PR_SEARCH_KEY, ptagSearchKey"
+"0x3010";"PidTagTargetEntryId";"Contains the message ID of a Message object being submitted for optimization ([MS-OXOMSG] section 3.2.4.4).";"PtypBinary, 0x0102";"ID Properties";"[MS-OXOMSG] section 2.2.1.76";"PR_TARGET_ENTRYID, ptagTargetEntryId"
+"0x3013";"PidTagConversationId";"Contains a computed value derived from other conversation-related properties. ";"PtypBinary, 0x0102";"Conversations";"[MS-OXOMSG] section 2.2.1.2";"PR_CONVERSATION_ID"
+"0x3016";"PidTagConversationIndexTracking";"Indicates whether the GUID portion of the PidTagConversationIndex property (section 2.650) is to be used to compute the PidTagConversationId property (section 2.649).";"PtypBoolean, 0x000B";"Conversations";"[MS-OXOMSG] section 2.2.1.4";"PR_CONVERSATION_INDEX_TRACKING"
+"0x3018";"PidTagArchiveTag";"Specifies the GUID of an archive tag.";"PtypBinary, 0x0102";"Archive";"[MS-OXCMSG] section 2.2.1.58.1 ";"PR_ARCHIVE_TAG, ptagArchiveTag"
+"0x3019";"PidTagPolicyTag";"Specifies the GUID of a retention tag.";"PtypBinary, 0x0102";"Archive";"[MS-OXCMSG] section 2.2.1.58.2";"PR_POLICY_TAG, ptagPolicyTag"
+"0x301A";"PidTagRetentionPeriod";"Specifies the number of days that a Message object can remain unarchived.";"PtypInteger32, 0x0003";"Archive";"[MS-OXCMSG] section 2.2.1.58.3";"PR_RETENTION_PERIOD, ptagRetentionPeriod"
+"0x301B";"PidTagStartDateEtc";"Contains the default retention period, and the start date from which the age of a Message object is calculated.";"PtypBinary, 0x0102";"Archive";"[MS-OXCMSG] section 2.2.1.58.4";"PR_START_DATE_ETC, ptagStartDateEtc"
+"0x301C";"PidTagRetentionDate";"Specifies the date, in UTC, after which a Message object is expired by the server.";"PtypTime, 0x0040";"Archive";"[MS-OXCMSG] section 2.2.1.58.5 ";"PR_RETENTION_DATE, ptagRetentionDate"
+"0x301D";"PidTagRetentionFlags";"Contains flags that specify the status or nature of an item's retention tag or archive tag.";"PtypInteger32, 0x0003";"Archive";"[MS-OXCMSG] section 2.2.1.58.6 ";"PR_RETENTION_FLAGS, ptagRetentionFlags"
+"0x301E";"PidTagArchivePeriod";"Specifies the number of days that a Message object can remain unarchived.";"PtypInteger32, 0x0003";"Archive";"[MS-OXCMSG] section 2.2.1.58.7 ";"PR_ARCHIVE_PERIOD, ptagArchivePeriod"
+"0x301F";"PidTagArchiveDate";"Specifies the date, in UTC, after which a Message object is archived by the server.";"PtypTime, 0x0040";"Archive";"[MS-OXCMSG] section 2.2.1.58.8";"PR_ARCHIVE_DATE, ptagArchiveDate"
+"0x340D";"PidTagStoreSupportMask";"Indicates whether string properties within the .msg file are Unicode-encoded.";"PtypInteger32, 0x0003";"Miscellaneous Properties";"[MS-OXMSG] section 2.1.1.1";"PR_STORE_SUPPORT_MASK, ptagStoreSupportMask"
+"0x340E";"PidTagStoreState";"Indicates whether a mailbox has any active Search folders.";"PtypInteger32, 0x0003";"MapiMessageStore";"[MS-OXCSTOR] section 2.2.2.1";"PR_STORE_STATE"
+"0x3600";"PidTagContainerFlags";"Contains a bitmask of flags that describe capabilities of an address book container.";"PtypInteger32, 0x0003";"Address Book";"[MS-OXOABK] section 2.2.2.1";"PR_CONTAINER_FLAGS"
+"0x3601";"PidTagFolderType";"Specifies the type of a folder that includes the Root folder, Generic folder, and Search folder.";"PtypInteger32, 0x0003";"MapiContainer";"[MS-OXCFOLD] section 2.2.2.2.2.7";"PR_FOLDER_TYPE, ptagFolderType"
+"0x3602";"PidTagContentCount";"Specifies the number of rows under the header row.";"PtypInteger32, 0x0003";"Folder Properties";"[MS-OXCFOLD] section 2.2.2.2.1.1";"PR_CONTENT_COUNT, ptagContentCount, DAV:visiblecount"
+"0x3603";"PidTagContentUnreadCount";"Specifies the number of rows under the header row that have the PidTagRead property (section 2.878) set to FALSE.";"PtypInteger32, 0x0003";"Folder Properties";"[MS-OXCFOLD] section 2.2.2.2.1.2";"PR_CONTENT_UNREAD, ptagContentUnread, urn:schemas:httpmail:unreadcount"
+"0x3609";"PidTagSelectable";"This property is not set and, if set, is ignored.";"PtypBoolean, 0x000B";"AB Container";"[MS-OXOABKT] section 2.2.1";"PR_SELECTABLE"
+"0x360A";"PidTagSubfolders";"Specifies whether a folder has subfolders.";"PtypBoolean, 0x000B";"MapiContainer";"[MS-OXCFOLD] section 2.2.2.2.1.12";"PR_SUBFOLDERS, ptagSubFolders, DAV:hassubs"
+"0x360C";"PidTagAnr";"Contains a filter value used in ambiguous name resolution.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.10.1";"PR_ANR, PR_ANR_A, PR_ANR_W"
+"0x360E";"PidTagContainerHierarchy";"Identifies all of the subfolders of the current folder.";"PtypObject, 0x000D";"Container Properties";"[MS-OXCFOLD] section 2.2.2.2.2.4";"PR_CONTAINER_HIERARCHY, ptagContainerHierarchy"
+"0x360F";"PidTagContainerContents";"Empty. An NSPI server defines this value for distribution lists and it is not present for other objects.";"PtypEmbeddedTable, 0x000D";"Container Properties";"[MS-OXOABK] section 2.2.6.3";"PR_CONTAINER_CONTENTS, ptagContainerContents"
+"0x3610";"PidTagFolderAssociatedContents";"Identifies all FAI messages in the current folder.";"PtypObject, 0x000D";"MapiContainer";"[MS-OXCFOLD] section 2.2.2.2.2.6";"PR_FOLDER_ASSOCIATED_CONTENTS"
+"0x3613";"PidTagContainerClass";"Contains a string value that describes the type of Message object that a folder contains.";"PtypString, 0x001F";"Container Properties ";"[MS-OXCFOLD] section 2.2.2.2.2.3";"PR_CONTAINER_CLASS, PR_CONTAINER_CLASS_A, ptagContainerClass, PR_CONTAINER_CLASS_W, http://schemas.microsoft.com/exchange/outlookfolderclasshttp://schemas.microsoft.com/exchange/outlookfolderclass"
+"0x36D0";"PidTagIpmAppointmentEntryId";"Contains the EntryID of the Calendar folder.";"PtypBinary, 0x0102";"Folder Properties";"[MS-OXOSFLD] section 2.2.3";"PR_IPM_APPOINTMENT_ENTRYID"
+"0x36D1";"PidTagIpmContactEntryId";"Contains the EntryID of the Contacts folder.";"PtypBinary, 0x0102";"Folder Properties";"[MS-OXOSFLD] section 2.2.3";"PR_IPM_CONTACT_ENTRYID"
+"0x36D2";"PidTagIpmJournalEntryId";"Contains the EntryID of the Journal folder.";"PtypBinary, 0x0102";"Folder Properties";"[MS-OXOSFLD] section 2.2.3";"PR_IPM_JOURNAL_ENTRYID"
+"0x36D3";"PidTagIpmNoteEntryId";"Contains the EntryID of the Notes folder.";"PtypBinary, 0x0102";"Folder Properties";"[MS-OXOSFLD] section 2.2.3";"PR_IPM_NOTE_ENTRYID"
+"0x36D4";"PidTagIpmTaskEntryId";"Contains the EntryID of the Tasks folder.";"PtypBinary, 0x0102";"Folder Properties";"[MS-OXOSFLD] section 2.2.3";"PR_IPM_TASK_ENTRYID"
+"0x36D5";"PidTagRemindersOnlineEntryId";"Contains an EntryID for the Reminders folder.";"PtypBinary, 0x0102";"MapiContainer";"[MS-OXOSFLD] section 2.2.3";"PR_REM_ONLINE_ENTRYID, ptagRemOnlineEntryId"
+"0x36D7";"PidTagIpmDraftsEntryId";"Contains the EntryID of the Drafts folder.";"PtypBinary, 0x0102";"Folder Properties";"[MS-OXOSFLD] section 2.2.3";"PR_IPM_DRAFTS_ENTRYID"
+"0x36D8";"PidTagAdditionalRenEntryIds";"Contains the indexed entry IDs for several special folders related to conflicts, sync issues, local failures, server failures, junk email and spam.";"PtypMultipleBinary, 0x1102";"Outlook Application";"[MS-OXOSFLD] section 2.2.4";"PR_ADDITIONAL_REN_ENTRYIDS, ptagAdditionalRenEntryIds"
+"0x36D9";"PidTagAdditionalRenEntryIdsEx";"Contains an array of blocks that specify the EntryIDs of several special folders.";"PtypBinary, 0x0102";"Outlook Application";"[MS-OXOSFLD] section 2.2.5";"PR_ADDITIONAL_REN_ENTRYIDS_EX, ptagAdditionalRenEntryIdsEx"
+"0x36DA";"PidTagExtendedFolderFlags";"Contains encoded sub-properties for a folder.";"PtypBinary, 0x0102";"MapiContainer";"[MS-OXOSRCH] section 2.2.2.1.2";"PR_EXTENDED_FOLDER_FLAGS, ptagExtendedFolderFlags"
+"0x36E2";"PidTagOrdinalMost";"Contains a positive number whose negative is less than or equal to the value of the PidLidTaskOrdinal property (section 2.327) of all of the Task objects in the folder.";"PtypInteger32, 0x0003";"Tasks";"[MS-OXOTASK] section 2.2.1.1";"PR_ORDINAL_MOST"
+"0x36E4";"PidTagFreeBusyEntryIds";"Contains EntryIDs of the Delegate Information object, the free/busy message of the logged on user, and the folder with the PidTagDisplayName property (section 2.676) value of ""Freebusy Data"".";"PtypMultipleBinary, 0x1102";"MapiContainer";"[MS-OXOSFLD] section 2.2.6";"PR_FREEBUSY_ENTRYIDS, ptagFreeBusyEntryIds"
+"0x36E5";"PidTagDefaultPostMessageClass";"Contains the message class of the object.";"PtypString, 0x001F";"MapiContainer";"[MS-OXOCAL] section 2.2.11.2";"PR_DEF_POST_MSGCLASS"
+"0x3701";"PidTagAttachDataBinary";"Contains the contents of the file to be attached.";"PtypBinary, 0x0102";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.7";"PR_ATTACH_DATA_BIN, ptagAttachDataBin"
+"0x3701";"PidTagAttachDataObject";"Contains the binary representation of the Attachment object in an application-specific format.";"PtypObject, 0x000D";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.8";"PR_ATTACH_DATA_OBJ, ptagAttachDataObj"
+"0x3702";"PidTagAttachEncoding";"Contains encoding information about the Attachment object.";"PtypBinary, 0x0102";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.20";"PR_ATTACH_ENCODING"
+"0x3703";"PidTagAttachExtension";"Contains a file name extension that indicates the document type of an attachment.";"PtypString, 0x001F";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.12";"PR_ATTACH_EXTENSION, PR_ATTACH_EXTENSION_A, PR_ATTACH_EXTENSION_W"
+"0x3704";"PidTagAttachFilename";"Contains the 8.3 name of the PidTagAttachLongFilename property (section 2.595).";"PtypString, 0x001F";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.11";"PR_ATTACH_FILENAME, PR_ATTACH_FILENAME_A, ptagAttachFilename, PR_ATTACH_FILENAME_W"
+"0x3705";"PidTagAttachMethod";"Represents the way the contents of an attachment are accessed.";"PtypInteger32, 0x0003";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.9";"PR_ATTACH_METHOD, ptagAttachMethod"
+"0x3707";"PidTagAttachLongFilename";"Contains the full filename and extension of the Attachment object.";"PtypString, 0x001F";"Message Attachment Properties ";"[MS-OXCMSG] section 2.2.2.10";"PR_ATTACH_LONG_FILENAME, PR_ATTACH_LONG_FILENAME_A, PR_ATTACH_LONG_FILENAME_W, urn:schemas:httpmail:attachmentfilename"
+"0x3708";"PidTagAttachPathname";"Contains the 8.3 name of the PidTagAttachLongPathname property (section 2.596).";"PtypString, 0x001F";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.14";"PR_ATTACH_PATHNAME, PR_ATTACH_PATHNAME_A, ptagAttachPathname, PR_ATTACH_PATHNAME_W"
+"0x3709";"PidTagAttachRendering";"Contains a Windows Metafile, as specified in [MS-WMF], for the Attachment object.";"PtypBinary, 0x0102";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.17";"PR_ATTACH_RENDERING, ptagAttachRendering"
+"0x370A";"PidTagAttachTag";"Contains the identifier information for the application that supplied the Attachment object data.";"PtypBinary, 0x0102";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.15";"PR_ATTACH_TAG"
+"0x370B";"PidTagRenderingPosition";"Represents an offset, in rendered characters, to use when rendering an attachment within the main message text.";"PtypInteger32, 0x0003";"MapiAttachment";"[MS-OXCMSG] section 2.2.2.16";"PR_RENDERING_POSITION, ptagRenderingPosition"
+"0x370C";"PidTagAttachTransportName";"Contains the name of an attachment file, modified so that it can be correlated with TNEF messages.";"PtypString, 0x001F";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.19";"PR_ATTACH_TRANSPORT_NAME, PR_ATTACH_TRANSPORT_NAME_A, PR_ATTACH_TRANSPORT_NAME_W"
+"0x370D";"PidTagAttachLongPathname";"Contains the fully-qualified path and file name with extension.";"PtypString, 0x001F";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.13";"PR_ATTACH_LONG_PATHNAME, PR_ATTACH_LONG_PATHNAME_A, ptagAttachLongPathname, PR_ATTACH_LONG_PATHNAME_W"
+"0x370E";"PidTagAttachMimeTag";"Contains a content-type MIME header.";"PtypString, 0x001F";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.29";"PR_ATTACH_MIME_TAG, PR_ATTACH_MIME_TAG_A, PR_ATTACH_MIME_TAG_W"
+"0x370F";"PidTagAttachAdditionalInformation";"Contains attachment encoding information.";"PtypBinary, 0x0102";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.21";"PR_ATTACH_ADDITIONAL_INFO"
+"0x3711";"PidTagAttachContentBase";"Contains the base of a relative URI.";"PtypString, 0x001F";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.29";
+"0x3712";"PidTagAttachContentId";"Contains a content identifier unique to the Message object that matches a corresponding ""cid:"" URI schema reference in the HTML body of the Message object.";"PtypString, 0x001F";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.29";"PR_ATTACH_CONTENT_ID, PR_ATTACH_CONTENT_ID_A, PR_ATTACH_CONTENT_ID_W"
+"0x3713";"PidTagAttachContentLocation";"Contains a relative or full URI that matches a corresponding reference in the HTML body of a Message object.";"PtypString, 0x001F";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.29";"PR_ATTACH_CONTENT_LOCATION, PR_ATTACH_CONTENT_LOCATION_A, PR_ATTACH_CONTENT_LOCATION_W"
+"0x3714";"PidTagAttachFlags";"Indicates which body formats might reference this attachment when rendering data.";"PtypInteger32, 0x0003";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.18";"PR_ATTACH_FLAGS"
+"0x3719";"PidTagAttachPayloadProviderGuidString";"Contains the GUID of the software component that can display the contents of the message.";"PtypString, 0x001F";"Outlook Application";"[MS-OXCMSG] section 2.2.2.29";"PR_ATTACH_PAYLOAD_PROV_GUID_STR, PR_ATTACH_PAYLOAD_PROV_GUID_STR_A, PR_ATTACH_PAYLOAD_PROV_GUID_STR_W"
+"0x371A";"PidTagAttachPayloadClass";"Contains the class name of an object that can display the contents of the message.";"PtypString, 0x001F";"Outlook Application";"[MS-OXCMSG] section 2.2.2.29";"PR_ATTACH_PAYLOAD_CLASS, PR_ATTACH_PAYLOAD_CLASS_A, PR_ATTACH_PAYLOAD_CLASS_W, ptagAttachPayloadClass"
+"0x371B";"PidTagTextAttachmentCharset";"Specifies the character set of an attachment received via MIME with the content-type of text. ";"PtypString, 0x001F";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.25";"ptagTextAttachmentCharset"
+"0x3900";"PidTagDisplayType";"Contains an integer value that indicates how to display an Address Book object in a table or as an addressee on a message.";"PtypInteger32, 0x0003";"MapiAddressBook";"[MS-OXOABK] section 2.2.3.11";"PR_DISPLAY_TYPE, ptagDisplayType"
+"0x3902";"PidTagTemplateid";"Contains the value of the PidTagEntryId property (section 2.683), expressed as a Permanent Entry ID format.";"PtypBinary, 0x0102";"MapiAddressBook";"[MS-OXOABK] section 2.2.3.3";"PR_TEMPLATEID"
+"0x3905";"PidTagDisplayTypeEx";"Contains an integer value that indicates how to display an Address Book object in a table or as a recipient on a message.";"PtypInteger32, 0x0003";"MapiAddressBook";"[MS-OXOABK] section 2.2.3.12";"PR_DISPLAY_TYPE_EX"
+"0x39FE";"PidTagSmtpAddress";"Contains the SMTP address of the Message object.";"PtypString, 0x001F";"Address Properties";"[MS-OXOABK] section 2.2.3.21";"PR_SMTP_ADDRESS, PR_SMTP_ADDRESS_A, PR_SMTP_ADDRESS_W"
+"0x39FF";"PidTagAddressBookDisplayNamePrintable";"Contains the printable string version of the display name.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.7";"PR_EMS_AB_DISPLAY_NAME_PRINTABLE, PR_EMS_AB_DISPLAY_NAME_PRINTABLE_A, PR_EMS_AB_DISPLAY_NAME_PRINTABLE_W, PR_7BIT_DISPLAY_NAME, PR_7BIT_DISPLAY_NAME_A, PR_7BIT_DISPLAY_NAME_W, ptagSimpleDisplayName"
+"0x3A00";"PidTagAccount";"Contains the alias of an Address Book object, which is an alternative name by which the object can be identified.";"PtypString, 0x001F";"Address Book";"[MS-OXOCNTC] section 2.2.1.10.11";"PR_ACCOUNT, PR_ACCOUNT_A, PR_ACCOUNT_W, urn:schemas:contacts:account"
+"0x3A02";"PidTagCallbackTelephoneNumber";"Contains a telephone number to reach the mail user.";"PtypString, 0x001F";"Contact Properties";"[MS-OXOCNTC] section 2.2.1.4.2";"PR_CALLBACK_TELEPHONE_NUMBER, PR_CALLBACK_TELEPHONE_NUMBER_A, PR_CALLBACK_TELEPHONE_NUMBER_W, urn:schemas:contacts:callbackphone"
+"0x3A05";"PidTagGeneration";"Contains a generational abbreviation that follows the full name of the mail user.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.1.2";"PR_GENERATION, PR_GENERATION_A, PR_GENERATION_W, urn:schemas:contacts:namesuffix"
+"0x3A06";"PidTagGivenName";"Contains the mail user's given name.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.2";"PR_GIVEN_NAME, PR_GIVEN_NAME_A, PR_GIVEN_NAME_W, urn:schemas:contacts:givenName"
+"0x3A07";"PidTagGovernmentIdNumber";"Contains a government identifier for the mail user.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.10.9";"PR_GOVERNMENT_ID_NUMBER, PR_GOVERNMENT_ID_NUMBER_A, PR_GOVERNMENT_ID_NUMBER_W, urn:schemas:contacts:governmentid"
+"0x3A08";"PidTagBusinessTelephoneNumber";"Contains the primary telephone number of the mail user's place of business.";"PtypString, 0x001F";"Contact Properties";"[MS-OXOABK] section 2.2.4.21";"PR_BUSINESS_TELEPHONE_NUMBER, PR_BUSINESS_TELEPHONE_NUMBER_A, PR_BUSINESS_TELEPHONE_NUMBER_W, PR_OFFICE_TELEPHONE_NUMBER, urn:schemas:contacts:telephoneNumber"
+"0x3A09";"PidTagHomeTelephoneNumber";"Contains the primary telephone number of the mail user's home.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.22";"PR_HOME_TELEPHONE_NUMBER, PR_HOME_TELEPHONE_NUMBER_A, PR_HOME_TELEPHONE_NUMBER_W, urn:schemas:contacts:homePhone"
+"0x3A0A";"PidTagInitials";"Contains the initials for parts of the full name of the mail user.";"PtypString, 0x001F";"Address Properties";"[MS-OXOABK] section 2.2.4.3";"PR_INITIALS, PR_INITIALS_A, PR_INITIALS_W, urn:schemas:contacts:initials"
+"0x3A0B";"PidTagKeyword";"Contains a keyword that identifies the mail user to the mail user's system administrator.";"PtypString, 0x001F";"Address Properties";"[MS-OXOABK] section 2.2.4.32";"PR_KEYWORD, PR_KEYWORD_A, PR_KEYWORD_W"
+"0x3A0C";"PidTagLanguage";"Contains a value that indicates the language in which the messaging user is writing messages.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.10.4";"PR_LANGUAGE, PR_LANGUAGE_A, PR_LANGUAGE_W, urn:schemas:contacts:language"
+"0x3A0D";"PidTagLocation";"Contains the location of the mail user.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.10.5";"PR_LOCATION, PR_LOCATION_A, PR_LOCATION_W, urn:schemas:contacts:location"
+"0x3A0F";"PidTagMessageHandlingSystemCommonName";"Contains the common name of a messaging user for use in a message header.";"PtypString, 0x001F";"Address Properties";"[MS-OXOABK] section 2.2.4.33";"PR_MHS_COMMON_NAME, PR_MHS_COMMON_NAME_A, PR_MHS_COMMON_NAME_W, urn:schemas:contacts:dn"
+"0x3A10";"PidTagOrganizationalIdNumber";"Contains an identifier for the mail user used within the mail user's organization.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.10.7";"PR_ORGANIZATIONAL_ID_NUMBER, PR_ORGANIZATIONAL_ID_NUMBER_A, PR_ORGANIZATIONAL_ID_NUMBER_W, urn:schemas:contacts:employeenumber"
+"0x3A11";"PidTagSurname";"Contains the mail user's family name.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.1";"PR_SURNAME, PR_SURNAME_A, PR_SURNAME_W, urn:schemas:contacts:sn"
+"0x3A12";"PidTagOriginalEntryId";"Contains the original EntryID of an object.";"PtypBinary, 0x0102";"General Message Properties";"[MS-OXCFXICS] section 2.2.1.2.9";"PR_ORIGINAL_ENTRYID, ptagOriginalEntryId"
+"0x3A15";"PidTagPostalAddress";"Contains the mail user's postal address.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.3.8";"PR_POSTAL_ADDRESS, PR_POSTAL_ADDRESS_A, PR_POSTAL_ADDRESS_W, urn:schemas:contacts:mailingpostaladdress"
+"0x3A16";"PidTagCompanyName";"Contains the mail user's company name.";"PtypString, 0x001F";"Contact Properties";"[MS-OXOABK] section 2.2.4.7";"PR_COMPANY_NAME, PR_COMPANY_NAME_A, PR_COMPANY_NAME_W, urn:schemas:contacts:o"
+"0x3A17";"PidTagTitle";"Contains the mail user's job title.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.4";"PR_TITLE, PR_TITLE_A, PR_TITLE_W, urn:schemas:contacts:title"
+"0x3A18";"PidTagDepartmentName";"Contains a name for the department in which the mail user works.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.6";"PR_DEPARTMENT_NAME, PR_DEPARTMENT_NAME_A, PR_DEPARTMENT_NAME_W, urn:schemas:contacts:department"
+"0x3A19";"PidTagOfficeLocation";"Contains the mail user's office location.";"PtypString, 0x001F";"Address Properties";"[MS-OXOABK] section 2.2.4.5";"PR_OFFICE_LOCATION, PR_OFFICE_LOCATION_A, PR_OFFICE_LOCATION_W, urn:schemas:contacts:roomnumber"
+"0x3A1A";"PidTagPrimaryTelephoneNumber";"Contains the mail user's primary telephone number.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.4.5";"PR_PRIMARY_TELEPHONE_NUMBER, PR_PRIMARY_TELEPHONE_NUMBER_A, PR_PRIMARY_TELEPHONE_NUMBER_W"
+"0x3A1B";"PidTagBusiness2TelephoneNumber";"Contains a secondary telephone number at the mail user's place of business.";"PtypString, 0x001F";"Contact Properties";"[MS-OXOABK] section 2.2.4.23";"""PR_BUSINESS2_TELEPHONE_NUMBER, PR_BUSINESS2_TELEPHONE_NUMBER_A, PR_BUSINESS2_TELEPHONE_NUMBER_W, PR_OFFICE2_TELEPHONE_NUMBER, urn:schemas:contacts:telephonenumber2"
+"0x3A1B";"PidTagBusiness2TelephoneNumbers";"Contains secondary telephone numbers at the mail user's place of business.";"PtypMultipleString, 0x101F";"Contact Properties";"[MS-OXOABK] section 2.2.4.24";"PR_BUSINESS2_TELEPHONE_NUMBER_A_MV"
+"0x3A1C";"PidTagMobileTelephoneNumber";"Contains the mail user's cellular telephone number.";"PtypString, 0x001F";"Address Properties";"[MS-OXOABK] section 2.2.4.27";"PR_MOBILE_TELEPHONE_NUMBER, PR_MOBILE_TELEPHONE_NUMBER_A, PR_MOBILE_TELEPHONE_NUMBER_W, urn:schemas:contacts:mobile"
+"0x3A1D";"PidTagRadioTelephoneNumber";"Contains the mail user's radio telephone number.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.4.8";"PR_RADIO_TELEPHONE_NUMBER, PR_RADIO_TELEPHONE_NUMBER_A, PR_RADIO_TELEPHONE_NUMBER_W"
+"0x3A1E";"PidTagCarTelephoneNumber";"Contains the mail user's car telephone number.";"PtypString, 0x001F";"Contact Properties";"[MS-OXOCNTC] section 2.2.1.4.9";"PR_CAR_TELEPHONE_NUMBER, PR_CAR_TELEPHONE_NUMBER_A, PR_CAR_TELEPHONE_NUMBER_W, urn:schemas:contacts:othermobile"
+"0x3A1F";"PidTagOtherTelephoneNumber";"Contains an alternate telephone number for the mail user.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.4.10";"PR_OTHER_TELEPHONE_NUMBER, PR_OTHER_TELEPHONE_NUMBER_A, PR_OTHER_TELEPHONE_NUMBER_W, urn:schemas:contacts:otherTelephone"
+"0x3A20";"PidTagTransmittableDisplayName";"Contains an Address Book object's display name that is transmitted with the message.";"PtypString, 0x001F";"Address Properties";"[MS-OXOABK] section 2.2.3.8";"PR_TRANSMITABLE_DISPLAY_NAME, PR_TRANSMITABLE_DISPLAY_NAME_A, ptagTransmitableDisplayName, PR_TRANSMITABLE_DISPLAY_NAME_W"
+"0x3A21";"PidTagPagerTelephoneNumber";"Contains the mail user's pager telephone number.";"PtypString, 0x001F";"Address Properties";"[MS-OXOABK] section 2.2.4.28";"PR_PAGER_TELEPHONE_NUMBER, PR_PAGER_TELEPHONE_NUMBER_A, PR_PAGER_TELEPHONE_NUMBER_W, urn:schemas:contacts:pager"
+"0x3A22";"PidTagUserCertificate";"Contains an ASN.1 authentication certificate for a messaging user.";"PtypBinary, 0x0102";"MapiMailUser";"[MS-OXOABK] section 2.2.4.34";"PR_USER_CERTIFICATE, ptagUserCertificate, urn:schemas:contacts:usercertificate"
+"0x3A23";"PidTagPrimaryFaxNumber";"Contains the telephone number of the mail user's primary fax machine.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.29";"PR_PRIMARY_FAX_NUMBER, PR_PRIMARY_FAX_NUMBER_A, PR_PRIMARY_FAX_NUMBER_W, urn:schemas:contacts:otherfax"
+"0x3A24";"PidTagBusinessFaxNumber";"Contains the telephone number of the mail user's business fax machine.";"PtypString, 0x001F";"Contact Properties";"[MS-OXOCNTC] section 2.2.1.2.6";"PR_BUSINESS_FAX_NUMBER, PR_BUSINESS_FAX_NUMBER_A, PR_BUSINESS_FAX_NUMBER_W, urn:schemas:contacts:facsimiletelephonenumber"
+"0x3A25";"PidTagHomeFaxNumber";"Contains the telephone number of the mail user's home fax machine.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.2.6";"PR_HOME_FAX_NUMBER, PR_HOME_FAX_NUMBER_A, PR_HOME_FAX_NUMBER_W, urn:schemas:contacts:homefax"
+"0x3A26";"PidTagCountry";"Contains the name of the mail user's country/region.";"PtypString, 0x001F";"Contact Properties";"[MS-OXOABK] section 2.2.4.19";"PR_COUNTRY, PR_COUNTRY_A, PR_COUNTRY_W, PR_BUSINESS_ADDRESS_COUNTRY, PR_BUSINESS_ADDRESS_COUNTRY_A, PR_BUSINESS_ADDRESS_COUNTRY_W, urn:schemas:contacts:mailingcountry"
+"0x3A27";"PidTagLocality";"Contains the name of the mail user's locality, such as the town or city.";"PtypString, 0x001F";"Address Properties";"[MS-OXOABK] section 2.2.4.16";"PR_LOCALITY, PR_LOCALITY_A, PR_LOCALITY_W, PR_BUSINESS_ADDRESS_LOCALITY, PR_BUSINESS_ADDRESS_LOCALITY_A, PR_BUSINESS_ADDRESS_LOCALITY_W, urn:schemas:contacts:mailingcity"
+"0x3A28";"PidTagStateOrProvince";"Contains the name of the mail user's state or province.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.17";"PR_STATE_OR_PROVINCE, PR_STATE_OR_PROVINCE_A, PR_STATE_OR_PROVINCE_W, PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE, PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_A, PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_W, urn:schemas:contacts:mailingstate"
+"0x3A29";"PidTagStreetAddress";"Contains the mail user's street address.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.14";"PR_STREET_ADDRESS, PR_STREET_ADDRESS_A, PR_STREET_ADDRESS_W, PR_BUSINESS_ADDRESS_STREET, PR_BUSINESS_ADDRESS_STREET_A, PR_BUSINESS_ADDRESS_STREET_W, urn:schemas:contacts:mailingstreet"
+"0x3A2A";"PidTagPostalCode";"Contains the postal code for the mail user's postal address.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.18";"PR_POSTAL_CODE, PR_POSTAL_CODE_A, PR_POSTAL_CODE_W, PR_BUSINESS_ADDRESS_POSTAL_CODE, PR_BUSINESS_ADDRESS_POSTAL_CODE_A, PR_BUSINESS_ADDRESS_POSTAL_CODE_W, urn:schemas:contacts:mailingpostalcode"
+"0x3A2B";"PidTagPostOfficeBox";"Contains the number or identifier of the mail user's post office box.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.15";"PR_POST_OFFICE_BOX, PR_POST_OFFICE_BOX_A, PR_POST_OFFICE_BOX_W, PR_BUSINESS_ADDRESS_POST_OFFICE_BOX, PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_A, PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_W, urn:schemas:contacts:mailingpostofficebox"
+"0x3A2C";"PidTagTelexNumber";"Contains the mail user's telex number. This property is returned from an NSPI server as a PtypMultipleBinary. Otherwise, the data type is PtypString.";"PtypString, 0x001F; PtypMultipleBinary, 0x1102";"MapiMailUser";"[MS-OXOABK] section 2.2.4.30";"PR_TELEX_NUMBER, PR_TELEX_NUMBER_A, PR_TELEX_NUMBER_W, urn:schemas:contacts:telexnumber"
+"0x3A2D";"PidTagIsdnNumber";"Contains the Integrated Services Digital Network (ISDN) telephone number of the mail user.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.4.16";"PR_ISDN_NUMBER, PR_ISDN_NUMBER_A, PR_ISDN_NUMBER_W, urn:schemas:contacts:internationalisdnnumber"
+"0x3A2E";"PidTagAssistantTelephoneNumber";"Contains the telephone number of the mail user's administrative assistant.";"PtypString, 0x001F";"Address Properties";"[MS-OXOABK] section 2.2.4.31";"PR_ASSISTANT_TELEPHONE_NUMBER, PR_ASSISTANT_TELEPHONE_NUMBER_A, PR_ASSISTANT_TELEPHONE_NUMBER_W, urn:schemas:contacts:secretaryphone"
+"0x3A2F";"PidTagHome2TelephoneNumber";"Contains a secondary telephone number at the mail user's home.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.25";"PR_HOME2_TELEPHONE_NUMBER, PR_HOME2_TELEPHONE_NUMBER_A, PR_HOME2_TELEPHONE_NUMBER_W, urn:schemas:contacts:homephone2"
+"0x3A2F";"PidTagHome2TelephoneNumbers";"Contains secondary telephone numbers at the mail user's home.";"PtypMultipleString, 0x101F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.26";"PR_HOME2_TELEPHONE_NUMBER_A_MV"
+"0x3A30";"PidTagAssistant";"Contains the name of the mail user's administrative assistant.";"PtypString, 0x001F";"Address Properties";"[MS-OXOABK] section 2.2.4.8";"PR_ASSISTANT, PR_ASSISTANT_A, PR_ASSISTANT_W, urn:schemas:contacts:secretarycn"
+"0x3A40";"PidTagSendRichInfo";"Indicates whether the email-enabled entity represented by the Address Book object can receive all message content, including Rich Text Format (RTF) and other embedded objects.";"PtypBoolean, 0x000B";"Address Properties";"[MS-OXOABK] section 2.2.3.18";"PR_SEND_RICH_INFO, ptagSendRichInfo"
+"0x3A41";"PidTagWeddingAnniversary";"Contains the date of the mail user's wedding anniversary. ";"PtypTime, 0x0040";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.5.4";"PR_WEDDING_ANNIVERSARY, urn:schemas:contacts:weddinganniversary"
+"0x3A42";"PidTagBirthday";"Contains the date of the mail user's birthday at midnight.";"PtypTime, 0x0040";"Contact Properties";"[MS-OXOCNTC] section 2.2.1.5.1";"PR_BIRTHDAY, urn:schemas:contacts:bday"
+"0x3A43";"PidTagHobbies";"Contains the names of the mail user's hobbies.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.10.2";"PR_HOBBIES, PR_HOBBIES_A, PR_HOBBIES_W, urn:schemas:contacts:hobbies"
+"0x3A44";"PidTagMiddleName";"Specifies the middle name(s) of the contact.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.1.5";"PR_MIDDLE_NAME, PR_MIDDLE_NAME_A, PR_MIDDLE_NAME_W, urn:schemas:contacts:middlename"
+"0x3A45";"PidTagDisplayNamePrefix";"Contains the mail user's honorific title.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.1.3";"PR_DISPLAY_NAME_PREFIX, PR_DISPLAY_NAME_PREFIX_A, PR_DISPLAY_NAME_PREFIX_W, urn:schemas:contacts:personaltitle"
+"0x3A46";"PidTagProfession";"Contains the name of the mail user's line of business.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.6.9";"PR_PROFESSION, PR_PROFESSION_A, PR_PROFESSION_W, urn:schemas:contacts:profession"
+"0x3A47";"PidTagReferredByName";"Contains the name of the mail user's referral.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.10.21";"PR_REFERRED_BY_NAME, PR_REFERRED_BY_NAME_A, PR_REFERRED_BY_NAME_W"
+"0x3A48";"PidTagSpouseName";"Contains the name of the mail user's spouse/partner.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.10.3";"PR_SPOUSE_NAME, PR_SPOUSE_NAME_A, PR_SPOUSE_NAME_W, urn:schemas:contacts:spousecn"
+"0x3A49";"PidTagComputerNetworkName";"Contains the name of the mail user's computer network.";"PtypString, 0x001F";"Contact Properties";"[MS-OXOCNTC] section 2.2.1.10.16";"PR_COMPUTER_NETWORK_NAME, PR_COMPUTER_NETWORK_NAME_A, PR_COMPUTER_NETWORK_NAME_W, urn:schemas:contacts:computernetworkname"
+"0x3A4A";"PidTagCustomerId";"Contains the mail user's customer identification number.";"PtypString, 0x001F";"Contact Properties";"[MS-OXOCNTC] section 2.2.1.10.8";"PR_CUSTOMER_ID, PR_CUSTOMER_ID_A, PR_CUSTOMER_ID_W, urn:schemas:contacts:customerid"
+"0x3A4B";"PidTagTelecommunicationsDeviceForDeafTelephoneNumber";"Contains the mail user's telecommunication device for the deaf (TTY/TDD) telephone number.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.4.13 ";"PR_TTYTDD_PHONE_NUMBER, PR_TTYTDD_PHONE_NUMBER_A, PR_TTYTDD_PHONE_NUMBER_W, urn:schemas:contacts:ttytddphone"
+"0x3A4C";"PidTagFtpSite";"Contains the File Transfer Protocol (FTP) site address of the mail user.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.10.15";"PR_FTP_SITE, PR_FTP_SITE_A, PR_FTP_SITE_W, urn:schemas:contacts:ftpsite"
+"0x3A4D";"PidTagGender";"Contains a value that represents the mail user's gender.";"PtypInteger16, 0x0002";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.10.20";"PR_GENDER, urn:schemas:contacts:gender"
+"0x3A4E";"PidTagManagerName";"Contains the name of the mail user's manager.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.6.6";"PR_MANAGER_NAME, PR_MANAGER_NAME_A, PR_MANAGER_NAME_W, urn:schemas:contacts:manager"
+"0x3A4F";"PidTagNickname";"Contains the mail user's nickname.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.1.1";"PR_NICKNAME, PR_NICKNAME_A, PR_NICKNAME_W, urn:schemas:contacts:nickname"
+"0x3A50";"PidTagPersonalHomePage";"Contains the URL of the mail user's personal home page.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.10.13";"PR_PERSONAL_HOME_PAGE, PR_PERSONAL_HOME_PAGE_A, PR_PERSONAL_HOME_PAGE_W, urn:schemas:contacts:personalHomePage"
+"0x3A51";"PidTagBusinessHomePage";"Contains the URL of the mail user's business home page.";"PtypString, 0x001F";"Contact Properties";"[MS-OXOCNTC] section 2.2.1.10.14";"PR_BUSINESS_HOME_PAGE, PR_BUSINESS_HOME_PAGE_A, PR_BUSINESS_HOME_PAGE_W, urn:schemas:contacts:businesshomepageurn:schemas:contacts:businesshomepage"
+"0x3A57";"PidTagCompanyMainTelephoneNumber";"Contains the main telephone number of the mail user's company.";"PtypString, 0x001F";"Contact Properties";"[MS-OXOCNTC] section 2.2.1.4.14";"PR_COMPANY_MAIN_PHONE_NUMBER, PR_COMPANY_MAIN_PHONE_NUMBER_A, PR_COMPANY_MAIN_PHONE_NUMBER_W, urn:schemas:contacts:organizationmainphone"
+"0x3A58";"PidTagChildrensNames";"Specifies the names of the children of the contact.";"PtypMultipleString, 0x101F";"Contact Properties";"[MS-OXOCNTC] section 2.2.1.10.17";"PR_CHILDRENS_NAMES, PR_CHILDRENS_NAMES_A, PR_CHILDRENS_NAMES_W, urn:schemas:contacts:childrensnames"
+"0x3A59";"PidTagHomeAddressCity";"Contains the name of the mail user's home locality, such as the town or city.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.3.2";"PR_HOME_ADDRESS_CITY, PR_HOME_ADDRESS_CITY_A, PR_HOME_ADDRESS_CITY_W, urn:schemas:contacts:homeCity"
+"0x3A5A";"PidTagHomeAddressCountry";"Contains the name of the mail user's home country/region.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.3.5";"PR_HOME_ADDRESS_COUNTRY, PR_HOME_ADDRESS_COUNTRY_A, PR_HOME_ADDRESS_COUNTRY_W, urn:schemas:contacts:homeCountry"
+"0x3A5B";"PidTagHomeAddressPostalCode";"Contains the postal code for the mail user's home postal address.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.3.4";"PR_HOME_ADDRESS_POSTAL_CODE, PR_HOME_ADDRESS_POSTAL_CODE_A, PR_HOME_ADDRESS_POSTAL_CODE_W, urn:schemas:contacts:homePostalCode"
+"0x3A5C";"PidTagHomeAddressStateOrProvince";"Contains the name of the mail user's home state or province.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.3.3";"PR_HOME_ADDRESS_STATE_OR_PROVINCE, PR_HOME_ADDRESS_STATE_OR_PROVINCE_A, PR_HOME_ADDRESS_STATE_OR_PROVINCE_W, urn:schemas:contacts:homeState"
+"0x3A5D";"PidTagHomeAddressStreet";"Contains the mail user's home street address.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOABK] section 2.2.4.20";"PR_HOME_ADDRESS_STREET, PR_HOME_ADDRESS_STREET_A, PR_HOME_ADDRESS_STREET_W, urn:schemas:contacts:homeStreet"
+"0x3A5E";"PidTagHomeAddressPostOfficeBox";"Contains the number or identifier of the mail user's home post office box.";"PtypString, 0x001F";"MapiMailUser";"[MS-OXOCNTC] section 2.2.1.3.7";"PR_HOME_ADDRESS_POST_OFFICE_BOX, PR_HOME_ADDRESS_POST_OFFICE_BOX_A, PR_HOME_ADDRESS_POST_OFFICE_BOX_W, urn:schemas:contacts:homepostofficebox"
+"0x3A5F";"PidTagOtherAddressCity";"Contains the name of the mail user's other locality, such as the town or city.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.3.2";"PR_OTHER_ADDRESS_CITY, PR_OTHER_ADDRESS_CITY_A, PR_OTHER_ADDRESS_CITY_W, urn:schemas:contacts:othercity"
+"0x3A60";"PidTagOtherAddressCountry";"Contains the name of the mail user's other country/region.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.3.5";"PR_OTHER_ADDRESS_COUNTRY, PR_OTHER_ADDRESS_COUNTRY_A, PR_OTHER_ADDRESS_COUNTRY_W, urn:schemas:contacts:othercountry"
+"0x3A61";"PidTagOtherAddressPostalCode";"Contains the postal code for the mail user's other postal address.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.3.4";"PR_OTHER_ADDRESS_POSTAL_CODE, PR_OTHER_ADDRESS_POSTAL_CODE_A, PR_OTHER_ADDRESS_POSTAL_CODE_W, urn:schemas:contacts:otherpostalcode"
+"0x3A62";"PidTagOtherAddressStateOrProvince";"Contains the name of the mail user's other state or province.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.3.3";"PR_OTHER_ADDRESS_STATE_OR_PROVINCE, PR_OTHER_ADDRESS_STATE_OR_PROVINCE_A, PR_OTHER_ADDRESS_STATE_OR_PROVINCE_W, urn:schemas:contacts:otherstate"
+"0x3A63";"PidTagOtherAddressStreet";"Contains the mail user's other street address.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.3.1";"PR_OTHER_ADDRESS_STREET, PR_OTHER_ADDRESS_STREET_A, PR_OTHER_ADDRESS_STREET_W, urn:schemas:contacts:otherstreet"
+"0x3A64";"PidTagOtherAddressPostOfficeBox";"Contains the number or identifier of the mail user's other post office box.";"PtypString, 0x001F";"Address Properties";"[MS-OXOCNTC] section 2.2.1.3.7";"PR_OTHER_ADDRESS_POST_OFFICE_BOX, PR_OTHER_ADDRESS_POST_OFFICE_BOX_A, PR_OTHER_ADDRESS_POST_OFFICE_BOX_W, urn:schemas:contacts:otherpostofficebox"
+"0x3A70";"PidTagUserX509Certificate";"Contains a list of certificates for the mail user.";"PtypMultipleBinary, 0x1102";"MapiMailUser";"[MS-OXOABK] section 2.2.4.36";"PR_USER_X509_CERTIFICATE"
+"0x3A71";"PidTagSendInternetEncoding";"Contains a bitmask of message encoding preferences for email sent to an email-enabled entity that is represented by this Address Book object.";"PtypInteger32, 0x0003";"Address Properties";"[MS-OXOABK] section 2.2.3.19";"PR_SEND_INTERNET_ENCODING, ptagSendInternetEncoding"
+"0x3F08";"PidTagInitialDetailsPane";"Indicates which page of a display template to display first.";"PtypInteger32, 0x0003";"MAPI Display Tables";"[MS-OXOABK] section 2.2.3.33";"PR_INITIAL_DETAILS_PANE"
+"0x3FDE";"PidTagInternetCodepage";"Indicates the code page used for the PidTagBody property (section 2.618) or the PidTagBodyHtml property (section 2.621).";"PtypInteger32, 0x0003";"Miscellaneous Properties";"[MS-OXCMSG] section 2.2.1.56.6";"PR_INTERNET_CPID, ptagInternetCpid"
+"0x3FDF";"PidTagAutoResponseSuppress";"Specifies whether a client or server application will forego sending automated replies in response to this message.";"PtypInteger32, 0x0003";"Email";"[MS-OXOMSG] section 2.2.1.77";"PR_AUTO_RESPONSE_SUPPRESS, ptagAutoResponseSuppress"
+"0x3FE0";"PidTagAccessControlListData";"Contains a permissions list for a folder.";"PtypBinary, 0x0102";"Access Control Properties";"[MS-OXCPERM] section 2.2.3";"PR_ACL_DATA, ptagACLData"
+"0x3FE3";"PidTagDelegatedByRule";"Specifies whether the message was forwarded due to the triggering of a delegate forward rule.";"PtypBoolean, 0x000B";"MapiStatus";"[MS-OXOMSG] section 2.2.1.84";"PR_DELEGATED_BY_RULE"
+"0x3FE7";"PidTagResolveMethod";"Specifies how to resolve any conflicts with the message.";"PtypInteger32, 0x0003";"MapiStatus";"[MS-OXCFXICS] section 2.2.1.4.1";"PR_RESOLVE_METHOD, ptagResolveMethod"
+"0x3FEA";"PidTagHasDeferredActionMessages";"Indicates whether a Message object has a deferred action message associated with it.";"PtypBoolean, 0x000B";"Rules";"[MS-OXORULE] section 2.2.9.1";"PR_HAS_DAMS, ptagHasDAMs"
+"0x3FEB";"PidTagDeferredSendNumber";"Contains a number used in the calculation of how long to defer sending a message.";"PtypInteger32, 0x0003";"MapiStatus";"[MS-OXOMSG] section 2.2.3.2";"PR_DEFERRED_SEND_NUMBER"
+"0x3FEC";"PidTagDeferredSendUnits";"Specifies the unit of time used as a multiplier with the PidTagDeferredSendNumber property (section 2.663) value.";"PtypInteger32, 0x0003";"MapiStatus";"[MS-OXOMSG] section 2.2.3.3";"PR_DEFERRED_SEND_UNITS"
+"0x3FED";"PidTagExpiryNumber";"Contains an integer value that is used along with the PidTagExpiryUnits property (section 2.690) to define the expiry send time.";"PtypInteger32, 0x0003";"MapiStatus";"[MS-OXOMSG] section 2.2.3.5";"PR_EXPIRY_NUMBER"
+"0x3FEE";"PidTagExpiryUnits";"Contains the unit of time that the value of the PidTagExpiryNumber property (section 2.688) multiplies.";"PtypInteger32, 0x0003";"MapiStatus";"[MS-OXOMSG] section 2.2.3.6";"PR_EXPIRY_UNITS"
+"0x3FEF";"PidTagDeferredSendTime";"Contains the amount of time after which a client would like to defer sending the message.";"PtypTime, 0x0040";"MapiStatus";"[MS-OXOMSG] section 2.2.3.4";"PR_DEFERRED_SEND_TIME, ptagDeferredSendTime"
+"0x3FF0";"PidTagConflictEntryId";"Contains the EntryID of the conflict resolve message.";"PtypBinary, 0x0102";"ICS";"[MS-OXCFXICS] section 2.2.1.4.2";"PR_CONFLICT_ENTRYID, ptagConflictEntryId"
+"0x3FF1";"PidTagMessageLocaleId";"Contains the Windows Locale ID of the end-user who created this message. ";"PtypInteger32, 0x0003";"Miscellaneous Properties";"[MS-OXCMSG] section 2.2.1.5";"PR_MESSAGE_LOCALE_ID"
+"0x3FF8";"PidTagCreatorName";"Contains the name of the creator of a Message object.";"PtypString, 0x001F";"General Message Properties";"[MS-OXCMSG] section 2.2.1.51";"PR_CREATOR_NAME, PR_CREATOR_NAME_A, ptagCreatorName, PR_CREATOR_NAME_W"
+"0x3FF9";"PidTagCreatorEntryId";"Specifies the original author of the message according to their Address Book EntryID.";"PtypBinary, 0x0102";"ID Properties";"[MS-OXCMSG] section 2.2.1.31";"PR_CREATOR_ENTRYID, ptagCreatorEntryId"
+"0x3FFA";"PidTagLastModifierName";"Contains the name of the last mail user to change the Message object.";"PtypString, 0x001F";"History Properties";"[MS-OXCPRPT] section 2.2.1.5";"PR_LAST_MODIFIER_NAME, PR_LAST_MODIFIER_NAME_A, ptagLastModifierName, PR_LAST_MODIFIER_NAME_W"
+"0x3FFB";"PidTagLastModifierEntryId";"Specifies the Address Book EntryID of the last user to modify the contents of the message.";"PtypBinary, 0x0102";"History Properties";"[MS-OXCMSG] section 2.2.1.32";"PR_LAST_MODIFIER_ENTRYID, ptagLastModifierEntryId"
+"0x3FFD";"PidTagMessageCodepage";"Specifies the code page used to encode the non-Unicode string properties on this Message object.";"PtypInteger32, 0x0003";"Common";"[MS-OXCMSG] section 2.2.1.4";"PR_MESSAGE_CODEPAGE"
+"0x401A";"PidTagSentRepresentingFlags";"Description:";"PtypInteger32, 0x0003";"Miscellaneous Properties";;"ptagSentRepresentingFlags"
+"0x4029";"PidTagReadReceiptAddressType";"Contains the address type of the end user to whom a read receipt is directed.";"PtypString, 0x001F";"Transport Envelope";"[MS-OXOMSG] section 2.2.2.24";"ptagReadReceiptAddrType, ReadReceiptAddrType"
+"0x402A";"PidTagReadReceiptEmailAddress";"Contains the email address of the end user to whom a read receipt is directed.";"PtypString, 0x001F";"Transport Envelope";"[MS-OXOMSG] section 2.2.2.25";"ptagReadReceiptEmailAddr, ReadReceiptEmailAddress"
+"0x402B";"PidTagReadReceiptName";"Contains the display name for the end user to whom a read receipt is directed.";"PtypString, 0x001F";"Transport Envelope";"[MS-OXOMSG] section 2.2.2.27";"ptagReadReceiptDisplayName, ReadReceiptDisplayName"
+"0x4076";"PidTagContentFilterSpamConfidenceLevel";"Indicates a confidence level that the message is spam.";"PtypInteger32, 0x0003";"Secure Messaging Properties";"[MS-OXCSPAM] section 2.2.1.3";"PR_CONTENT_FILTER_SCL, ptagContentFilterSCL"
+"0x4079";"PidTagSenderIdStatus";"Reports the results of a Sender-ID check.";"PtypInteger32, 0x0003";"Secure Messaging Properties";"[MS-OXOMSG] section 2.2.1.80";"PR_SENDER_ID_STATUS"
+"0x4082";"PidTagHierRev";"Specifies the time, in UTC, to trigger the client in cached mode to synchronize the folder hierarchy.";"PtypTime, 0x0040";"TransportEnvelope";"[MS-OXCFOLD] section 2.2.2.2.1.9";"PR_HIER_REV, ptagHierRev"
+"0x4083";"PidTagPurportedSenderDomain";"Contains the domain responsible for transmitting the current message.";"PtypString, 0x001F";"TransportEnvelope";"[MS-OXCMSG] section 2.2.1.43";"PR_PURPORTED_SENDER_DOMAIN"
+"0x5902";"PidTagInternetMailOverrideFormat";"Indicates the encoding method and HTML inclusion for attachments.";"PtypInteger32, 0x0003";"MIME Properties";"[MS-OXOMSG] section 2.2.1.11";"PR_INETMAIL_OVERRIDE_FORMAT, ptagInetMailOverrideFormat"
+"0x5909";"PidTagMessageEditorFormat";"Specifies the format that an email editor can use for editing the message body.";"PtypInteger32, 0x0003";"Miscellaneous Properties";"[MS-OXOMSG] section 2.2.1.78";"PR_MSG_EDITOR_FORMAT, ptagMsgEditorFormat"
+"0x5D01";"PidTagSenderSmtpAddress";"Contains the SMTP email address format of the e??mail address of the sending mailbox owner.";"PtypString, 0x001F";"Mail";"[MS-OXOMSG] section 2.2.1.55 ";"SenderSmtpAddress, ptagSenderSmtpAddress"
+"0x5D02";"PidTagSentRepresentingSmtpAddress";"Contains the SMTP email address of the end user who is represented by the sending mailbox owner.";"PtypString, 0x001F";"Mail";"[MS-OXOMSG] section 2.2.1.59";"ptagRecipientSentRepresentingSMTPAddress, SentRepresentingSMTPAddressXSO, PR_SENT_REPRESENTING_SMTP_ADDRESS"
+"0x5D05";"PidTagReadReceiptSmtpAddress";"Contains the SMTP email address of the user to whom a read receipt is directed.";"PtypString, 0x001F";"Mail";"[MS-OXOMSG] section 2.2.1.30";"ptagRecipientReadReceiptSmtpAddress"
+"0x5D07";"PidTagReceivedBySmtpAddress";"Contains the email message receiver's SMTP email address.";"PtypString, 0x001F";"Mail";"[MS-OXOMSG] section 2.2.1.41";"ptagRecipientRcvdBySmtpAddress"
+"0x5D08";"PidTagReceivedRepresentingSmtpAddress";"Contains the SMTP email address of the user represented by the receiving mailbox owner.";"PtypString, 0x001F";"Mail";"[MS-OXOMSG] section 2.2.1.28";"ptagRecipientRcvdRepresentingSmtpAddress"
+"0x5FDF";"PidTagRecipientOrder";"Specifies the location of the current recipient in the recipient table.";"PtypInteger32, 0x0003";"TransportRecipient";"[MS-OXCMSG] section 2.2.1.40";"PR_RECIPIENT_ORDER, ptagRecipientOrder"
+"0x5FE1";"PidTagRecipientProposed";"Indicates that the attendee proposed a new date and/or time.";"PtypBoolean, 0x000B";"TransportRecipient";"[MS-OXOCAL] section 2.2.4.10.4";"PR_RECIPIENT_PROPOSED, ptagRecipientProposed"
+"0x5FE3";"PidTagRecipientProposedStartTime";"Indicates the meeting start time requested by the attendee in a counter proposal.";"PtypTime, 0x0040";"TransportRecipient";"[MS-OXOCAL] section 2.2.4.10.5";"PR_RECIPIENT_PROPOSEDSTARTTIME, ptagRecipientProposedStartTime"
+"0x5FE4";"PidTagRecipientProposedEndTime";"Indicates the meeting end time requested by the attendee in a counter proposal.";"PtypTime, 0x0040";"TransportRecipient";"[MS-OXOCAL] section 2.2.4.10.6";"PR_RECIPIENT_PROPOSEDENDTIME, ptagRecipientProposedEndTime"
+"0x5FF6";"PidTagRecipientDisplayName";"Specifies the display name of the recipient.";"PtypString, 0x001F";"TransportRecipient";"[MS-OXCMSG] section 2.2.1.54";"PR_RECIPIENT_DISPLAY_NAME, PR_RECIPIENT_DISPLAY_NAME_W"
+"0x5FF7";"PidTagRecipientEntryId";"Identifies an Address Book object that specifies the recipient.";"PtypBinary, 0x0102";"ID Properties";"[MS-OXCMSG] section 2.2.1.55";"PR_RECIPIENT_ENTRYID, ptagRecipientEntryId"
+"0x5FFB";"PidTagRecipientTrackStatusTime";"Indicates the date and time at which the attendee responded.";"PtypTime, 0x0040";"TransportRecipient";"[MS-OXOCAL] section 2.2.4.10.3";"PR_RECIPIENT_TRACKSTATUS_TIME, ptagRecipientTrackStatusTime"
+"0x5FFD";"PidTagRecipientFlags";"Specifies a bit field that describes the recipient status.";"PtypInteger32, 0x0003";"TransportRecipient";"[MS-OXOCAL] section 2.2.4.10.1";"PR_RECIPIENT_FLAGS"
+"0x5FFF";"PidTagRecipientTrackStatus";"Indicates the response status that is returned by the attendee.";"PtypInteger32, 0x0003";"TransportRecipient";"[MS-OXOCAL] section 2.2.4.10.2";"PR_RECIPIENT_TRACKSTATUS, ptagRecipientTrackStatus"
+"0x6100";"PidTagJunkIncludeContacts";"Indicates whether email addresses of the contacts in the Contacts folder are treated in a special way with respect to the spam filter.";"PtypInteger32, 0x0003";"Spam";"[MS-OXCSPAM] section 2.2.2.2";"PR_JUNK_INCLUDE_CONTACTS"
+"0x6101";"PidTagJunkThreshold";"Indicates how aggressively incoming email is to be sent to the Junk Email folder.";"PtypInteger32, 0x0003";"Spam";"[MS-OXCSPAM] section 2.2.2.5";"PR_JUNK_THRESHOLD"
+"0x6102";"PidTagJunkPermanentlyDelete";"Indicates whether messages identified as spam can be permanently deleted.";"PtypInteger32, 0x0003";"Spam";"[MS-OXCSPAM] section 2.2.2.3";"PR_JUNK_PERMANENTLY_DELETE"
+"0x6103";"PidTagJunkAddRecipientsToSafeSendersList";"Indicates whether email recipients are to be added to the safe senders list.";"PtypInteger32, 0x0003";"Spam";"[MS-OXCSPAM] section 2.2.2.1";"PR_JUNK_ADD_RECIPS_TO_SSL"
+"0x6107";"PidTagJunkPhishingEnableLinks";"Indicated whether the phishing stamp on a message is to be ignored.";"PtypBoolean, 0x000B";"Spam";"[MS-OXCSPAM] section 2.2.2.4";"PR_JUNK_PHISHING_ENABLE_LINKS"
+"0x64F0";"PidTagMimeSkeleton";"Contains the top-level MIME message headers, all MIME message body part headers, and body part content that is not already converted to Message object properties, including attachments. ";"PtypBinary, 0x0102";"MIME properties";"[MS-OXCMSG] section 2.2.1.28";"ptagMimeSkeleton"
+"0x65C2";"PidTagReplyTemplateId";"Contains the value of the GUID that points to a Reply template.";"PtypBinary, 0x0102";"Rules";"[MS-OXORULE] section 2.2.9.2";"PR_REPLY_TEMPLATE_ID, ptagReplyTemplateId"
+"0x65E0";"PidTagSourceKey";"Contains a value that contains an internal global identifier (GID) for this folder or message.";"PtypBinary, 0x0102";"Sync";"[MS-OXCFXICS] section 2.2.1.2.5";"PR_SOURCE_KEY"
+"0x65E1";"PidTagParentSourceKey";"Contains a value on a folder that contains the PidTagSourceKey property (section 2.1022) of the parent folder.";"PtypBinary, 0x0102";"ExchangeNonTransmittableReserved";"[MS-OXCFXICS] section 2.2.1.2.6";"PR_PARENT_SOURCE_KEY"
+"0x65E2";"PidTagChangeKey";"Contains a structure that identifies the last change to the object.";"PtypBinary, 0x0102";"History Properties";"[MS-OXCFXICS] section 2.2.1.2.7";"PR_CHANGE_KEY"
+"0x65E3";"PidTagPredecessorChangeList";"Contains a value that contains a serialized representation of a PredecessorChangeList structure.";"PtypBinary, 0x0102";"Sync";"[MS-OXCFXICS] section 2.2.1.2.8";"PR_PREDECESSOR_CHANGE_LIST"
+"0x65E9";"PidTagRuleMessageState";"Contains flags that specify the state of the rule. Set on the FAI message.";"PtypInteger32, 0x0003";"ExchangeNonTransmittableReserved";"[MS-OXORULE] section 2.2.4.1.4";"PR_RULE_MSG_STATE, ptagRuleMsgState"
+"0x65EA";"PidTagRuleMessageUserFlags";"Contains an opaque property that the client sets for the exclusive use of the client. Set on the FAI message.";"PtypInteger32, 0x0003";"ExchangeNonTransmittableReserved";"[MS-OXORULE] section 2.2.4.1.5";"PR_RULE_MSG_USER_FLAGS, ptagRuleMsgUserFlags"
+"0x65EB";"PidTagRuleMessageProvider";"Identifies the client application that owns the rule. Set on the FAI message.";"PtypString, 0x001F";"ExchangeNonTransmittableReserved";"[MS-OXORULE] section 2.2.4.1.7";"ptagRuleMsgProvider"
+"0x65EC";"PidTagRuleMessageName";"Specifies the name of the rule. Set on the FAI message.";"PtypString, 0x001F";"ExchangeNonTransmittableReserved";"[MS-OXORULE] section 2.2.4.1.1";"ptagRuleMsgName"
+"0x65ED";"PidTagRuleMessageLevel";"Contains 0x00000000. Set on the FAI message.";"PtypInteger32, 0x0003";"ExchangeNonTransmittableReserved";"[MS-OXORULE] section 2.2.4.1.6";"PR_RULE_MSG_LEVEL, ptagRuleMsgLevel"
+"0x65EE";"PidTagRuleMessageProviderData";"Contains opaque data set by the client for the exclusive use of the client. Set on the FAI message.";"PtypBinary, 0x0102";"ExchangeNonTransmittableReserved";"[MS-OXORULE] section 2.2.4.1.8";"PR_RULE_MSG_PROVIDER_DATA, ptagRuleMsgProviderData"
+"0x65F3";"PidTagRuleMessageSequence";"Contains a value used to determine the order in which rules are evaluated and executed. Set on the FAI message.";"PtypInteger32, 0x0003";"ExchangeNonTransmittableReserved";"[MS-OXORULE] section 2.2.4.1.3";"PR_RULE_MSG_SEQUENCE, ptagRuleMsgSequence"
+"0x6619";"PidTagUserEntryId";"Address book EntryID of the user logged on to the public folders.";"PtypBinary, 0x0102";"ExchangeMessageStore";"[MS-OXCSTOR] section 2.2.2.1";"PR_USER_ENTRYID, ptagUserEntryId"
+"0x661B";"PidTagMailboxOwnerEntryId";"Contains the EntryID in the Global Address List (GAL) of the owner of the mailbox.";"PtypBinary, 0x0102";"Message Store Properties";"[MS-OXCSTOR] section 2.2.2.1.1.7";"PR_MAILBOX_OWNER_ENTRYID, ptagMailboxOwnerEntryId"
+"0x661C";"PidTagMailboxOwnerName";"Contains the display name of the owner of the mailbox.";"PtypString, 0x001F";"Message Store Properties";"[MS-OXCSTOR] section 2.2.2.1.1.8";"PR_MAILBOX_OWNER_NAME, PR_MAILBOX_OWNER_NAME_A, ptagMailboxOwnerName, PR_MAILBOX_OWNER_NAME_W"
+"0x661D";"PidTagOutOfOfficeState";"Indicates whether the user is OOF.";"PtypBoolean, 0x000B";"Message Store Properties";"[MS-OXCSTOR] section 2.2.2.1.2.4";"PR_OOF_STATE, ptagOOFState"
+"0x6622";"PidTagSchedulePlusFreeBusyEntryId";"Contains the EntryID of the folder named ""SCHEDULE+ FREE BUSY"" under the non-IPM subtree of the public folder message store. ";"PtypBinary, 0x0102";"ExchangeMessageStore";"[MS-OXOPFFB] section 2.2.2.2";"PR_SPLUS_FREE_BUSY_ENTRYID"
+"0x6638";"PidTagSerializedReplidGuidMap";"Contains a serialized list of REPLID and REPLGUID pairs which represent all or part of the REPLID / REPLGUID mapping of the associated Logon object.";"PtypBinary, 0x0102";"Logon Properties";"[MS-OXCSTOR] section 2.2.2.1.1.13";"ptagSerializedReplidGuidMap"
+"0x6639";"PidTagRights";"Specifies a user's folder permissions.";"PtypInteger32, 0x0003";"ExchangeFolder";"[MS-OXCFOLD] section 2.2.2.2.2.8";"PR_RIGHTS, ptagRights"
+"0x663A";"PidTagHasRules";"Indicates whether a Folder object has rules.";"PtypBoolean, 0x000B";"ExchangeFolder";"[MS-OXORULE] section 2.2.8.1";"PR_HAS_RULES, ptagHasRules"
+"0x663B";"PidTagAddressBookEntryId";"Contains the name-service EntryID of a directory object that refers to a public folder.";"PtypBinary, 0x0102";"Address Book";"[MS-OXCFOLD] section 2.2.2.2.1.4";"PR_ADDRESS_BOOK_ENTRYID, ptagAddressBookEntryId"
+"0x663E";"PidTagHierarchyChangeNumber";"Contains a number that monotonically increases every time a subfolder is added to, or deleted from, this folder.";"PtypInteger32, 0x0003";"ExchangeFolder";"[MS-OXCFOLD] section 2.2.2.2.1.8";"PR_HIERARCHY_CHANGE_NUM"
+"0x6645";"PidTagClientActions";"Specifies the actions the client is required to take on the message.";"PtypBinary, 0x0102";"Server-side Rules Properties";"[MS-OXORULE] section 2.2.6.6";"PR_CLIENT_ACTIONS, ptagClientActions"
+"0x6646";"PidTagDamOriginalEntryId";"Contains the EntryID of the delivered message that the client has to process.";"PtypBinary, 0x0102";"Server-side Rules Properties";"[MS-OXORULE] section 2.2.6.3";"PR_DAM_ORIGINAL_ENTRYID"
+"0x6647";"PidTagDamBackPatched";"Indicates whether the Deferred Action Message (DAM) was updated by the server.";"PtypBoolean, 0x000B";"Server-side Rules Properties";"[MS-OXORULE] section 2.2.6.2";"PR_DAM_BACK_PATCHED, ptagDamBackPatched"
+"0x6648";"PidTagRuleError";"Contains the error code that indicates the cause of an error encountered during the execution of the rule.";"PtypInteger32, 0x0003";"ExchangeMessageReadOnly";"[MS-OXORULE] section 2.2.7.2";"PR_RULE_ERROR, ptagRuleError"
+"0x6649";"PidTagRuleActionType";"Contains the ActionType field ([MS-OXORULE] section 2.2.5.1) of a rule that failed.";"PtypInteger32, 0x0003";"ExchangeMessageReadOnly";"[MS-OXORULE] section 2.2.7.3";"PR_RULE_ACTION_TYPE, ptagRuleActionType"
+"0x664A";"PidTagHasNamedProperties";"Indicates whether the Message object has a named property.";"PtypBoolean, 0x000B";"ExchangeMessageReadOnly";"[MS-OXCMSG] section 2.2.1.39";"PR_HAS_NAMED_PROPERTIES, ptagHasNamedProperties"
+"0x6650";"PidTagRuleActionNumber";"Contains the index of a rule action that failed.";"PtypInteger32, 0x0003";"ExchangeMessageReadOnly";"[MS-OXORULE] section 2.2.7.4";"PR_RULE_ACTION_NUMBER, ptagRuleActionNumber"
+"0x6651";"PidTagRuleFolderEntryId";"Contains the EntryID of the folder where the rule that triggered the generation of a DAM is stored.";"PtypBinary, 0x0102";"ExchangeMessageReadOnly";"[MS-OXORULE] section 2.2.6.5";"PR_RULE_FOLDER_ENTRYID, ptagRuleFolderEntryId"
+"0x666A";"PidTagProhibitReceiveQuota";"Maximum size, in kilobytes, that a user is allowed to accumulate in their mailbox before no further email will be delivered to their mailbox.";"PtypInteger32, 0x0003";"Exchange Administrative";"[MS-OXCSTOR] section 2.2.2.1.1.3";"PR_PROHIBIT_RECEIVE_QUOTA, ptagProhibitReceiveQuota"
+"0x666C";"PidTagInConflict";"Specifies whether the attachment represents an alternate replica.";"PtypBoolean, 0x000B";"Conflict Note";"[MS-OXCFXICS] section 2.2.1.4.3";"PR_IN_CONFLICT, ptagInConflict"
+"0x666D";"PidTagMaximumSubmitMessageSize";"Maximum size, in kilobytes, of a message that a user is allowed to submit for transmission to another user.";"PtypInteger32, 0x0003";"Message Store Properties";"[MS-OXCSTOR] section 2.2.2.1.1.2";"PR_MAX_SUBMIT_MESSAGE_SIZE"
+"0x666E";"PidTagProhibitSendQuota";"Maximum size, in kilobytes, that a user is allowed to accumulate in their mailbox before the user can no longer send any more email.";"PtypInteger32, 0x0003";"ExchangeAdministrative";"[MS-OXCSTOR] section 2.2.2.1.1.4";"PR_PROHIBIT_SEND_QUOTA, ptagProhibitSendQuota"
+"0x6671";"PidTagMemberId";"Contains a unique identifier that the messaging server generates for each user.";"PtypInteger64, 0x0014";"Access Control Properties";"[MS-OXCPERM] section 2.2.5";"PR_MEMBER_ID, ptagMemberId"
+"0x6672";"PidTagMemberName";"Contains the user-readable name of the user.";"PtypString, 0x001F";"Access Control Properties";"[MS-OXCPERM] section 2.2.6";"PR_MEMBER_NAME, PR_MEMBER_NAME_A, ptagMemberName, PR_MEMBER_NAME_W"
+"0x6673";"PidTagMemberRights";"Contains the permissions for the specified user.";"PtypInteger32, 0x0003";"Access Control Properties";"[MS-OXCPERM] section 2.2.7";"PR_MEMBER_RIGHTS, ptagMemberRights"
+"0x6674";"PidTagRuleId";"Specifies a unique identifier that is generated by the messaging server for each rule when the rule is first created. ";"PtypInteger64, 0x0014";"Server-Side Rules Properties";"[MS-OXORULE] section 2.2.1.3.1.1";"PR_RULE_ID, ptagRuleId"
+"0x6675";"PidTagRuleIds";"Contains a buffer that is obtained by concatenating the PidTagRuleId property (section 2.949) values from all of the rules contributing actions that are contained in the PidTagClientActions property (section 2.634). ";"PtypBinary, 0x0102";"Server-Side Rules Properties";"[MS-OXORULE] section 2.2.6.7";"PR_RULE_IDS, ptagRuleIds"
+"0x6676 ";"PidTagRuleSequence";"Contains a value used to determine the order in which rules are evaluated and executed. ";"PtypInteger32, 0x0003";"Server-Side Rules Properties";"[MS-OXORULE] section 2.2.1.3.1.2";"PR_RULE_SEQUENCE, ptagRuleSequence"
+"0x6677";"PidTagRuleState";"Contains flags that specify the state of the rule. ";"PtypInteger32, 0x0003";"Server-Side Rules Properties";"[MS-OXORULE] section 2.2.1.3.1.3";"PR_RULE_STATE, ptagRuleState"
+"0x6678";"PidTagRuleUserFlags";"Contains an opaque property that the client sets for the exclusive use of the client. ";"PtypInteger32, 0x0003";"Server-Side Rules Properties";"[MS-OXORULE] section 2.2.1.3.1.7";"PR_RULE_USER_FLAGS, ptagRuleUserFlags"
+"0x6679";"PidTagRuleCondition";"Defines the conditions under which a rule action is to be executed.";"PtypRestriction, 0x00FD";"Server-Side Rules Properties";"[MS-OXORULE] section 2.2.1.3.1.9";"PR_RULE_CONDITION, ptagRuleCondition"
+"0x6680";"PidTagRuleActions";"Contains the set of actions associated with the rule.";"PtypRuleAction, 0x00FE";"Server-Side Rules Properties";"[MS-OXORULE] section 2.2.1.3.1.10";"PR_RULE_ACTIONS, ptagRuleActions"
+"0x6681";"PidTagRuleProvider";"A string identifying the client application that owns a rule. ";"PtypString, 0x001F";"Server-Side Rules Properties";"[MS-OXORULE] section 2.2.1.3.1.5";"PR_RULE_PROVIDER, ptagRuleProvider, PR_RULE_PROVIDER_W"
+"0x6682";"PidTagRuleName";"Specifies the name of the rule.";"PtypString, 0x001F";"Server-Side Rules Properties";"[MS-OXORULE] section 2.2.1.3.1.4";"PR_RULE_NAME, PR_RULE_NAME_A, ptagRuleName, PR_RULE_NAME_W"
+"0x6683";"PidTagRuleLevel";"Contains 0x00000000. This property is not used.";"PtypInteger32, 0x0003";"Server-Side Rules Properties";"[MS-OXORULE] section 2.2.1.3.1.6";"PR_RULE_LEVEL, ptagRuleLevel"
+"0x6684";"PidTagRuleProviderData";"Contains opaque data set by the client for the exclusive use of the client. ";"PtypBinary, 0x0102";"Server-Side Rules Properties";"[MS-OXORULE] section 2.2.1.3.1.8";"PR_RULE_PROVIDER_DATA, ptagRuleProviderData"
+"0x668F";"PidTagDeletedOn";"Specifies the time, in UTC, when the item or folder was soft deleted.";"PtypTime, 0x0040";"ExchangeFolder ";"[MS-OXCFOLD] section 2.2.2.2.1.3";"PR_DELETED_ON, ptagDeletedOn, urn:schemas:httpmail:deletedon"
+"0x66A1";"PidTagLocaleId";"Contains the Logon object LocaleID.";"PtypInteger32, 0x0003";"Miscellaneous Properties";"[MS-OXCSTOR] section 2.2.2.1.1.12";"PR_LOCALE_ID, ptagLocaleId"
+"0x66A8";"PidTagFolderFlags";"Contains a computed value to specify the type or state of a folder.";"PtypInteger32, 0x0003";"ExchangeAdministrative";"[MS-OXCFOLD] section 2.2.2.2.1.5";"PR_FOLDER_FLAGS"
+"0x66C3";"PidTagCodePageId";"Contains the identifier for the client code page used for Unicode to double-byte character set (DBCS) string conversion.";"PtypInteger32, 0x0003";"Exchange Profile Configuration";"[MS-OXCSTOR] section 2.2.2.1.1.15";"PR_CODE_PAGE_ID, ptagCodePageId"
+"0x6704";"PidTagAddressBookManageDistributionList";"Contains information for use in display templates for distribution lists.";"PtypObject, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.10.2";"PR_EMS_AB_MANAGE_DL"
+"0x6705";"PidTagSortLocaleId";"Contains the locale identifier.";"PtypInteger32, 0x0003";"ExchangeAdministrative";"[MS-OXCSTOR] section 2.2.2.1.1.14";"PR_SORT_LOCALE_ID, ptagSortLocaleId"
+"0x6709";"PidTagLocalCommitTime";"Specifies the time, in UTC, that a Message object or Folder object was last changed.";"PtypTime, 0x0040";"Server";"[MS-OXCMSG] section 2.2.1.49, [MS-OXCFOLD] section 2.2.2.2.1.13";"PR_LOCAL_COMMIT_TIME, ptagLocalCommitTime"
+"0x670A";"PidTagLocalCommitTimeMax";"Contains the time of the most recent message change within the folder container, excluding messages changed within subfolders.";"PtypTime, 0x0040";"Server";"[MS-OXCFOLD] section 2.2.2.2.1.14";"PR_LOCAL_COMMIT_TIME_MAX, ptagLocalCommitTimeMax "
+"0x670B";"PidTagDeletedCountTotal";"Contains the total count of messages that have been deleted from a folder, excluding messages deleted within subfolders.";"PtypInteger32, 0x0003";"Server ";"[MS-OXCFOLD] section 2.2.2.2.1.15";"PR_DELETED_COUNT_TOTAL, ptagDeleteCountTotal"
+"0x670E";"PidTagFlatUrlName";"Contains a unique identifier for an item across the message store.";"PtypString, 0x001F";"ExchangeAdministrative ";"[MS-XWDCAL] section 2.2.8.9";"PR_FLAT_URL_NAME, PR_FLAT_URL_NAME_A, PR_FLAT_URL_NAME_W, ptagFlatURLName, http://schemas.microsoft.com/exchange/permanenturl"
+"0x6740";"PidTagSentMailSvrEID";"Contains an EntryID that represents the Sent Items folder for the message.";"PtypServerId, 0x00FB";"ProviderDefinedNonTransmittable";"[MS-OXOMSG] section 2.2.3.10";"ptagSentMailSvrEID"
+"0x6741";"PidTagDeferredActionMessageOriginalEntryId";"Contains the server EntryID for the DAM.";"PtypServerId, 0x00FB";"Server-side Rules Properties";"[MS-OXORULE] section 2.2.6.8";"PR_DAM_ORIG_MSG_SVREID, ptagDamOrgMsgSvrEID"
+"0x6748";"PidTagFolderId";"Contains the Folder ID (FID) ([MS-OXCDATA] section 2.2.1.1) of the folder.";"PtypInteger64, 0x0014";"ID Properties";"[MS-OXCFOLD] section 2.2.2.2.1.6";"ptagFID"
+"0x6749";"PidTagParentFolderId";"Contains a value that contains the Folder ID (FID), as specified in [MS-OXCDATA] section 2.2.1.1, that identifies the parent folder of the messaging object being synchronized.";"PtypInteger64, 0x0014";"ID Properties";"[MS-OXCFXICS] section 2.2.1.2.4";"ptagParentFID"
+"0x674A";"PidTagMid";"Contains a value that contains the MID of the message currently being synchronized.";"PtypInteger64, 0x0014";"ID Properties ";"[MS-OXCFXICS] section 2.2.1.2.1";"ptagMID, http://schemas.microsoft.com/exchange/mid"
+"0x674D";"PidTagInstID";"Contains an identifier for all instances of a row in the table.";"PtypInteger64, 0x0014";"ProviderDefinedNonTransmittable";"[MS-OXCTABL] section 2.2.1.1";"ptagInstID"
+"0x674E";"PidTagInstanceNum";"Contains an identifier for a single instance of a row in the table.";"PtypInteger32, 0x0003";"ProviderDefinedNonTransmittable";"[MS-OXCTABL] section 2.2.1.2";"ptagInstanceNum"
+"0x674F";"PidTagAddressBookMessageId";"Contains the Short-term Message ID (MID) ([MS-OXCDATA] section 2.2.1.2) of the first message in the local site's offline address book public folder.";"PtypInteger64, 0x0014";"ProviderDefinedNonTransmittable";"[MS-OXCSTOR] section 2.2.2.2.2";"ptagAddrbookMID"
+"0x67A4";"PidTagChangeNumber";"Contains a structure that identifies the last change to the message or folder that is currently being synchronized.";"PtypInteger64, 0x0014";"Sync";"[MS-OXCFXICS] section 2.2.1.2.3";"ptagCn"
+"0x67AA";"PidTagAssociated";"Specifies whether the message being synchronized is an FAI message.";"PtypBoolean, 0x000B";"Sync";"[MS-OXCFXICS] section 2.2.1.5";"ptagAssociated"
+"0x6800";"PidTagOfflineAddressBookName";"Contains the display name of the address list.";"PtypString, 0x001F";"Offline Address Book Properties";"[MS-OXOAB] section 2.12.3";"PR_OAB_NAME, PR_OAB_NAME_W"
+"0x6801";"PidTagOfflineAddressBookSequence";"Contains the sequence number of the OAB. ";"PtypInteger32, 0x0003";"Offline Address Book Properties";"[MS-OXOAB] section 2.12.4";"PR_OAB_SEQUENCE"
+"0x6801";"PidTagVoiceMessageDuration";"Specifies the length of the attached audio message, in seconds.";"PtypInteger32, 0x0003";"Unified Messaging ";"[MS-OXOUM] section 2.2.5.3";"InternalSchemaVoiceMessageDuration"
+"0x6802";"PidTagOfflineAddressBookContainerGuid";"A string-formatted GUID that represents the address list container object. ";"PtypString8, 0x001E";"Offline Address Book Properties";"[MS-OXOAB] section 2.12.1";"PR_OAB_CONTAINER_GUID, PR_OAB_CONTAINER_GUID_W"
+"0x6802";"PidTagRwRulesStream";"Contains additional rule data about the Rule FAI message.";"PtypBinary, 0x0102";"Message Class Defined Transmittable";"[MS-OXORULE] section 2.2.9.3";"PR_RW_RULES_STREAM"
+"0x6802";"PidTagSenderTelephoneNumber";"Contains the telephone number of the caller associated with a voice mail message.";"PtypString, 0x001F";"Unified Messaging";"[MS-OXOUM] section 2.2.5.1";"InternalSchemaSenderTelephoneNumber"
+"0x6803";"PidTagOfflineAddressBookMessageClass";"Contains the message class for full OAB messages.";"PtypInteger32, 0x0003";"Offline Address Book Properties";"[MS-OXPFOAB] section 2.2.2.1.1";"PR_OAB_MESSAGE_CLASS"
+"0x6803";"PidTagVoiceMessageSenderName";"Specifies the name of the caller who left the attached voice message, as provided by the voice network's caller ID system.";"PtypString, 0x001F";"Unified Messaging ";"[MS-OXOUM] section 2.2.5.5";"InternalSchemaVoiceMessageSenderName"
+"0x6804";"PidTagFaxNumberOfPages";"Contains the number of pages in a Fax object.";"PtypInteger32, 0x0003";"Unified Messaging";"[MS-OXOUM] section 2.2.5.7";"InternalSchemaFaxNumberOfPages"
+"0x6804";"PidTagOfflineAddressBookDistinguishedName";"Contains the DN of the address list that is contained in the OAB message. ";"PtypString8, 0x001E";"Offline Address Book Properties";"[MS-OXOAB] section 2.12.2";"PR_OAB_DN, PR_OAB_DN_W"
+"0x6805";"PidTagOfflineAddressBookTruncatedProperties";"Contains a list of the property tags that have been truncated or limited by the server.";"PtypMultipleInteger32, 0x1003";"Offline Address Book Properties";"[MS-OXOAB] section 2.9.2.2";"PR_OAB_TRUNCATED_PROPS"
+"0x6805";"PidTagVoiceMessageAttachmentOrder";"Contains a list of file names for the audio file attachments that are to be played as part of a message.";"PtypString, 0x001F";"Unified Messaging ";"[MS-OXOUM] section 2.2.5.9";"InternalSchemaVoiceMessageAttachmentOrder"
+"0x6806";"PidTagCallId";"Contains a unique identifier associated with the phone call.";"PtypString, 0x001F";"Unified Messaging";"[MS-OXOUM] section 2.2.5.11";"InternalSchemaCallID"
+"0x6820";"PidTagReportingMessageTransferAgent";"Contains the value of the Reporting-MTA field for a delivery status notification, as specified in [RFC3464].";"PtypString, 0x001F";"Email";"[MS-OXOMSG] section 2.2.2.35";"ptagDsnReportingMta"
+"0x6834";"PidTagSearchFolderLastUsed";"Contains the last time, in UTC, that the folder was accessed.";"PtypInteger32, 0x0003";"Search";"[MS-OXOSRCH] section 2.2.1.2.4";"PR_WB_SF_LAST_USED"
+"0x683A";"PidTagSearchFolderExpiration";"Contains the time, in UTC, at which the search folder container will be stale and has to be updated or recreated.";"PtypInteger32, 0x0003";"Search";"[MS-OXOSRCH] section 2.2.1.2.5";"PR_WB_SF_EXPIRATION"
+"0x6841";"PidTagScheduleInfoResourceType";"Set to 0x00000000 when sending and is ignored on receipt.";"PtypInteger32, 0x0003";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.4.2";"PR_SCHDINFO_RESOURCE_TYPE"
+"0x6841";"PidTagSearchFolderTemplateId";"Contains the ID of the template that is being used for the search. ";"PtypInteger32, 0x0003";"Search";"[MS-OXOSRCH] section 2.2.1.2.2";"PR_WB_SF_TEMPLATE_ID"
+"0x6842";"PidTagScheduleInfoDelegatorWantsCopy";"Indicates whether the delegator wants to receive copies of the meeting-related objects that are sent to the delegate.";"PtypBoolean, 0x000B";"Free/Busy Properties";"[MS-OXODLGT] section 2.2.2.2.1";"PR_SCHDINFO_BOSS_WANTS_COPY"
+"0x6842";"PidTagSearchFolderId";"Contains a GUID that identifies the search folder. ";"PtypBinary, 0x0102";"Search";"[MS-OXOSRCH] section 2.2.1.2.1";"PR_WB_SF_ID"
+"0x6842";"PidTagWlinkGroupHeaderID";"Specifies the ID of the navigation shortcut that groups other navigation shortcuts.";"PtypBinary, 0x0102";"Configuration";"[MS-OXOCFG] section 2.2.9.3";
+"0x6843";"PidTagScheduleInfoDontMailDelegates";"Contains a value set to TRUE by the client, regardless of user input.";"PtypBoolean, 0x000B";"Free/Busy Properties";"[MS-OXODLGT] section 2.2.2.2.7";"PR_SCHDINFO_DONT_MAIL_DELEGATES"
+"0x6844";"PidTagScheduleInfoDelegateNames";"Specifies the names of the delegates.";"PtypMultipleString, 0x101F";"Free/Busy Properties";"[MS-OXODLGT] section 2.2.2.2.3";"PR_SCHDINFO_DELEGATE_NAMES"
+"0x6844";"PidTagSearchFolderRecreateInfo";"This property is not to be used.";"PtypBinary, 0x0102";"Search";"[MS-OXOSRCH] section 2.2.1.2.9";"PR_WB_SF_RECREATE_INFO"
+"0x6845";"PidTagScheduleInfoDelegateEntryIds";"Specifies the EntryIDs of the delegates. ";"PtypMultipleBinary, 0x1102";"Free/Busy Properties";"[MS-OXODLGT] section 2.2.2.2.5";"PR_SCHDINFO_DELEGATE_ENTRYIDS"
+"0x6845";"PidTagSearchFolderDefinition";"Specifies the search criteria and search options. ";"PtypBinary, 0x0102";"Search";"[MS-OXOSRCH] section 2.2.1.2.8";"PR_WB_SF_DEFINITION"
+"0x6846";"PidTagGatewayNeedsToRefresh";"This property is deprecated and SHOULD NOT be used.";"PtypBoolean, 0x000B";"MessageClassDefinedTransmittable";"[MS-OXOPFFB] section 2.2.1.4.1";"PR_GATEWAY_NEEDS_TO_REFRESH"
+"0x6846";"PidTagSearchFolderStorageType";"Contains flags that specify the binary large object (BLOB) data that appears in the PidTagSearchFolderDefinition (section 2.988) property.";"PtypInteger32, 0x0003";"Search";"[MS-OXOSRCH] section 2.2.1.2.6";"PR_WB_SF_STORAGE_TYPE"
+"0x6847";"PidTagFreeBusyPublishStart";"Specifies the start time, in UTC, of the publishing range.";"PtypInteger32, 0x0003";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.2.9";"PR_FREEBUSY_PUBLISH_START"
+"0x6847";"PidTagSearchFolderTag";"Contains the value of the SearchFolderTag sub-property of the PidTagExtendedFolderFlags (section 2.691) property of the search folder container. ";"PtypInteger32, 0x0003";"Search";"[MS-OXOSRCH] section 2.2.1.2.3";"PR_WB_SF_TAG"
+"0x6847";"PidTagWlinkSaveStamp";"Specifies an integer that allows a client to identify with a high probability whether the navigation shortcut was saved by the current client session.";"PtypInteger32, 0x0003";"Configuration";"[MS-OXOCFG] section 2.2.9.4";
+"0x6848";"PidTagFreeBusyPublishEnd";"Specifies the end time, in UTC, of the publishing range.";"PtypInteger32, 0x0003";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.2.10";"PR_FREEBUSY_PUBLISH_END"
+"0x6848";"PidTagSearchFolderEfpFlags";"Specifies flags that control how a folder is displayed.";"PtypInteger32, 0x0003";"Search";"[MS-OXOSRCH] section 2.2.1.2.7";"PR_WB_SF_EFP_FLAGS"
+"0x6849";"PidTagFreeBusyMessageEmailAddress";"Specifies the email address of the user or resource to whom this free/busy message applies.";"PtypString, 0x001F";"MessageClassDefinedTransmittable";"[MS-OXOPFFB] section 2.2.1.2.12";"PR_FREEBUSY_EMA"
+"0x6849";"PidTagWlinkType";"Specifies the type of navigation shortcut.";"PtypInteger32, 0x0003";"Configuration";"[MS-OXOCFG] section 2.2.9.5";"PR_WLINK_TYPE "
+"0x684A";"PidTagScheduleInfoDelegateNamesW";"Specifies the names of the delegates in Unicode.";"PtypMultipleString, 0x101F";"Free/Busy Properties";"[MS-OXODLGT] section 2.2.2.2.4";"PR_SCHDINFO_DELEGATE_NAMES_W, ptagDelegateNames"
+"0x684A";"PidTagWlinkFlags";"Specifies conditions associated with the shortcut.";"PtypInteger32, 0x0003";"Configuration";"[MS-OXOCFG] section 2.2.9.6";"PR_WLINK_FLAGS "
+"0x684B";"PidTagScheduleInfoDelegatorWantsInfo";"Indicates whether the delegator wants to receive informational updates.";"PtypBoolean, 0x000B";"Free/Busy Properties";"[MS-OXODLGT] section 2.2.2.2.2";"PR_SCHDINFO_BOSS_WANTS_INFO"
+"0x684B";"PidTagWlinkOrdinal";"Specifies a variable-length binary property to be used to sort shortcuts lexicographically.";"PtypBinary, 0x0102";"Configuration";"[MS-OXOCFG] section 2.2.9.7";"PR_WLINK_ORDINAL "
+"0x684C";"PidTagWlinkEntryId";"Specifies the EntryID of the folder pointed to by the shortcut.";"PtypBinary, 0x0102";"Configuration";"[MS-OXOCFG] section 2.2.9.8";"PR_WLINK_ENTRYID "
+"0x684D";"PidTagWlinkRecordKey";"Specifies the value of PidTagRecordKey property (section 2.910) of the folder pointed to by the shortcut.";"PtypBinary, 0x0102";"Configuration";"[MS-OXOCFG] section 2.2.9.9";"PR_WLINK_RECKEY "
+"0x684E";"PidTagWlinkStoreEntryId";"Specifies the value of the PidTagStoreEntryId property (section 2.1028) of the folder pointed to by the shortcut.";"PtypBinary, 0x0102";"Configuration";"[MS-OXOCFG] section 2.2.9.10";"PR_WLINK_STORE_ENTRYID "
+"0x684F";"PidTagScheduleInfoMonthsMerged";"Specifies the months for which free/busy data of type busy or OOF is present in the free/busy message. ";"PtypMultipleInteger32, 0x1003";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.2.7";"PR_SCHDINFO_MONTHS_MERGED"
+"0x684F";"PidTagWlinkFolderType";"Specifies the type of folder pointed to by the shortcut.";"PtypBinary, 0x0102";"Configuration";"[MS-OXOCFG] section 2.2.9.11";"PR_WLINK_FOLDER_TYPE"
+"0x6850";"PidTagScheduleInfoFreeBusyMerged";"Specifies the blocks for which free/busy data of type busy or OOF is present in the free/busy message. ";"PtypMultipleBinary, 0x1102";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.2.8";"PR_SCHDINFO_FREEBUSY_MERGED"
+"0x6850";"PidTagWlinkGroupClsid";"Specifies the value of the PidTagWlinkGroupHeaderID property (section 2.1070) of the group header associated with the shortcut.";"PtypBinary, 0x0102";"Configuration";"[MS-OXOCFG] section 2.2.9.12";"PR_WLINK_GROUP_CLSID "
+"0x6851";"PidTagScheduleInfoMonthsTentative";"Specifies the months for which free/busy data of type tentative is present in the free/busy message. ";"PtypMultipleInteger32, 0x1003";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.2.1";"PR_SCHDINFO_MONTHS_TENTATIVE"
+"0x6851";"PidTagWlinkGroupName";"Specifies the value of the PidTagNormalizedSubject (section 2.812) of the group header associated with the shortcut.";"PtypString, 0x001F";"Configuration";"[MS-OXOCFG] section 2.2.9.13";"PR_WLINK_GROUP_NAME "
+"0x6852";"PidTagScheduleInfoFreeBusyTentative";"Specifies the blocks of times for which the free/busy status is set to a value of tentative.";"PtypMultipleBinary, 0x1102";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.2.2";"PR_SCHDINFO_FREEBUSY_TENTATIVE"
+"0x6852";"PidTagWlinkSection";"Specifies the section where the shortcut will be grouped. ";"PtypInteger32, 0x0003";"Configuration";"[MS-OXOCFG] section 2.2.9.14";"PR_WLINK_SECTION "
+"0x6853";"PidTagScheduleInfoMonthsBusy";"Specifies the months for which free/busy data of type busy is present in the free/busy message.";"PtypMultipleInteger32, 0x1003";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.2.3";"PR_SCHDINFO_MONTHS_BUSY"
+"0x6853";"PidTagWlinkCalendarColor";"Specifies the background color of the calendar.";"PtypInteger32, 0x0003";"Configuration";"[MS-OXOCFG] section 2.2.9.15";"PR_WLINK_CALENDAR_COLOR "
+"0x6854";"PidTagScheduleInfoFreeBusyBusy";"Specifies the blocks of time for which the free/busy status is set to a value of busy.";"PtypMultipleBinary, 0x1102";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.2.4";"PR_SCHDINFO_FREEBUSY_BUSY"
+"0x6854";"PidTagWlinkAddressBookEID";"Specifies the value of the PidTagEntryId property (section 2.683) of the user to whom the folder belongs.";"PtypBinary, 0x0102";"Configuration";"[MS-OXOCFG] section 2.2.9.16";"PR_WLINK_ABEID"
+"0x6855";"PidTagScheduleInfoMonthsAway";"Specifies the months for which free/busy data of type OOF is present in the free/busy message.";"PtypMultipleInteger32, 0x1003";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.2.5";"PR_SCHDINFO_MONTHS_OOF"
+"0x6856";"PidTagScheduleInfoFreeBusyAway";"Specifies the times for which the free/busy status is set a value of OOF.";"PtypMultipleBinary, 0x1102";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.2.6";"PR_SCHDINFO_FREEBUSY_OOF"
+"0x6868";"PidTagFreeBusyRangeTimestamp";"Specifies the time, in UTC, that the data was published.";"PtypTime, 0x0040";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.2.11";"PR_FREEBUSY_RANGE_TIMESTAMP"
+"0x6869";"PidTagFreeBusyCountMonths";"Contains an integer value used to calculate the start and end dates of the range of free/busy data to be published to the public folders.";"PtypInteger32, 0x0003";"MessageClassDefinedTransmittable";"[MS-OXOCAL] section 2.2.12.1";"PR_FREEBUSY_COUNT_MONTHS"
+"0x686A";"PidTagScheduleInfoAppointmentTombstone";"Contains a list of tombstones, where each tombstone represents a Meeting object that has been declined.";"PtypBinary, 0x0102";"Free/Busy Properties";"[MS-OXOCAL] section 2.2.12.5";"PR_SCHDINFO_APPT_TOMBSTONE"
+"0x686B";"PidTagDelegateFlags";"Indicates whether delegates can view Message objects that are marked as private.";"PtypMultipleInteger32, 0x1003";"MessageClassDefinedTransmittable";"[MS-OXODLGT] section 2.2.2.2.6";"PR_DELEGATE_FLAGS, ptagDelegateFlags"
+"0x686C";"PidTagScheduleInfoFreeBusy";"This property is deprecated and is not to be used.";"PtypBinary, 0x0102";"Free/Busy Properties";"[MS-OXOPFFB] section 2.2.1.4.3";"PR_SCHDINFO_FREEBUSY"
+"0x686D";"PidTagScheduleInfoAutoAcceptAppointments";"Indicates whether a client or server is to automatically respond to all meeting requests for the attendee or resource.";"PtypBoolean, 0x000B";"Free/Busy Properties";"[MS-OXOCAL] section 2.2.12.2";"PR_SCHDINFO_AUTO_ACCEPT_APPTS"
+"0x686E";"PidTagScheduleInfoDisallowRecurringAppts";"Indicates whether a client or server, when automatically responding to meeting requests, is to decline Meeting Request objects that represent a recurring series.";"PtypBoolean, 0x000B";"Free/Busy Properties";"[MS-OXOCAL] section 2.2.12.3";"PR_SCHDINFO_DISALLOW_RECURRING_APPTS"
+"0x686F";"PidTagScheduleInfoDisallowOverlappingAppts";"Indicates whether a client or server, when automatically responding to meeting requests, is to decline Meeting Request objects that overlap with previously scheduled events.";"PtypBoolean, 0x000B";"Free/Busy Properties";"[MS-OXOCAL] section 2.2.12.4";"PR_SCHDINFO_DISALLOW_OVERLAPPING_APPTS"
+"0x6890";"PidTagWlinkClientID";"Specifies the Client ID that allows the client to determine whether the shortcut was created on the current machine/user via an equality test.";"PtypBinary, 0x0102";"Configuration";"[MS-OXOCFG] section 2.2.9.18";"PR_WLINK_CLIENTID "
+"0x6891";"PidTagWlinkAddressBookStoreEID";"Specifies the value of the PidTagStoreEntryId property (section 2.1028) of the current user (not the owner of the folder).";"PtypBinary, 0x0102";"Configuration";"[MS-OXOCFG] section 2.2.9.17";"PR_WLINK_AB_EXSTOREEID "
+"0x6892";"PidTagWlinkROGroupType";"Specifies the type of group header.";"PtypInteger32, 0x0003";"Configuration";"[MS-OXOCFG] section 2.2.9.19";"PR_WLINK_RO_GROUP_TYPE "
+"0x7001";"PidTagViewDescriptorBinary";"Contains view definitions.";"PtypBinary, 0x0102";"MessageClassDefinedTransmittable";"[MS-OXOCFG] section 2.2.6.1";"PR_VD_BINARY"
+"0x7002";"PidTagViewDescriptorStrings";"Contains view definitions in string format.";"PtypString, 0x001F";"MessageClassDefinedTransmittable";"[MS-OXOCFG] section 2.2.6.3";"PR_VD_STRINGS, PR_VD_STRINGS_W"
+"0x7006";"PidTagViewDescriptorName";"Contains the view descriptor name.";"PtypString, 0x001F";"MessageClassDefinedTransmittable";"[MS-OXOCFG] section 2.2.6.2";"PR_VD_NAME, PR_VD_NAME_W"
+"0x7007";"PidTagViewDescriptorVersion";"Contains the View Descriptor version.";"PtypInteger32, 0x0003";"Miscellaneous Properties";"[MS-OXOCFG] section 2.2.6.4";"PR_VD_VERSION"
+"0x7C06";"PidTagRoamingDatatypes";"Contains a bitmask that indicates which stream properties exist on the message.";"PtypInteger32, 0x0003";"Configuration";"[MS-OXOCFG] section 2.2.2.1";"PR_ROAMING_DATATYPES"
+"0x7C07";"PidTagRoamingDictionary";"Contains a dictionary stream, as specified in [MS-OXOCFG] section 2.2.5.1.";"PtypBinary, 0x0102";"Configuration";"[MS-OXOCFG] section 2.2.2.2";"PR_ROAMING_DICTIONARY"
+"0x7C08";"PidTagRoamingXmlStream";"Contains an XML stream, as specified in [MS-OXOCFG] section 2.2.5.2.";"PtypBinary, 0x0102";"Configuration";"[MS-OXOCFG] section 2.2.2.3";"PR_ROAMING_XMLSTREAM"
+"0x7C24";"PidTagOscSyncEnabled";"Specifies whether contact synchronization with an external source is handled by the server.";" PtypBoolean, 0x000B";"Contact Properties";"[MS-OXOCNTC] section 2.2.1.9.7";"PR_OSC_SYNC_ENABLEDONSERVER "
+"0x7D01";"PidTagProcessed";"Indicates whether a client has already processed a received task communication.";"PtypBoolean, 0x000B";"Calendar";"[MS-OXOCAL] section 2.2.5.7";"PR_PROCESSED"
+"0x7FF9";"PidTagExceptionReplaceTime";"Indicates the original date and time, in UTC, at which the instance in the recurrence pattern would have occurred if it were not an exception.";"PtypTime, 0x0040";"MessageClassDefinedNonTransmittable";"[MS-OXOCAL] section 2.2.10.1.6";"PR_EXCEPTION_REPLACETIME"
+"0x7FFA";"PidTagAttachmentLinkId";"Contains the type of Message object to which an attachment is linked.";"PtypInteger32, 0x0003";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.22";"PR_ATTACHMENT_LINKID, ptagAttachmentLinkId"
+"0x7FFB";"PidTagExceptionStartTime";"Contains the start date and time of the exception in the local time zone of the computer when the exception is created.";"PtypTime, 0x0040";"MessageClassDefinedNonTransmittable";"[MS-OXOCAL] section 2.2.10.1.4";"PR_EXCEPTION_STARTTIME, ptagExceptionStartTime"
+"0x7FFC";"PidTagExceptionEndTime";"Contains the end date and time of the exception in the local time zone of the computer when the exception is created.";"PtypTime, 0x0040";"MessageClassDefinedNonTransmittable";"[MS-OXOCAL] section 2.2.10.1.5";"PR_EXCEPTION_ENDTIME, ptagExceptionEndTime"
+"0x7FFD";"PidTagAttachmentFlags";"Indicates special handling for an Attachment object.";"PtypInteger32, 0x0003";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.23";"PR_ATTACHMENT_FLAGS, ptagAttachmentFlags"
+"0x7FFE";"PidTagAttachmentHidden";"Indicates whether an Attachment object is hidden from the end user.";"PtypBoolean, 0x000B";"Message Attachment Properties";"[MS-OXCMSG] section 2.2.2.24";"PR_ATTACHMENT_HIDDEN"
+"0x7FFF";"PidTagAttachmentContactPhoto";"Indicates that a contact photo attachment is attached to a Contact object.";"PtypBoolean, 0x000B";"Message Attachment Properties";"[MS-OXOCNTC] section 2.2.1.8.2";"PR_ATTACHMENT_CONTACTPHOTO"
+"0x8004";"PidTagAddressBookFolderPathname";"This property is deprecated and is to be ignored.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.6.4";"PR_EMS_AB_FOLDER_PATHNAME, PR_EMS_AB_FOLDER_PATHNAME_A, PR_EMS_AB_FOLDER_PATHNAME_W"
+"0x8005";"PidTagAddressBookManager";"Contains one row that references the mail user's manager.";"PtypObject, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.5.1";" Alternate names: PR_EMS_AB_MANAGER, PR_EMS_AB_MANAGER_A, PR_EMS_AB_MANAGER_W"
+"0x8005";"PidTagAddressBookManagerDistinguishedName";"Contains the DN of the mail user's manager.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.4.9";"PR_EMS_AB_MANAGER_T"
+"0x8006";"PidTagAddressBookHomeMessageDatabase";"Contains the DN expressed in the X500 DN format. This property is returned from a name service provider interface (NSPI) server as a PtypEmbeddedTable. Otherwise, the data type is PtypString8.";"PtypString8, 0x001EPtypEmbeddedTable, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.4.37";"PR_EMS_AB_HOME_MDB, PR_EMS_AB_HOME_MDB_A, PR_EMS_AB_HOME_MDB_W"
+"0x8008";"PidTagAddressBookIsMemberOfDistributionList";"Lists all of the distribution lists for which the object is a member. This property is returned from an NSPI server as a PtypEmbeddedTable. Otherwise, the data type is PtypString8.";"PtypString8, 0x001E; PtypEmbeddedTable, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.5.3";"PR_EMS_AB_IS_MEMBER_OF_DL, PR_EMS_AB_IS_MEMBER_OF_DL_A, PR_EMS_AB_IS_MEMBER_OF_DL_W"
+"0x8009";"PidTagAddressBookMember";"Contains the members of the distribution list.";"PtypEmbeddedTable, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.6.1";"PR_EMS_AB_MEMBER, PR_EMS_AB_MEMBER_A, PR_EMS_AB_MEMBER_W"
+"0x800C";"PidTagAddressBookOwner";"Contains one row that references the distribution list's owner.";"PtypEmbeddedTable, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.6.2";"PR_EMS_AB_OWNER_O"
+"0x800E";"PidTagAddressBookReports";"Lists all of the mail user??s direct reports.";"PtypEmbeddedTable, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.5.2";"PR_EMS_AB_REPORTS, PR_EMS_AB_REPORTS_A, PR_EMS_AB_REPORTS_W"
+"0x800F";"PidTagAddressBookProxyAddresses";"Contains alternate email addresses for the Address Book object.";"PtypMultipleString, 0x101F";"Address Book";"[MS-OXOABK] section 2.2.3.23";"PR_EMS_AB_PROXY_ADDRESSES, PR_EMS_AB_PROXY_ADDRESSES_A, PR_EMS_AB_PROXY_ADDRESSES_W"
+"0x8011";"PidTagAddressBookTargetAddress";"Contains the foreign system email address of an Address Book object.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.22";"PR_EMS_AB_TARGET_ADDRESS, PR_EMS_AB_TARGET_ADDRESS_A, PR_EMS_AB_TARGET_ADDRESS_W"
+"0x8015";"PidTagAddressBookPublicDelegates";"Contains a list of mail users who are allowed to send email on behalf of the mailbox owner.";"PtypEmbeddedTable, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.5.5";"PR_EMS_AB_PUBLIC_DELEGATES, PR_EMS_AB_PUBLIC_DELEGATES_A, PR_EMS_AB_PUBLIC_DELEGATES_W"
+"0x8024";"PidTagAddressBookOwnerBackLink";"Contains a list of the distribution lists owned by a mail user.";"PtypEmbeddedTable, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.5.4";"PR_EMS_AB_OWNER_BL_O"
+"0x802D";"PidTagAddressBookExtensionAttribute1";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_1, PR_EMS_AB_EXTENSION_ATTRIBUTE_1_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_1_W"
+"0x802E";"PidTagAddressBookExtensionAttribute2";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_2, PR_EMS_AB_EXTENSION_ATTRIBUTE_2_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_2_W"
+"0x802F";"PidTagAddressBookExtensionAttribute3";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_3, PR_EMS_AB_EXTENSION_ATTRIBUTE_3_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_3_W"
+"0x8030";"PidTagAddressBookExtensionAttribute4";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_4, PR_EMS_AB_EXTENSION_ATTRIBUTE_4_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_4_W"
+"0x8031";"PidTagAddressBookExtensionAttribute5";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_5, PR_EMS_AB_EXTENSION_ATTRIBUTE_5_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_5_W"
+"0x8032";"PidTagAddressBookExtensionAttribute6";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_6, PR_EMS_AB_EXTENSION_ATTRIBUTE_6_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_6_W"
+"0x8033";"PidTagAddressBookExtensionAttribute7";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_7, PR_EMS_AB_EXTENSION_ATTRIBUTE_7_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_7_W"
+"0x8034";"PidTagAddressBookExtensionAttribute8";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_8, PR_EMS_AB_EXTENSION_ATTRIBUTE_8_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_8_W"
+"0x8035";"PidTagAddressBookExtensionAttribute9";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_9, PR_EMS_AB_EXTENSION_ATTRIBUTE_9_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_9_W"
+"0x8036";"PidTagAddressBookExtensionAttribute10";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_10, PR_EMS_AB_EXTENSION_ATTRIBUTE_10_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_10_W"
+"0x803C";"PidTagAddressBookObjectDistinguishedName";"Contains the DN of the Address Book object.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.15";"PR_EMS_AB_OBJ_DIST_NAME, PR_EMS_AB_OBJ_DIST_NAME_A, PR_EMS_AB_OBJ_DIST_NAME_W"
+"0x806A";"PidTagAddressBookDeliveryContentLength";"Specifies the maximum size, in bytes, of a message that a recipient can receive.";"PtypInteger32, 0x0003";"Address Book";"[MS-OXOABK] section 2.2.3.27";"PR_EMS_AB_DELIV_CONT_LENGTH"
+"0x8073";"PidTagAddressBookDistributionListMemberSubmitAccepted";"Indicates that delivery restrictions exist for a recipient.";"PtypObject, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.4.44";"PR_EMS_AB_DL_MEM_SUBMIT_PERMS_BL_O"
+"0x8170";"PidTagAddressBookNetworkAddress";"Contains a list of names by which a server is known to the various transports in use by the network.";"PtypMultipleString, 0x101F";"Address Book";"[MS-OXOABK] section 2.2.4.38";"PR_EMS_AB_NETWORK_ADDRESS, PR_EMS_AB_NETWORK_ADDRESS_A, PR_EMS_AB_NETWORK_ADDRESS_W"
+"0x8C57";"PidTagAddressBookExtensionAttribute11";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_11, PR_EMS_AB_EXTENSION_ATTRIBUTE_11_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_11_W"
+"0x8C58";"PidTagAddressBookExtensionAttribute12";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_12, PR_EMS_AB_EXTENSION_ATTRIBUTE_12_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_12_W"
+"0x8C59";"PidTagAddressBookExtensionAttribute13";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_13, PR_EMS_AB_EXTENSION_ATTRIBUTE_13_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_13_W"
+"0x8C60";"PidTagAddressBookExtensionAttribute14";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_14, PR_EMS_AB_EXTENSION_ATTRIBUTE_14_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_14_W"
+"0x8C61";"PidTagAddressBookExtensionAttribute15";"Contains custom values defined and populated by the organization that modified the display templates.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.34";"PR_EMS_AB_EXTENSION_ATTRIBUTE_15, PR_EMS_AB_EXTENSION_ATTRIBUTE_15_A, PR_EMS_AB_EXTENSION_ATTRIBUTE_15_W"
+"0x8C6A";"PidTagAddressBookX509Certificate";"Contains the ASN_1 DER encoded X.509 certificates for the mail user.";"PtypMultipleBinary, 0x1102";"Address Book";"[MS-OXOABK] section 2.2.4.35";"PR_EMS_AB_X509_CERT"
+"0x8C6D";"PidTagAddressBookObjectGuid";"Contains a GUID that identifies an Address Book object.";"PtypBinary, 0x0102";"Address Book";"[MS-OXOABK] section 2.2.3.25";"PR_EMS_AB_OBJECT_GUID"
+"0x8C8E";"PidTagAddressBookPhoneticGivenName";"Contains the phonetic representation of the PidTagGivenName property (section 2.714).";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.4.10";"PR_EMS_AB_PHONETIC_GIVEN_NAME, PR_EMS_AB_PHONETIC_GIVEN_NAME_A, PR_EMS_AB_PHONETIC_GIVEN_NAME_W"
+"0x8C8F";"PidTagAddressBookPhoneticSurname";"Contains the phonetic representation of the PidTagSurname property (section 2.1036).";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.4.11";"PR_EMS_AB_PHONETIC_SURNAME, PR_EMS_AB_PHONETIC_SURNAME_A, PR_EMS_AB_PHONETIC_SURNAME_W"
+"0x8C90";"PidTagAddressBookPhoneticDepartmentName";"Contains the phonetic representation of the PidTagDepartmentName property (section 2.672).";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.4.13";"PR_EMS_AB_PHONETIC_DEPARTMENT_NAME, PR_EMS_AB_PHONETIC_DEPARTMENT_NAME_A, PR_EMS_AB_PHONETIC_DEPARTMENT_NAME_W"
+"0x8C91";"PidTagAddressBookPhoneticCompanyName";"Contains the phonetic representation of the PidTagCompanyName property (section 2.639).";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.4.12";"PR_EMS_AB_PHONETIC_COMPANY_NAME, PR_EMS_AB_PHONETIC_COMPANY_NAME_A, PR_EMS_AB_PHONETIC_COMPANY_NAME_W"
+"0x8C92";"PidTagAddressBookPhoneticDisplayName";"Contains the phonetic representation of the PidTagDisplayName property (section 2.676).";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.3.9";"PR_EMS_AB_PHONETIC_DISPLAY_NAME, PR_EMS_AB_PHONETIC_DISPLAY_NAME_A, PR_EMS_AB_PHONETIC_DISPLAY_NAME_W"
+"0x8C93";"PidTagAddressBookDisplayTypeExtended";"Contains a value that indicates how to display an Address Book object in a table or as a recipient on a message.";"PtypInteger32, 0x0003";"Address Book";"[MS-OXOABK] section 2.2.3.35";"PR_EMS_AB_DISPLAY_TYPE_EX"
+"0x8C94";"PidTagAddressBookHierarchicalShowInDepartments";"Lists all Department objects of which the mail user is a member.";"PtypEmbeddedTable, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.5.6";"PR_EMS_AB_HAB_SHOW_IN_DEPARTMENTS"
+"0x8C96";"PidTagAddressBookRoomContainers";"Contains a list of DNs that represent the address book containers that hold Resource objects, such as conference rooms and equipment.";"PtypMultipleString, 0x101F";"Address Book";"[MS-OXOABK] section 2.2.7.1";"PR_EMS_AB_ROOM_CONTAINERS, PR_EMS_AB_ROOM_CONTAINERS_A, PR_EMS_AB_ROOM_CONTAINERS_W"
+"0x8C97";"PidTagAddressBookHierarchicalDepartmentMembers";"Contains all of the mail users that belong to this department.";"PtypEmbeddedTable, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.8.3";"PR_EMS_AB_HAB_DEPARTMENT_MEMBERS"
+"0x8C98";"PidTagAddressBookHierarchicalRootDepartment";"Contains the distinguished name (DN) of either the root Department object or the root departmental group in the department hierarchy for the organization.";"PtypString8, 0x001E";"Address Book";"[MS-OXOABK] section 2.2.7.2";"PR_EMS_AB_HAB_ROOT_DEPARTMENT"
+"0x8C99";"PidTagAddressBookHierarchicalParentDepartment";"Contains all of the departments to which this department is a child.";"PtypEmbeddedTable, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.8.2";"PR_EMS_AB_HAB_PARENT_DEPARTMENT"
+"0x8C9A";"PidTagAddressBookHierarchicalChildDepartments";"Contains the child departments in a hierarchy of departments.";"PtypEmbeddedTable, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.8.1";"PR_EMS_AB_HAB_CHILD_DEPARTMENTS"
+"0x8C9E";"PidTagThumbnailPhoto";"Contains the mail user's photo in .jpg format.";"PtypBinary, 0x0102";"Address Book";"[MS-OXOABK] section 2.2.4.40";"PR_EMS_AB_THUMBNAIL_PHOTO"
+"0x8CA0";"PidTagAddressBookSeniorityIndex";"Contains a signed integer that specifies the seniority order of Address Book objects that represent members of a department and are referenced by a Department object or departmental group, with larger values specifying members that are more senior.";"PtypInteger32, 0x0003";"Address Book";"[MS-OXOABK] section 2.2.3.24";
+"0x8CA8";"PidTagAddressBookOrganizationalUnitRootDistinguishedName";"Contains the DN of the Organization object of the mail user's organization.";"PtypString, 0x001F";"Address Book";"[MS-OXOABK] section 2.2.4.39";"PR_EMS_AB_ORG_UNIT_ROOT_DN, msExchOURoot"
+"0x8CAC";"PidTagAddressBookSenderHintTranslations";"Contains the locale ID and translations of the default mail tip.";"PtypMultipleString, 0x101F";"Address Book";"[MS-OXOABK] section 2.2.3.26";"PR_EMS_AB_DL_SENDER_HINT_TRANSLATIONS_W"
+"0x8CB5";"PidTagAddressBookModerationEnabled";"Indicates whether moderation is enabled for the mail user or distribution list.";"PtypBoolean, 0x000B";"Address Book";"[MS-OXOABK] section 2.2.3.28";" Alternate names: PR_EMS_AB_ENABLE_MODERATION"
+"0x8CC2";"PidTagSpokenName";"Contains a recording of the mail user's name pronunciation.";"PtypBinary, 0x0102";"Address Book";"[MS-OXOABK] section 2.2.4.41";"PR_EMS_AB_UM_SPOKEN_NAME"
+"0x8CD8";"PidTagAddressBookAuthorizedSenders";"Indicates whether delivery restrictions exist for a recipient.";"PtypObject, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.4.42";"PR_EMS_AB_AUTH_ORIG"
+"0x8CD9";"PidTagAddressBookUnauthorizedSenders";"Indicates whether delivery restrictions exist for a recipient.";"PtypObject, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.4.43";"PR_EMS_AB_UNAUTH_ORIG"
+"0x8CDA";"PidTagAddressBookDistributionListMemberSubmitRejected";"Indicates that delivery restrictions exist for a recipient.";"PtypObject, 0x000D";"Address Book";"[MS-OXOABK] section 2.2.4.45";"PR_EMS_AB_DL_MEM_SUBMIT_PERMS"
+"0x8CDB";"PidTagAddressBookDistributionListRejectMessagesFromDLMembers";"Indicates that delivery restrictions exist for a recipient.";"PtypObject, 0x000D";"Address book";"[MS-OXOAB] section 2.9.2.2";"PR_EMS_AB_DL_MEM_REJECT_PERMS"
+"0x8CDD";"PidTagAddressBookHierarchicalIsHierarchicalGroup";"Indicates whether the distribution list represents a departmental group.";"PtypBoolean, 0x000B";"Address Book";"[MS-OXOABK] section 2.2.6.5";"PR_EMS_AB_HAB_IS_HIERARCHICAL_GROUP, PR_EMS_AB_IS_ORGANIZATIONAL"
+"0x8CE2";"PidTagAddressBookDistributionListMemberCount";"Contains the total number of recipients in the distribution list.";"PtypInteger32, 0x0003";"Address Book";"[MS-OXOABK] section 2.2.3.29";"PR_EMS_AB_DL_TOTAL_MEMBER_COUNT"
+"0x8CE3";"PidTagAddressBookDistributionListExternalMemberCount";"Contains the number of external recipients in the distribution list.";"PtypInteger32, 0x0003";"Address Book";"[MS-OXOABK] section 2.2.3.30";"PR_EMS_AB_DL_EXTERNAL_MEMBER_COUNT"
+"0xFFFB";"PidTagAddressBookIsMaster";"Contains a Boolean value of TRUE if it is possible to create Address Book objects in that container, and FALSE otherwise.";"PtypBoolean, 0x000B";"Address Book";"[MS-OXOABK] section 2.2.2.4";"PR_EMS_AB_IS_MASTER"
+"0xFFFC";"PidTagAddressBookParentEntryId";"Contains the EntryID of the parent container in a hierarchy of address book containers.";"PtypBinary, 0x0102";"Address Book";"[MS-OXOABK] section 2.2.2.5";"PR_EMS_AB_PARENT_ENTRYID"
+"0xFFFD";"PidTagAddressBookContainerId";"Contains the ID of a container on an NSPI server.";"PtypInteger32, 0x0003";"Address Book";"[MS-OXOABK] section 2.2.2.3";"PR_EMS_AB_CONTAINERID"
diff --git a/src/main/resources/PropertyNames.txt b/src/main/resources/PropertyNames.txt
index 5afa3b9..f9355e5 100644
--- a/src/main/resources/PropertyNames.txt
+++ b/src/main/resources/PropertyNames.txt
@@ -1,301 +1,1004 @@
-# Copyright 2010 Richard Johnson & Orin Eman
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# ---
-#
-# This file is part of java-libpst.
-#
-# java-libpst is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# java-libpst is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with java-libpst. If not, see .
-
-0002=PidTagAlternateRecipientAllowed
-0003=PidTagNameidStreamEntry
-0004=PidTagNameidStreamString
-0017=PidTagImportance
-001A=PidTagMessageClass
-0023=PidTagOriginatorDeliveryReportRequested
-0026=PidTagPriority
-0029=PidLidOldWhenStartWhole
-002B=PidTagRecipientReassignmentProhibited
-002E=PidTagOriginalSensitivity
-0036=PidTagSensitivity
-0037=PidTagSubject
-0039=PidTagClientSubmitTime
-003B=PidTagSentRepresentingSearchKey
-003F=PidTagReceivedByEntryId
-0040=PidTagReceivedByName
-0041=PidTagSentRepresentingEntryId
-0042=PidTagSentRepresentingName
-0043=PidTagReceivedRepresentingEntryId
-0044=PidTagReceivedRepresentingName
-004D=PidTagOriginalAuthorName
-0052=PidTagReceivedRepresentingSearchKey
-0057=PidTagMessageToMe
-0058=PidTagMessageCcMe
-0060=PidTagStartDate
-0061=PidTagEndDate
-0062=PidTagOwnerAppointmentId
-0063=PidTagResponseRequested
-0064=PidTagSentRepresentingAddressType
-0065=PidTagSentRepresentingEmailAddress
-0070=PidTagConversationTopic
-0071=PidTagConversationIndex
-0075=PidTagReceivedByAddressType
-0076=PidTagReceivedByEmailAddress
-0077=PidTagReceivedRepresentingAddressType
-0078=PidTagReceivedRepresentingEmailAddress
-007D=PidTagTransportMessageHeaders
-0C15=PidTagRecipientType
-0C17=PidTagReplyRequested
-0C19=PidTagSenderEntryId
-0C1A=PidTagSenderName
-0C1D=PidTagSenderSearchKey
-0C1E=PidTagSenderAddressType
-0C1F=PidTagSenderEmailAddress
-0E01=PidTagDeleteAfterSubmit
-0E02=PidTagDisplayBcc
-0E03=PidTagDisplayCc
-0E04=PidTagDisplayTo
-0E06=PidTagMessageDeliveryTime
-0E07=PidTagMessageFlags
-0E08=PidTagMessageSize
-0E0F=PidTagResponsibility
-0E20=PidTagAttachSize
-0E23=PidTagInternetArticleNumber
-0E38=PidTagReplFlags
-0E62=PidTagUrlCompNameSet
-0E79=PidTagTrustSender
-0FF9=PidTagRecordKey
-0FFE=PidTagObjectType
-0FFF=PidTagEntryId
-1000=PidTagBody
-1009=PidTagRtfCompressed
-1013=PidTagBodyHtml
-1035=PidTagInternetMessageId
-1039=PidTagInternetReferences
-1042=PidTagInReplyToId
-1080=PidTagIconIndex
-1081=PidTagLastVerbExecuted
-1082=PidTagLastVerbExecutionTime
-1096=PidTagBlockStatus
-10C3=PidTagICalendarStartTime
-10C4=PidTagICalendarEndTime
-10F2=Unknown_10F2
-10F3=PidTagUrlCompName
-10F4=PidTagAttributeHidden
-10F5=PidTagAttributeSystem
-10F6=PidTagAttributeReadOnly
-3001=PidTagDisplayName
-3002=PidTagAddressType
-3003=PidTagEmailAddress
-3007=PidTagCreationTime
-3008=PidTagLastModificationTime
-300B=PidTagSearchKey
-3701=PidTagAttachDataBinary
-3702=PidTagAttachEncoding
-3703=PidTagAttachExtension
-3704=PidTagAttachFilename
-3705=PidTagAttachMethod
-3709=PidTagAttachRendering
-370B=PidTagRenderingPosition
-370E=PidTagAttachMimeTag
-370A=PidTagAttachTag
-3712=PidTagAttachContentId
-3714=PidTagAttachFlags
-3900=PidTagDisplayType
-39FE=PidTagPrimarySmtpAddress
-39FF=PidTag7BitDisplayName
-3A00=PidTagAccount
-3A08=PidTagBusinessTelephoneNumber
-3A20=PidTagTransmittableDisplayName
-3A40=PidTagSendRichInfo
-3A70=PidTagUserX509Certificate
-3A71=PidTagSendInternetEncoding
-3FDE=PidTagInternetCodepage
-3FF1=PidTagMessageLocaleId
-3FFD=PidTagMessageCodepage
-3ff9=PidTagCreatorName
-4019=PidTagSenderFlags
-401A=PidTagSentRepresentingFlags
-401B=PidTagReceivedByFlags
-401C=PidTagReceivedRepresentingFlags
-403E=Unknown_403E
-4A08=Unknown_4A08
-5902=PidTagInternetMailOverrideFormat
-5909=PidTagMessageEditorFormat
-5FDE=PidTagRecipientResourceState
-5FDF=PidTagRecipientOrder
-5FEB=Unknown_5FEB
-5FEF=Unknown_5FEF
-5FF2=Unknown_5FF2
-5FF5=Unknown_5FF5
-5FF6=PidTagRecipientDisplayName
-5FF7=PidTagRecipientEntryId
-5FFB=PidTagRecipientTrackStatusTime
-5FFD=PidTagRecipientFlags
-5FFF=PidTagRecipientTrackStatus
-6001=PidTagNickname
-6610=Unknown_6610
-6614=Unknown_6614
-6617=Unknown_6617
-6619=PidTagUserEntryId
-6743=Unknown_6743
-6744=Unknown_6744
-67F2=PidTagLtpRowId
-67F3=PidTagLtpRowVer
-67F4=Unknown_67F4
-7FFA=PidTagAttachmentLinkId
-7FFB=PidTagExceptionStartTime
-7FFC=PidTagExceptionEndTime
-7FFD=PidTagAttachmentFlags
-7FFE=PidTagAttachmentHidden
-7FFF=PidTagAttachmentContactPhoto
-3FFA=PidTagLastModifiedName_W
-3FFB=PidTagLastModifierEntryId
-00000001=PidLidAttendeeCriticalChange
-00000002=PidLidWhere
-00000003=PidLidGlobalObjectId
-00000004=PidLidIsSilent
-00000005=PidLidIsRecurring
-00000006=PidLidRequiredAttendees
-00000007=PidLidOptionalAttendees
-00000008=PidLidResourceAttendees
-00000009=PidLidDelegateMail
-0000000A=PidLidIsException
-0000000B=PidLidSingleInvite
-0000000C=PidLidTimeZone
-0000000D=PidLidStartRecurrenceDate
-0000000E=PidLidStartRecurrenceTime
-0000000F=PidLidEndRecurrenceDate
-00000010=PidLidEndRecurrenceTime
-00000011=PidLidDayInterval
-00000012=PidLidWeekInterval
-00000013=PidLidMonthInterval
-00000014=PidLidYearInterval
-00000015=PidLidClientIntent
-00000016=Unknown_00000016
-00000017=PidLidMonthOfYearMask
-00000018=PidLidOldRecurrenceType
-00000019=Unknown_00000019
-0000001A=PidLidOwnerCriticalChange
-0000001C=PidLidCalendarType
-0000001D=PidLidAllAttendeesList
-00000021=Unknown_00000021
-00000023=PidLidCleanGlobalObjectId
-00000024=PidLidAppointmentMessageClass
-00000026=PidLidMeetingType
-00000028=PidLidOldLocation
-00000029=PidLidOldWhenStartWhole
-0000002A=PidLidOldWhenEndWhole
-000048CC=Unknown_000048CC
-00008054=PidLidDistributionListOneOffMembers
-00008055=PidLidDistributionListMembers
-00008101=PidLidTaskStatus
-00008102=PidLidPercentComplete
-00008103=PidLidTeamTask
-00008110=PidLidTaskActualEffort
-00008111=PidLidTaskEstimatedEffort
-00008112=PidLidTaskVersion
-00008113=PidLidTaskState
-00008121=PidLidTaskAssigner
-00008123=PidLidTaskOrdinal
-00008129=PidLidTaskOwnership
-0000811C=PidLidTaskComplete
-00008124=PidLidTaskNoCompute
-00008126=PidLidTaskFRecurring
-00008127=PidLidTaskRole
-0000812A=PidLidTaskAcceptanceState
-0000812C=PidLidTaskFFixOffline
-00008200=PidLidSendMeetingAsIcal
-00008201=PidLidAppointmentSequence
-00008202=PidLidAppointmentSequenceTime
-00008203=PidLidAppointmentLastSequence
-00008204=PidLidChangeHighlight
-00008205=PidLidBusyStatus
-00008206=PidLidFExceptionalBody
-00008207=PidLidAppointmentAuxiliaryFlags
-00008208=PidLidLocation
-0000820D=PidLidAppointmentStartWhole
-0000820E=PidLidAppointmentEndWhole
-0000820F=PidLidAppointmentStartTime
-00008210=PidLidAppointmentEndTime
-00008211=PidLidAppointmentEndDate
-00008212=PidLidAppointmentStartDate
-00008213=PidLidAppointmentDuration
-00008214=PidLidAppointmentColor
-00008215=PidLidAppointmentSubType
-00008216=PidLidAppointmentRecur
-00008217=PidLidAppointmentStateFlags
-00008218=PidLidResponseStatus
-00008220=PidLidAppointmentReplyTime
-00008223=PidLidRecurring
-00008224=PidLidIntendedBusyStatus
-00008228=PidLidExceptionReplaceTime
-00008229=PidLidFInvited
-0000822B=PidLidFExceptionalAttendees
-00008231=PidLidRecurrenceType
-00008232=PidLidRecurrencePattern
-00008233=PidLidTimeZoneStruct
-00008234=PidLidTimeZoneDescription
-00008235=PidLidClipStart
-00008236=PidLidClipEnd
-00008238=PidLidAllAttendeesString
-0000823B=PidLidToAttendeesString
-0000823C=PidLidCcAttendeesString
-0000823E=PidLidTrustRecipientHighlights
-00008241=PidLidConferencingType
-00008242=PidLidDirectory
-00008243=PidLidOrganizerAlias
-00008244=PidLidAutoStartCheck
-00008245=PidLidAutoStartWhen
-00008246=PidLidAllowExternalCheck
-00008247=PidLidCollaborateDoc
-00008248=PidLidNetShowUrl
-00008249=PidLidOnlinePassword
-00008256=PidLidAppointmentProposedDuration
-00008257=PidLidAppointmentCounterProposal
-00008259=PidLidAppointmentProposalNumber
-0000825A=PidLidAppointmentNotAllowPropose
-0000825E=PidLidAppointmentTimeZoneDefinitionStartDisplay
-0000825F=PidLidAppointmentTimeZoneDefinitionEndDisplay
-00008260=PidLidAppointmentTimeZoneDefinitionRecur
-00008501=PidLidReminderDelta
-00008502=PidLidReminderTime
-00008503=PidLidReminderSet
-00008506=PidLidPrivate
-0000850E=PidLidAgingDontAgeMe
-00008510=PidLidSideEffects
-00008514=PidLidSmartNoAttach
-00008516=PidLidCommonStart
-00008517=PidLidCommonEnd
-00008518=PidLidTaskMode
-00008536=PidLidNonSendableTo
-00008537=PidLidNonSendableCc
-00008538=PidLidNonSendableBcc
-00008552=PidLidCurrentVersion
-00008554=PidLidCurrentVersionName
-00008560=PidLidReminderSignalTime
-00008582=PidLidUseTnef
-000085BF=PidLidValidFlagStringProof
-
+# Copyright 2010 Richard Johnson & Orin Eman
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ---
+#
+# This file is part of java-libpst.
+#
+# java-libpst is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# java-libpst is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with java-libpst. If not, see .
+
+
+#All theese ID have been defined from the [MS-OXPROPS]: Exchange Server Protocols Master Property List
+#document Version 24.0 (6/18/2019)
+#completed by values already described by Richard Johnson
+
+#From the Microsoft documentation
+#ShortID from PIDShortID.csv
+
+0001=PidTagTemplateData
+0002=PidTagAlternateRecipientAllowed
+0004=PidTagAutoForwardComment
+0004=PidTagScriptData
+0005=PidTagAutoForwarded
+000F=PidTagDeferredDeliveryTime
+0010=PidTagDeliverTime
+0015=PidTagExpiryTime
+0017=PidTagImportance
+001A=PidTagMessageClass
+0023=PidTagOriginatorDeliveryReportRequested
+0025=PidTagParentKey
+0026=PidTagPriority
+0029=PidTagReadReceiptRequested
+002A=PidTagReceiptTime
+002B=PidTagRecipientReassignmentProhibited
+002E=PidTagOriginalSensitivity
+0030=PidTagReplyTime
+0031=PidTagReportTag
+0032=PidTagReportTime
+0036=PidTagSensitivity
+0037=PidTagSubject
+0039=PidTagClientSubmitTime
+003A=PidTagReportName
+003B=PidTagSentRepresentingSearchKey
+003D=PidTagSubjectPrefix
+003F=PidTagReceivedByEntryId
+0040=PidTagReceivedByName
+0041=PidTagSentRepresentingEntryId
+0042=PidTagSentRepresentingName
+0043=PidTagReceivedRepresentingEntryId
+0044=PidTagReceivedRepresentingName
+0045=PidTagReportEntryId
+0046=PidTagReadReceiptEntryId
+0047=PidTagMessageSubmissionId
+0049=PidTagOriginalSubject
+004B=PidTagOriginalMessageClass
+004C=PidTagOriginalAuthorEntryId
+004D=PidTagOriginalAuthorName
+004E=PidTagOriginalSubmitTime
+004F=PidTagReplyRecipientEntries
+0050=PidTagReplyRecipientNames
+0051=PidTagReceivedBySearchKey
+0052=PidTagReceivedRepresentingSearchKey
+0053=PidTagReadReceiptSearchKey
+0054=PidTagReportSearchKey
+0055=PidTagOriginalDeliveryTime
+0057=PidTagMessageToMe
+0058=PidTagMessageCcMe
+0059=PidTagMessageRecipientMe
+005A=PidTagOriginalSenderName
+005B=PidTagOriginalSenderEntryId
+005C=PidTagOriginalSenderSearchKey
+005D=PidTagOriginalSentRepresentingName
+005E=PidTagOriginalSentRepresentingEntryId
+005F=PidTagOriginalSentRepresentingSearchKey
+0060=PidTagStartDate
+0061=PidTagEndDate
+0062=PidTagOwnerAppointmentId
+0063=PidTagResponseRequested
+0064=PidTagSentRepresentingAddressType
+0065=PidTagSentRepresentingEmailAddress
+0066=PidTagOriginalSenderAddressType
+0067=PidTagOriginalSenderEmailAddress
+0068=PidTagOriginalSentRepresentingAddressType
+0069=PidTagOriginalSentRepresentingEmailAddress
+0070=PidTagConversationTopic
+0071=PidTagConversationIndex
+0072=PidTagOriginalDisplayBcc
+0073=PidTagOriginalDisplayCc
+0074=PidTagOriginalDisplayTo
+0075=PidTagReceivedByAddressType
+0076=PidTagReceivedByEmailAddress
+0077=PidTagReceivedRepresentingAddressType
+0078=PidTagReceivedRepresentingEmailAddress
+007D=PidTagTransportMessageHeaders
+007F=PidTagTnefCorrelationKey
+0080=PidTagReportDisposition
+0081=PidTagReportDispositionMode
+0807=PidTagAddressBookRoomCapacity
+0809=PidTagAddressBookRoomDescription
+0C04=PidTagNonDeliveryReportReasonCode
+0C05=PidTagNonDeliveryReportDiagCode
+0C06=PidTagNonReceiptNotificationRequested
+0C08=PidTagOriginatorNonDeliveryReportRequested
+0C15=PidTagRecipientType
+0C17=PidTagReplyRequested
+0C19=PidTagSenderEntryId
+0C1A=PidTagSenderName
+0C1B=PidTagSupplementaryInfo
+0C1D=PidTagSenderSearchKey
+0C1E=PidTagSenderAddressType
+0C1F=PidTagSenderEmailAddress
+0C20=PidTagNonDeliveryReportStatusCode
+0C21=PidTagRemoteMessageTransferAgent
+0E01=PidTagDeleteAfterSubmit
+0E02=PidTagDisplayBcc
+0E03=PidTagDisplayCc
+0E04=PidTagDisplayTo
+0E06=PidTagMessageDeliveryTime
+0E07=PidTagMessageFlags
+0E08=PidTagMessageSize
+0E09=PidTagParentEntryId
+0E0F=PidTagResponsibility
+0E12=PidTagMessageRecipients
+0E13=PidTagMessageAttachments
+0E17=PidTagMessageStatus
+0E1B=PidTagHasAttachments
+0E1D=PidTagNormalizedSubject
+0E1F=PidTagRtfInSync
+0E20=PidTagAttachSize
+0E21=PidTagAttachNumber
+0E28=PidTagPrimarySendAccount
+0E29=PidTagNextSendAcct
+0E2B=PidTagToDoItemFlags
+0E2C=PidTagSwappedToDoStore
+0E2D=PidTagSwappedToDoData
+0E69=PidTagRead
+0E6A=PidTagSecurityDescriptorAsXml
+0E79=PidTagTrustSender
+0E84=PidTagExchangeNTSecurityDescriptor
+0E99=PidTagExtendedRuleMessageActions
+0E9A=PidTagExtendedRuleMessageCondition
+0E9B=PidTagExtendedRuleSizeLimit
+0FF4=PidTagAccess
+0FF5=PidTagRowType
+0FF6=PidTagInstanceKey
+0FF7=PidTagAccessLevel
+0FF8=PidTagMappingSignature
+0FF9=PidTagRecordKey
+0FFB=PidTagStoreEntryId
+0FFE=PidTagObjectType
+0FFF=PidTagEntryId
+1000=PidTagBody
+1001=PidTagReportText
+1009=PidTagRtfCompressed
+1013=PidTagBodyHtml
+1014=PidTagBodyContentLocation
+1015=PidTagBodyContentId
+1016=PidTagNativeBody
+1035=PidTagInternetMessageId
+1039=PidTagInternetReferences
+1042=PidTagInReplyToId
+1043=PidTagListHelp
+1044=PidTagListSubscribe
+1045=PidTagListUnsubscribe
+1046=PidTagOriginalMessageId
+1080=PidTagIconIndex
+1081=PidTagLastVerbExecuted
+1082=PidTagLastVerbExecutionTime
+1090=PidTagFlagStatus
+1091=PidTagFlagCompleteTime
+1095=PidTagFollowupIcon
+1096=PidTagBlockStatus
+10C3=PidTagICalendarStartTime
+10C4=PidTagICalendarEndTime
+10C5=PidTagCdoRecurrenceid
+10CA=PidTagICalendarReminderNextTime
+10F4=PidTagAttributeHidden
+10F6=PidTagAttributeReadOnly
+3000=PidTagRowid
+3001=PidTagDisplayName
+3002=PidTagAddressType
+3003=PidTagEmailAddress
+3004=PidTagComment
+3005=PidTagDepth
+3007=PidTagCreationTime
+3008=PidTagLastModificationTime
+300B=PidTagSearchKey
+3010=PidTagTargetEntryId
+3013=PidTagConversationId
+3016=PidTagConversationIndexTracking
+3018=PidTagArchiveTag
+3019=PidTagPolicyTag
+301A=PidTagRetentionPeriod
+301B=PidTagStartDateEtc
+301C=PidTagRetentionDate
+301D=PidTagRetentionFlags
+301E=PidTagArchivePeriod
+301F=PidTagArchiveDate
+340D=PidTagStoreSupportMask
+340E=PidTagStoreState
+3600=PidTagContainerFlags
+3601=PidTagFolderType
+3602=PidTagContentCount
+3603=PidTagContentUnreadCount
+3609=PidTagSelectable
+360A=PidTagSubfolders
+360C=PidTagAnr
+360E=PidTagContainerHierarchy
+360F=PidTagContainerContents
+3610=PidTagFolderAssociatedContents
+3613=PidTagContainerClass
+36D0=PidTagIpmAppointmentEntryId
+36D1=PidTagIpmContactEntryId
+36D2=PidTagIpmJournalEntryId
+36D3=PidTagIpmNoteEntryId
+36D4=PidTagIpmTaskEntryId
+36D5=PidTagRemindersOnlineEntryId
+36D7=PidTagIpmDraftsEntryId
+36D8=PidTagAdditionalRenEntryIds
+36D9=PidTagAdditionalRenEntryIdsEx
+36DA=PidTagExtendedFolderFlags
+36E2=PidTagOrdinalMost
+36E4=PidTagFreeBusyEntryIds
+36E5=PidTagDefaultPostMessageClass
+3701=PidTagAttachDataObject
+3702=PidTagAttachEncoding
+3703=PidTagAttachExtension
+3704=PidTagAttachFilename
+3705=PidTagAttachMethod
+3707=PidTagAttachLongFilename
+3708=PidTagAttachPathname
+3709=PidTagAttachRendering
+370A=PidTagAttachTag
+370B=PidTagRenderingPosition
+370C=PidTagAttachTransportName
+370D=PidTagAttachLongPathname
+370E=PidTagAttachMimeTag
+370F=PidTagAttachAdditionalInformation
+3711=PidTagAttachContentBase
+3712=PidTagAttachContentId
+3713=PidTagAttachContentLocation
+3714=PidTagAttachFlags
+3719=PidTagAttachPayloadProviderGuidString
+371A=PidTagAttachPayloadClass
+371B=PidTagTextAttachmentCharset
+3900=PidTagDisplayType
+3902=PidTagTemplateid
+3905=PidTagDisplayTypeEx
+39FE=PidTagSmtpAddress
+39FF=PidTagAddressBookDisplayNamePrintable
+3A00=PidTagAccount
+3A02=PidTagCallbackTelephoneNumber
+3A05=PidTagGeneration
+3A06=PidTagGivenName
+3A07=PidTagGovernmentIdNumber
+3A08=PidTagBusinessTelephoneNumber
+3A09=PidTagHomeTelephoneNumber
+3A0A=PidTagInitials
+3A0B=PidTagKeyword
+3A0C=PidTagLanguage
+3A0D=PidTagLocation
+3A0F=PidTagMessageHandlingSystemCommonName
+3A10=PidTagOrganizationalIdNumber
+3A11=PidTagSurname
+3A12=PidTagOriginalEntryId
+3A15=PidTagPostalAddress
+3A16=PidTagCompanyName
+3A17=PidTagTitle
+3A18=PidTagDepartmentName
+3A19=PidTagOfficeLocation
+3A1A=PidTagPrimaryTelephoneNumber
+3A1B=PidTagBusiness2TelephoneNumber
+3A1B=PidTagBusiness2TelephoneNumbers
+3A1C=PidTagMobileTelephoneNumber
+3A1D=PidTagRadioTelephoneNumber
+3A1E=PidTagCarTelephoneNumber
+3A1F=PidTagOtherTelephoneNumber
+3A20=PidTagTransmittableDisplayName
+3A21=PidTagPagerTelephoneNumber
+3A22=PidTagUserCertificate
+3A23=PidTagPrimaryFaxNumber
+3A24=PidTagBusinessFaxNumber
+3A25=PidTagHomeFaxNumber
+3A26=PidTagCountry
+3A27=PidTagLocality
+3A28=PidTagStateOrProvince
+3A29=PidTagStreetAddress
+3A2A=PidTagPostalCode
+3A2B=PidTagPostOfficeBox
+3A2C=PidTagTelexNumber
+3A2D=PidTagIsdnNumber
+3A2E=PidTagAssistantTelephoneNumber
+3A2F=PidTagHome2TelephoneNumber
+3A2F=PidTagHome2TelephoneNumbers
+3A30=PidTagAssistant
+3A40=PidTagSendRichInfo
+3A41=PidTagWeddingAnniversary
+3A42=PidTagBirthday
+3A43=PidTagHobbies
+3A44=PidTagMiddleName
+3A45=PidTagDisplayNamePrefix
+3A46=PidTagProfession
+3A47=PidTagReferredByName
+3A48=PidTagSpouseName
+3A49=PidTagComputerNetworkName
+3A4A=PidTagCustomerId
+3A4B=PidTagTelecommunicationsDeviceForDeafTelephoneNumber
+3A4C=PidTagFtpSite
+3A4D=PidTagGender
+3A4E=PidTagManagerName
+3A4F=PidTagNickname
+3A50=PidTagPersonalHomePage
+3A51=PidTagBusinessHomePage
+3A57=PidTagCompanyMainTelephoneNumber
+3A58=PidTagChildrensNames
+3A59=PidTagHomeAddressCity
+3A5A=PidTagHomeAddressCountry
+3A5B=PidTagHomeAddressPostalCode
+3A5C=PidTagHomeAddressStateOrProvince
+3A5D=PidTagHomeAddressStreet
+3A5E=PidTagHomeAddressPostOfficeBox
+3A5F=PidTagOtherAddressCity
+3A60=PidTagOtherAddressCountry
+3A61=PidTagOtherAddressPostalCode
+3A62=PidTagOtherAddressStateOrProvince
+3A63=PidTagOtherAddressStreet
+3A64=PidTagOtherAddressPostOfficeBox
+3A70=PidTagUserX509Certificate
+3A71=PidTagSendInternetEncoding
+3F08=PidTagInitialDetailsPane
+3FDE=PidTagInternetCodepage
+3FDF=PidTagAutoResponseSuppress
+3FE0=PidTagAccessControlListData
+3FE3=PidTagDelegatedByRule
+3FE7=PidTagResolveMethod
+3FEA=PidTagHasDeferredActionMessages
+3FEB=PidTagDeferredSendNumber
+3FEC=PidTagDeferredSendUnits
+3FED=PidTagExpiryNumber
+3FEE=PidTagExpiryUnits
+3FEF=PidTagDeferredSendTime
+3FF0=PidTagConflictEntryId
+3FF1=PidTagMessageLocaleId
+3FF8=PidTagCreatorName
+3FF9=PidTagCreatorEntryId
+3FFA=PidTagLastModifierName
+3FFB=PidTagLastModifierEntryId
+3FFD=PidTagMessageCodepage
+401A=PidTagSentRepresentingFlags
+4029=PidTagReadReceiptAddressType
+402A=PidTagReadReceiptEmailAddress
+402B=PidTagReadReceiptName
+4076=PidTagContentFilterSpamConfidenceLevel
+4079=PidTagSenderIdStatus
+4082=PidTagHierRev
+4083=PidTagPurportedSenderDomain
+5902=PidTagInternetMailOverrideFormat
+5909=PidTagMessageEditorFormat
+5D01=PidTagSenderSmtpAddress
+5D02=PidTagSentRepresentingSmtpAddress
+5D05=PidTagReadReceiptSmtpAddress
+5D07=PidTagReceivedBySmtpAddress
+5D08=PidTagReceivedRepresentingSmtpAddress
+5FDF=PidTagRecipientOrder
+5FE1=PidTagRecipientProposed
+5FE3=PidTagRecipientProposedStartTime
+5FE4=PidTagRecipientProposedEndTime
+5FF6=PidTagRecipientDisplayName
+5FF7=PidTagRecipientEntryId
+5FFB=PidTagRecipientTrackStatusTime
+5FFD=PidTagRecipientFlags
+5FFF=PidTagRecipientTrackStatus
+6100=PidTagJunkIncludeContacts
+6101=PidTagJunkThreshold
+6102=PidTagJunkPermanentlyDelete
+6103=PidTagJunkAddRecipientsToSafeSendersList
+6107=PidTagJunkPhishingEnableLinks
+64F0=PidTagMimeSkeleton
+65C2=PidTagReplyTemplateId
+65E0=PidTagSourceKey
+65E1=PidTagParentSourceKey
+65E2=PidTagChangeKey
+65E3=PidTagPredecessorChangeList
+65E9=PidTagRuleMessageState
+65EA=PidTagRuleMessageUserFlags
+65EB=PidTagRuleMessageProvider
+65EC=PidTagRuleMessageName
+65ED=PidTagRuleMessageLevel
+65EE=PidTagRuleMessageProviderData
+65F3=PidTagRuleMessageSequence
+6619=PidTagUserEntryId
+661B=PidTagMailboxOwnerEntryId
+661C=PidTagMailboxOwnerName
+661D=PidTagOutOfOfficeState
+6622=PidTagSchedulePlusFreeBusyEntryId
+6638=PidTagSerializedReplidGuidMap
+6639=PidTagRights
+663A=PidTagHasRules
+663B=PidTagAddressBookEntryId
+663E=PidTagHierarchyChangeNumber
+6645=PidTagClientActions
+6646=PidTagDamOriginalEntryId
+6647=PidTagDamBackPatched
+6648=PidTagRuleError
+6649=PidTagRuleActionType
+664A=PidTagHasNamedProperties
+6650=PidTagRuleActionNumber
+6651=PidTagRuleFolderEntryId
+666A=PidTagProhibitReceiveQuota
+666C=PidTagInConflict
+666D=PidTagMaximumSubmitMessageSize
+666E=PidTagProhibitSendQuota
+6671=PidTagMemberId
+6672=PidTagMemberName
+6673=PidTagMemberRights
+6674=PidTagRuleId
+6675=PidTagRuleIds
+6676 =PidTagRuleSequence
+6677=PidTagRuleState
+6678=PidTagRuleUserFlags
+6679=PidTagRuleCondition
+6680=PidTagRuleActions
+6681=PidTagRuleProvider
+6682=PidTagRuleName
+6683=PidTagRuleLevel
+6684=PidTagRuleProviderData
+668F=PidTagDeletedOn
+66A1=PidTagLocaleId
+66A8=PidTagFolderFlags
+66C3=PidTagCodePageId
+6704=PidTagAddressBookManageDistributionList
+6705=PidTagSortLocaleId
+6709=PidTagLocalCommitTime
+670A=PidTagLocalCommitTimeMax
+670B=PidTagDeletedCountTotal
+670E=PidTagFlatUrlName
+6740=PidTagSentMailSvrEID
+6741=PidTagDeferredActionMessageOriginalEntryId
+6748=PidTagFolderId
+6749=PidTagParentFolderId
+674A=PidTagMid
+674D=PidTagInstID
+674E=PidTagInstanceNum
+674F=PidTagAddressBookMessageId
+67A4=PidTagChangeNumber
+67AA=PidTagAssociated
+6800=PidTagOfflineAddressBookName
+6801=PidTagOfflineAddressBookSequence
+6801=PidTagVoiceMessageDuration
+6802=PidTagOfflineAddressBookContainerGuid
+6802=PidTagRwRulesStream
+6802=PidTagSenderTelephoneNumber
+6803=PidTagOfflineAddressBookMessageClass
+6803=PidTagVoiceMessageSenderName
+6804=PidTagFaxNumberOfPages
+6804=PidTagOfflineAddressBookDistinguishedName
+6805=PidTagOfflineAddressBookTruncatedProperties
+6805=PidTagVoiceMessageAttachmentOrder
+6806=PidTagCallId
+6820=PidTagReportingMessageTransferAgent
+6834=PidTagSearchFolderLastUsed
+683A=PidTagSearchFolderExpiration
+6841=PidTagScheduleInfoResourceType
+6841=PidTagSearchFolderTemplateId
+6842=PidTagScheduleInfoDelegatorWantsCopy
+6842=PidTagSearchFolderId
+6842=PidTagWlinkGroupHeaderID
+6843=PidTagScheduleInfoDontMailDelegates
+6844=PidTagScheduleInfoDelegateNames
+6844=PidTagSearchFolderRecreateInfo
+6845=PidTagScheduleInfoDelegateEntryIds
+6845=PidTagSearchFolderDefinition
+6846=PidTagGatewayNeedsToRefresh
+6846=PidTagSearchFolderStorageType
+6847=PidTagFreeBusyPublishStart
+6847=PidTagSearchFolderTag
+6847=PidTagWlinkSaveStamp
+6848=PidTagFreeBusyPublishEnd
+6848=PidTagSearchFolderEfpFlags
+6849=PidTagFreeBusyMessageEmailAddress
+6849=PidTagWlinkType
+684A=PidTagScheduleInfoDelegateNamesW
+684A=PidTagWlinkFlags
+684B=PidTagScheduleInfoDelegatorWantsInfo
+684B=PidTagWlinkOrdinal
+684C=PidTagWlinkEntryId
+684D=PidTagWlinkRecordKey
+684E=PidTagWlinkStoreEntryId
+684F=PidTagScheduleInfoMonthsMerged
+684F=PidTagWlinkFolderType
+6850=PidTagScheduleInfoFreeBusyMerged
+6850=PidTagWlinkGroupClsid
+6851=PidTagScheduleInfoMonthsTentative
+6851=PidTagWlinkGroupName
+6852=PidTagScheduleInfoFreeBusyTentative
+6852=PidTagWlinkSection
+6853=PidTagScheduleInfoMonthsBusy
+6853=PidTagWlinkCalendarColor
+6854=PidTagScheduleInfoFreeBusyBusy
+6854=PidTagWlinkAddressBookEID
+6855=PidTagScheduleInfoMonthsAway
+6856=PidTagScheduleInfoFreeBusyAway
+6868=PidTagFreeBusyRangeTimestamp
+6869=PidTagFreeBusyCountMonths
+686A=PidTagScheduleInfoAppointmentTombstone
+686B=PidTagDelegateFlags
+686C=PidTagScheduleInfoFreeBusy
+686D=PidTagScheduleInfoAutoAcceptAppointments
+686E=PidTagScheduleInfoDisallowRecurringAppts
+686F=PidTagScheduleInfoDisallowOverlappingAppts
+6890=PidTagWlinkClientID
+6891=PidTagWlinkAddressBookStoreEID
+6892=PidTagWlinkROGroupType
+7001=PidTagViewDescriptorBinary
+7002=PidTagViewDescriptorStrings
+7006=PidTagViewDescriptorName
+7007=PidTagViewDescriptorVersion
+7C06=PidTagRoamingDatatypes
+7C07=PidTagRoamingDictionary
+7C08=PidTagRoamingXmlStream
+7C24=PidTagOscSyncEnabled
+7D01=PidTagProcessed
+7FF9=PidTagExceptionReplaceTime
+7FFA=PidTagAttachmentLinkId
+7FFB=PidTagExceptionStartTime
+7FFC=PidTagExceptionEndTime
+7FFD=PidTagAttachmentFlags
+7FFE=PidTagAttachmentHidden
+7FFF=PidTagAttachmentContactPhoto
+8004=PidTagAddressBookFolderPathname
+8005=PidTagAddressBookManager
+8005=PidTagAddressBookManagerDistinguishedName
+8006=PidTagAddressBookHomeMessageDatabase
+8008=PidTagAddressBookIsMemberOfDistributionList
+8009=PidTagAddressBookMember
+800C=PidTagAddressBookOwner
+800E=PidTagAddressBookReports
+800F=PidTagAddressBookProxyAddresses
+8011=PidTagAddressBookTargetAddress
+8015=PidTagAddressBookPublicDelegates
+8024=PidTagAddressBookOwnerBackLink
+802D=PidTagAddressBookExtensionAttribute1
+802E=PidTagAddressBookExtensionAttribute2
+802F=PidTagAddressBookExtensionAttribute3
+8030=PidTagAddressBookExtensionAttribute4
+8031=PidTagAddressBookExtensionAttribute5
+8032=PidTagAddressBookExtensionAttribute6
+8033=PidTagAddressBookExtensionAttribute7
+8034=PidTagAddressBookExtensionAttribute8
+8035=PidTagAddressBookExtensionAttribute9
+8036=PidTagAddressBookExtensionAttribute10
+803C=PidTagAddressBookObjectDistinguishedName
+806A=PidTagAddressBookDeliveryContentLength
+8073=PidTagAddressBookDistributionListMemberSubmitAccepted
+8170=PidTagAddressBookNetworkAddress
+8C57=PidTagAddressBookExtensionAttribute11
+8C58=PidTagAddressBookExtensionAttribute12
+8C59=PidTagAddressBookExtensionAttribute13
+8C60=PidTagAddressBookExtensionAttribute14
+8C61=PidTagAddressBookExtensionAttribute15
+8C6A=PidTagAddressBookX509Certificate
+8C6D=PidTagAddressBookObjectGuid
+8C8E=PidTagAddressBookPhoneticGivenName
+8C8F=PidTagAddressBookPhoneticSurname
+8C90=PidTagAddressBookPhoneticDepartmentName
+8C91=PidTagAddressBookPhoneticCompanyName
+8C92=PidTagAddressBookPhoneticDisplayName
+8C93=PidTagAddressBookDisplayTypeExtended
+8C94=PidTagAddressBookHierarchicalShowInDepartments
+8C96=PidTagAddressBookRoomContainers
+8C97=PidTagAddressBookHierarchicalDepartmentMembers
+8C98=PidTagAddressBookHierarchicalRootDepartment
+8C99=PidTagAddressBookHierarchicalParentDepartment
+8C9A=PidTagAddressBookHierarchicalChildDepartments
+8C9E=PidTagThumbnailPhoto
+8CA0=PidTagAddressBookSeniorityIndex
+8CA8=PidTagAddressBookOrganizationalUnitRootDistinguishedName
+8CAC=PidTagAddressBookSenderHintTranslations
+8CB5=PidTagAddressBookModerationEnabled
+8CC2=PidTagSpokenName
+8CD8=PidTagAddressBookAuthorizedSenders
+8CD9=PidTagAddressBookUnauthorizedSenders
+8CDA=PidTagAddressBookDistributionListMemberSubmitRejected
+8CDB=PidTagAddressBookDistributionListRejectMessagesFromDLMembers
+8CDD=PidTagAddressBookHierarchicalIsHierarchicalGroup
+8CE2=PidTagAddressBookDistributionListMemberCount
+8CE3=PidTagAddressBookDistributionListExternalMemberCount
+FFFB=PidTagAddressBookIsMaster
+FFFC=PidTagAddressBookParentEntryId
+FFFD=PidTagAddressBookContainerId
+
+
+#LongID from PIDLongID.csv
+
+00000001=PidLidAttendeeCriticalChange
+00000002=PidLidWhere
+00000003=PidLidGlobalObjectId
+00000004=PidLidIsSilent
+00000005=PidLidIsRecurring
+00000006=PidLidRequiredAttendees
+00000007=PidLidOptionalAttendees
+00000008=PidLidResourceAttendees
+00000009=PidLidDelegateMail
+0000000A=PidLidIsException
+0000000C=PidLidTimeZone
+0000000D=PidLidStartRecurrenceDate
+0000000E=PidLidStartRecurrenceTime
+0000000F=PidLidEndRecurrenceDate
+00000010=PidLidEndRecurrenceTime
+00000011=PidLidDayInterval
+00000012=PidLidWeekInterval
+00000013=PidLidMonthInterval
+00000014=PidLidYearInterval
+00000015=PidLidClientIntent
+00000017=PidLidMonthOfYearMask
+00000018=PidLidOldRecurrenceType
+0000001A=PidLidOwnerCriticalChange
+0000001C=PidLidCalendarType
+00000023=PidLidCleanGlobalObjectId
+00000024=PidLidAppointmentMessageClass
+00000026=PidLidMeetingType
+00000028=PidLidOldLocation
+00000029=PidLidOldWhenStartWhole
+0000002A=PidLidOldWhenEndWhole
+00001000=PidLidDayOfMonth
+00001001=PidLidICalendarDayOfWeekMask
+00001005=PidLidOccurrences
+00001006=PidLidMonthOfYear
+0000100B=PidLidNoEndDateFlag
+0000100D=PidLidRecurrenceDuration
+00008005=PidLidFileUnder
+00008006=PidLidFileUnderId
+00008007=PidLidContactItemData
+00008010=PidLidDepartment
+00008015=PidLidHasPicture
+0000801A=PidLidHomeAddress
+0000801B=PidLidWorkAddress
+0000801C=PidLidOtherAddress
+00008022=PidLidPostalAddressId
+00008023=PidLidContactCharacterSet
+00008025=PidLidAutoLog
+00008026=PidLidFileUnderList
+00008028=PidLidAddressBookProviderEmailList
+00008029=PidLidAddressBookProviderArrayType
+0000802B=PidLidHtml
+0000802C=PidLidYomiFirstName
+0000802D=PidLidYomiLastName
+0000802E=PidLidYomiCompanyName
+00008040=PidLidBusinessCardDisplayDefinition
+00008041=PidLidBusinessCardCardPicture
+00008045=PidLidPromptSendUpdate
+00008045=PidLidWorkAddressStreet
+00008046=PidLidWorkAddressCity
+00008047=PidLidWorkAddressState
+00008048=PidLidWorkAddressPostalCode
+00008049=PidLidWorkAddressCountry
+0000804A=PidLidWorkAddressPostOfficeBox
+0000804C=PidLidDistributionListChecksum
+0000804D=PidLidBirthdayEventEntryId
+0000804E=PidLidAnniversaryEventEntryId
+0000804F=PidLidContactUserField1
+00008050=PidLidContactUserField2
+00008051=PidLidContactUserField3
+00008052=PidLidContactUserField4
+00008053=PidLidDistributionListName
+00008054=PidLidDistributionListOneOffMembers
+00008055=PidLidDistributionListMembers
+00008062=PidLidInstantMessagingAddress
+00008064=PidLidDistributionListStream
+00008080=PidLidEmail1DisplayName
+00008082=PidLidEmail1AddressType
+00008083=PidLidEmail1EmailAddress
+00008084=PidLidEmail1OriginalDisplayName
+00008085=PidLidEmail1OriginalEntryId
+00008090=PidLidEmail2DisplayName
+00008092=PidLidEmail2AddressType
+00008093=PidLidEmail2EmailAddress
+00008094=PidLidEmail2OriginalDisplayName
+00008095=PidLidEmail2OriginalEntryId
+000080A0=PidLidEmail3DisplayName
+000080A2=PidLidEmail3AddressType
+000080A3=PidLidEmail3EmailAddress
+000080A4=PidLidEmail3OriginalDisplayName
+000080A5=PidLidEmail3OriginalEntryId
+000080B2=PidLidFax1AddressType
+000080B3=PidLidFax1EmailAddress
+000080B4=PidLidFax1OriginalDisplayName
+000080B5=PidLidFax1OriginalEntryId
+000080C2=PidLidFax2AddressType
+000080C3=PidLidFax2EmailAddress
+000080C4=PidLidFax2OriginalDisplayName
+000080C5=PidLidFax2OriginalEntryId
+000080D2=PidLidFax3AddressType
+000080D3=PidLidFax3EmailAddress
+000080D4=PidLidFax3OriginalDisplayName
+000080D5=PidLidFax3OriginalEntryId
+000080D8=PidLidFreeBusyLocation
+000080DA=PidLidHomeAddressCountryCode
+000080DB=PidLidWorkAddressCountryCode
+000080DC=PidLidOtherAddressCountryCode
+000080DD=PidLidAddressCountryCode
+000080DE=PidLidBirthdayLocal
+000080DF=PidLidWeddingAnniversaryLocal
+000080E0=PidLidIsContactLinked
+000080E2=PidLidContactLinkedGlobalAddressListEntryId
+000080E3=PidLidContactLinkSMTPAddressCache
+000080E5=PidLidContactLinkLinkRejectHistory
+000080E6=PidLidContactLinkGlobalAddressListLinkState
+000080E8=PidLidContactLinkGlobalAddressListLinkId
+00008101=PidLidTaskStatus
+00008102=PidLidPercentComplete
+00008103=PidLidTeamTask
+00008104=PidLidTaskStartDate
+00008105=PidLidTaskDueDate
+00008107=PidLidTaskResetReminder
+00008108=PidLidTaskAccepted
+00008109=PidLidTaskDeadOccurrence
+0000810F=PidLidTaskDateCompleted
+00008110=PidLidTaskActualEffort
+00008111=PidLidTaskEstimatedEffort
+00008112=PidLidTaskVersion
+00008113=PidLidTaskState
+00008115=PidLidTaskLastUpdate
+00008116=PidLidTaskRecurrence
+00008117=PidLidTaskAssigners
+00008119=PidLidTaskStatusOnComplete
+0000811A=PidLidTaskHistory
+0000811B=PidLidTaskUpdates
+0000811C=PidLidTaskComplete
+0000811E=PidLidTaskFCreator
+0000811F=PidLidTaskOwner
+00008120=PidLidTaskMultipleRecipients
+00008121=PidLidTaskAssigner
+00008122=PidLidTaskLastUser
+00008123=PidLidTaskOrdinal
+00008124=PidLidTaskNoCompute
+00008125=PidLidTaskLastDelegate
+00008126=PidLidTaskFRecurring
+00008127=PidLidTaskRole
+00008129=PidLidTaskOwnership
+0000812A=PidLidTaskAcceptanceState
+0000812C=PidLidTaskFFixOffline
+00008139=PidLidTaskCustomFlags
+00008201=PidLidAppointmentSequence
+00008202=PidLidAppointmentSequenceTime
+00008203=PidLidAppointmentLastSequence
+00008204=PidLidChangeHighlight
+00008205=PidLidBusyStatus
+00008206=PidLidFExceptionalBody
+00008207=PidLidAppointmentAuxiliaryFlags
+00008208=PidLidLocation
+00008209=PidLidMeetingWorkspaceUrl
+0000820A=PidLidForwardInstance
+0000820C=PidLidLinkedTaskItems
+0000820D=PidLidAppointmentStartWhole
+0000820E=PidLidAppointmentEndWhole
+0000820F=PidLidAppointmentStartTime
+00008210=PidLidAppointmentEndTime
+00008211=PidLidAppointmentEndDate
+00008212=PidLidAppointmentStartDate
+00008213=PidLidAppointmentDuration
+00008214=PidLidAppointmentColor
+00008215=PidLidAppointmentSubType
+00008216=PidLidAppointmentRecur
+00008217=PidLidAppointmentStateFlags
+00008218=PidLidResponseStatus
+00008220=PidLidAppointmentReplyTime
+00008223=PidLidRecurring
+00008224=PidLidIntendedBusyStatus
+00008226=PidLidAppointmentUpdateTime
+00008228=PidLidExceptionReplaceTime
+00008229=PidLidFInvited
+0000822B=PidLidFExceptionalAttendees
+0000822E=PidLidOwnerName
+0000822F=PidLidFOthersAppointment
+00008230=PidLidAppointmentReplyName
+00008231=PidLidRecurrenceType
+00008232=PidLidRecurrencePattern
+00008233=PidLidTimeZoneStruct
+00008234=PidLidTimeZoneDescription
+00008235=PidLidClipStart
+00008236=PidLidClipEnd
+00008237=PidLidOriginalStoreEntryId
+00008238=PidLidAllAttendeesString
+0000823A=PidLidAutoFillLocation
+0000823B=PidLidToAttendeesString
+0000823C=PidLidCcAttendeesString
+00008240=PidLidConferencingCheck
+00008241=PidLidConferencingType
+00008242=PidLidDirectory
+00008243=PidLidOrganizerAlias
+00008244=PidLidAutoStartCheck
+00008246=PidLidAllowExternalCheck
+00008247=PidLidCollaborateDoc
+00008248=PidLidNetShowUrl
+00008249=PidLidOnlinePassword
+00008250=PidLidAppointmentProposedStartWhole
+00008251=PidLidAppointmentProposedEndWhole
+00008256=PidLidAppointmentProposedDuration
+00008257=PidLidAppointmentCounterProposal
+00008259=PidLidAppointmentProposalNumber
+0000825A=PidLidAppointmentNotAllowPropose
+0000825D=PidLidAppointmentUnsendableRecipients
+0000825E=PidLidAppointmentTimeZoneDefinitionStartDisplay
+0000825F=PidLidAppointmentTimeZoneDefinitionEndDisplay
+00008260=PidLidAppointmentTimeZoneDefinitionRecur
+00008261=PidLidForwardNotificationRecipients
+0000827A=PidLidInboundICalStream
+0000827B=PidLidSingleBodyICal
+00008501=PidLidReminderDelta
+00008502=PidLidReminderTime
+00008503=PidLidReminderSet
+00008504=PidLidReminderTimeTime
+00008505=PidLidReminderTimeDate
+00008506=PidLidPrivate
+0000850E=PidLidAgingDontAgeMe
+00008510=PidLidSideEffects
+00008511=PidLidRemoteStatus
+00008514=PidLidSmartNoAttach
+00008516=PidLidCommonStart
+00008517=PidLidCommonEnd
+00008518=PidLidTaskMode
+00008519=PidLidTaskGlobalId
+0000851A=PidLidAutoProcessState
+0000851C=PidLidReminderOverride
+0000851D=PidLidReminderType
+0000851E=PidLidReminderPlaySound
+0000851F=PidLidReminderFileParameter
+00008520=PidLidVerbStream
+00008524=PidLidVerbResponse
+00008530=PidLidFlagRequest
+00008535=PidLidBilling
+00008536=PidLidNonSendableTo
+00008537=PidLidNonSendableCc
+00008538=PidLidNonSendableBcc
+00008539=PidLidCompanies
+0000853A=PidLidContacts
+00008543=PidLidNonSendToTrackStatus
+00008544=PidLidNonSendCcTrackStatus
+00008545=PidLidNonSendBccTrackStatus
+00008552=PidLidCurrentVersion
+00008554=PidLidCurrentVersionName
+00008560=PidLidReminderSignalTime
+00008580=PidLidInternetAccountName
+00008581=PidLidInternetAccountStamp
+00008582=PidLidUseTnef
+00008584=PidLidContactLinkSearchKey
+00008585=PidLidContactLinkEntry
+00008586=PidLidContactLinkName
+0000859C=PidLidSpamOriginalFolder
+000085A0=PidLidToDoOrdinalDate
+000085A1=PidLidToDoSubOrdinal
+000085A4=PidLidToDoTitle
+000085B1=PidLidInfoPathFormName
+000085B5=PidLidClassified
+000085B6=PidLidClassification
+000085B7=PidLidClassificationDescription
+000085B8=PidLidClassificationGuid
+000085BA=PidLidClassificationKeep
+000085BD=PidLidReferenceEntryId
+000085BF=PidLidValidFlagStringProof
+000085C0=PidLidFlagString
+000085C6=PidLidConversationActionMoveFolderEid
+000085C7=PidLidConversationActionMoveStoreEid
+000085C8=PidLidConversationActionMaxDeliveryTime
+000085C9=PidLidConversationProcessed
+000085CA=PidLidConversationActionLastAppliedTime
+000085CB=PidLidConversationActionVersion
+000085CC=PidLidServerProcessed
+000085CD=PidLidServerProcessingActions
+000085E0=PidLidPendingStateForSiteMailboxDocument
+00008700=PidLidLogType
+00008706=PidLidLogStart
+00008707=PidLidLogDuration
+00008708=PidLidLogEnd
+0000870C=PidLidLogFlags
+0000870E=PidLidLogDocumentPrinted
+0000870F=PidLidLogDocumentSaved
+00008710=PidLidLogDocumentRouted
+00008711=PidLidLogDocumentPosted
+00008712=PidLidLogTypeDesc
+00008900=PidLidPostRssChannelLink
+00008901=PidLidPostRssItemLink
+00008902=PidLidPostRssItemHash
+00008903=PidLidPostRssItemGuid
+00008904=PidLidPostRssChannel
+00008905=PidLidPostRssItemXml
+00008906=PidLidPostRssSubscription
+00008A00=PidLidSharingStatus
+00008A01=PidLidSharingProviderGuid
+00008A02=PidLidSharingProviderName
+00008A03=PidLidSharingProviderUrl
+00008A04=PidLidSharingRemotePath
+00008A05=PidLidSharingRemoteName
+00008A06=PidLidSharingRemoteUid
+00008A07=PidLidSharingInitiatorName
+00008A08=PidLidSharingInitiatorSmtp
+00008A09=PidLidSharingInitiatorEntryId
+00008A0A=PidLidSharingFlags
+00008A0B=PidLidSharingProviderExtension
+00008A0C=PidLidSharingRemoteUser
+00008A0D=PidLidSharingRemotePass
+00008A0E=PidLidSharingLocalPath
+00008A0F=PidLidSharingLocalName
+00008A10=PidLidSharingLocalUid
+00008A13=PidLidSharingFilter
+00008A14=PidLidSharingLocalType
+00008A15=PidLidSharingFolderEntryId
+00008A17=PidLidSharingCapabilities
+00008A18=PidLidSharingFlavor
+00008A19=PidLidSharingAnonymity
+00008A1A=PidLidSharingReciprocation
+00008A1B=PidLidSharingPermissions
+00008A1C=PidLidSharingInstanceGuid
+00008A1D=PidLidSharingRemoteType
+00008A1E=PidLidSharingParticipants
+00008A1F=PidLidSharingLastSyncTime
+00008A21=PidLidSharingExtensionXml
+00008A22=PidLidSharingRemoteLastModificationTime
+00008A23=PidLidSharingLocalLastModificationTime
+00008A24=PidLidSharingConfigurationUrl
+00008A25=PidLidSharingStart
+00008A26=PidLidSharingStop
+00008A27=PidLidSharingResponseType
+00008A28=PidLidSharingResponseTime
+00008A29=PidLidSharingOriginalMessageEntryId
+00008A2A=PidLidSharingSyncInterval
+00008A2B=PidLidSharingDetail
+00008A2C=PidLidSharingTimeToLive
+00008A2D=PidLidSharingBindingEntryId
+00008A2E=PidLidSharingIndexEntryId
+00008A2F=PidLidSharingRemoteComment
+00008A40=PidLidSharingWorkingHoursStart
+00008A41=PidLidSharingWorkingHoursEnd
+00008A42=PidLidSharingWorkingHoursDays
+00008A43=PidLidSharingWorkingHoursTimeZone
+00008A44=PidLidSharingDataRangeStart
+00008A45=PidLidSharingDataRangeEnd
+00008A46=PidLidSharingRangeStart
+00008A47=PidLidSharingRangeEnd
+00008A48=PidLidSharingRemoteStoreUid
+00008A49=PidLidSharingLocalStoreUid
+00008A4B=PidLidSharingRemoteByteSize
+00008A4C=PidLidSharingRemoteCrc
+00008A4D=PidLidSharingLocalComment
+00008A4E=PidLidSharingRoamLog
+00008A4F=PidLidSharingRemoteMessageCount
+00008A51=PidLidSharingBrowseUrl
+00008A55=PidLidSharingLastAutoSyncTime
+00008A56=PidLidSharingTimeToLiveAuto
+00008A5B=PidLidSharingRemoteVersion
+00008A5C=PidLidSharingParentBindingEntryId
+00008A60=PidLidSharingSyncFlags
+00008B00=PidLidNoteColor
+00008B02=PidLidNoteWidth
+00008B03=PidLidNoteHeight
+00008B04=PidLidNoteX
+00008B05=PidLidNoteY
+00009000=PidLidCategories
+
+
+#########################################################################
+
+
+#Old PID not defined in the Microsoft documentation
+0003=PidTagNameidStreamEntry
+0E23=PidTagInternetArticleNumber
+0E38=PidTagReplFlags
+0E62=PidTagUrlCompNameSet
+10F3=PidTagUrlCompName
+10F5=PidTagAttributeSystem
+4019=PidTagSenderFlags
+401B=PidTagReceivedByFlags
+401C=PidTagReceivedRepresentingFlags
+5FDE=PidTagRecipientResourceState
+6001=PidTagNickname
+67F2=PidTagLtpRowId
+67F3=PidTagLtpRowVer
+
+0000001D=PidLidAllAttendeesList
+00008200=PidLidSendMeetingAsIcal
+0000823E=PidLidTrustRecipientHighlights
+00008245=PidLidAutoStartWhen