├── .gitignore ├── LICENSE ├── README.md ├── composer.json ├── phpunit.xml.dist ├── src └── MAPI │ ├── Item │ ├── Attachment.php │ ├── MapiObject.php │ ├── Message.php │ └── Recipient.php │ ├── MapiMessageFactory.php │ ├── Message │ ├── Attachment.php │ ├── Message.php │ └── Recipient.php │ ├── Mime │ ├── ConversionFactory.php │ ├── HeaderCollection.php │ ├── MimeConvertible.php │ └── Swiftmailer │ │ ├── Adapter │ │ ├── DependencySet.php │ │ ├── HeaderFactory.php │ │ └── UnstructuredHeader.php │ │ ├── Attachment.php │ │ ├── Factory.php │ │ └── Message.php │ ├── OLE │ ├── CompoundDocumentElement.php │ ├── CompoundDocumentFactory.php │ ├── Guid │ │ └── OleGuid.php │ ├── Pear │ │ ├── DocumentElement.php │ │ ├── DocumentElementCollection.php │ │ ├── DocumentFactory.php │ │ └── StreamWrapper.php │ ├── RTF │ │ ├── CompressionCodec.php │ │ ├── EmbeddedHTML.php │ │ └── StringScanner.php │ └── Time │ │ └── OleTime.php │ ├── Property │ ├── PropertyCollection.php │ ├── PropertyKey.php │ ├── PropertySet.php │ ├── PropertySetConstants.php │ ├── PropertyStore.php │ └── PropertyStoreEncodings.php │ └── Schema │ ├── MapiFieldsMessage.yaml │ └── MapiFieldsOther.yaml └── tests ├── MAPI ├── MapiMessageFactoryTest.php └── OLE │ └── Time │ └── OleTimeTest.php └── _files ├── Swetlana.msg └── sample.msg /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .vscode/ 3 | vendor/ 4 | composer.lock 5 | .phpunit.result.cache -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 hfig 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hfig/MAPI 2 | 3 | ## Introduction 4 | ``Hfig/MAPI`` is a PHP library for reading and working with Microsoft Outlook/Exchange format email messages (``.msg`` files, aka MAPI documents). 5 | 6 | The library can parse MAPI documents, and programatically extract the properties and streams of the document. 7 | 8 | It can be used to convert messages to ``RFC822`` (MIME) format by utilising the [``Swiftmailer/Switfmailer``](https://github.com/swiftmailer/swiftmailer) library. 9 | 10 | The library is ostensibly a port of the [``aquasync/ruby-msg``](https://github.com/aquasync/ruby-msg) library from the Ruby language. Some questionable PHP architectural decisions come from migrating Ruby constructs. Some awful, but functional, code comes from a direct migration of the Ruby library. 11 | 12 | Compared to ``ruby-msg``, this library: 13 | 14 | * Does not implement a command line entry point for message conversion 15 | * Only handles MAPI documents in ``.msg`` files (or a PHP stream of ``.msg`` file data) 16 | * Does not implement the conversion of RTF-format message bodies to plain text or HTML 17 | * Has better support for decoding MAPI document properties 18 | * Produces a more faithful MIME conversion of the MAPI document 19 | 20 | ## Installation 21 | 22 | Install using composer 23 | 24 | ```sh 25 | composer require hfig/mapi 26 | 27 | # our dependency pear/ole has an unresolved dependency currently 28 | # therefore you need to install one of these explicitly: 29 | composer require pear/pear-core-minimal 30 | # or 31 | composer require pear/pear-core 32 | 33 | # needed if you want to convert to MIME format 34 | composer require swiftmailer/swiftmailer 35 | ``` 36 | 37 | ## Usage 38 | 39 | ### Accessing document properties 40 | 41 | ```php 42 | require 'vendor/autoload.php'; 43 | 44 | use Hfig\MAPI; 45 | use Hfig\MAPI\OLE\Pear; 46 | 47 | // message parsing and file IO are kept separate 48 | $messageFactory = new MAPI\MapiMessageFactory(); 49 | $documentFactory = new Pear\DocumentFactory(); 50 | 51 | $ole = $documentFactory->createFromFile('source-file.msg'); 52 | $message = $messageFactory->parseMessage($ole); 53 | 54 | // raw properties are available from the "properties" member 55 | echo $message->properties['subject'], "\n"; 56 | 57 | // some properties have helper methods 58 | echo $message->getSender(), "\n"; 59 | echo $message->getBody(), "\n"; 60 | 61 | // recipients and attachments are composed objects 62 | foreach ($message->getRecipients() as $recipient) { 63 | // eg "To: John Smith 64 | echo sprintf('%s: %s', $recipient->getType(), (string)$recipient), "\n"; 65 | } 66 | ``` 67 | 68 | ### Conversion to MIME 69 | ```php 70 | require 'vendor/autoload.php'; 71 | 72 | use Hfig\MAPI; 73 | use Hfig\MAPI\OLE\Pear; 74 | use Hfig\MAPI\Mime\Swiftmailer; 75 | 76 | $messageFactory = new MAPI\MapiMessageFactory(new Swiftmailer\Factory()); 77 | $documentFactory = new Pear\DocumentFactory(); 78 | 79 | $ole = $documentFactory->createFromFile('source-file.msg'); 80 | $message = $messageFactory->parseMessage($ole); 81 | 82 | // returns a \Swift_Message object representaiton of the email 83 | $mime = $message->toMime(); 84 | 85 | // or write it to file 86 | $fd = fopen('dest-file.eml', 'w'); 87 | $message->copyMimeToStream($fd); 88 | ``` 89 | 90 | ## Property Names 91 | 92 | MAPI property names are documented by Microsoft in an inscrutible manner at https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/cc815517(v%3doffice.12). 93 | 94 | A list of property names available for use in this library is included in the ``MAPI/Schema/MapiFieldsMessage.yaml`` file. 95 | 96 | Keeping with the convention of the ``ruby-msg`` library, message properties are converted to a _nice_ name: 97 | 98 | * ``PR_DISPLAY_NAME`` => ``display_name`` 99 | * ``PR_ATTACH_FILENAME`` => ``attach_filename`` 100 | * etc 101 | 102 | ## About MAPI Documents 103 | 104 | MAPI documents are Microsoft OLE Structured Storage databases, much like old ``.doc``, ``.xls`` and ``.ppt`` files. They consist of an internal directory structure of streams of 4K blocks that resemble a virtual FAT filesystem. For economy reasons, every structured storage database contains a root stream which contains 64-byte blocks which in turn stores small pieces of data. For further information see [Microsoft's documentation](https://docs.microsoft.com/en-us/windows/desktop/Stg/structured-storage-start-page). 105 | 106 | The PEAR library ``OLE`` can read these database files. However this PEAR library is ancient and does not meet any modern coding standards, hence it's kept entirely decoupled from the message parsing code of this library. Hopefully it can be replaced one day. 107 | 108 | ## Alternatives 109 | 110 | For PHP, installing the [Kopano Core](https://github.com/Kopano-dev/kopano-core) project on your server will make available ``ext-mapi``, a PHP extension which implements allows access to a port of the low-level MAPI Win32 API. 111 | 112 | See also: 113 | * [``Email::Outlook::Message``](https://github.com/mvz/email-outlook-message-perl) (Perl) 114 | * [``aquasync/ruby-msg``](https://github.com/aquasync/ruby-msg) (Ruby) 115 | * [``JTNEF``](https://www.freeutils.net/source/jtnef/) (Java) 116 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hfig/mapi", 3 | "description": "Pure PHP library for reading and manipulating Microsoft Outlook .msg messages (MAPI documents)", 4 | "license": "MIT", 5 | "require": { 6 | "php": "^7.1||^8.0", 7 | "ext-bcmath": "*", 8 | "ext-mbstring": "*", 9 | "pear/ole": "^1.0", 10 | "symfony/yaml": "^4.1||^5.0||^6.0||^7.0", 11 | "ramsey/uuid": "^3.8||^4.0", 12 | "psr/log": "^1.0||^2.0||^3.0" 13 | }, 14 | "require-dev": { 15 | "swiftmailer/swiftmailer": "^6.1", 16 | "phpunit/phpunit": "^8.3", 17 | "pear/pear-core-minimal": "^1.10" 18 | }, 19 | "suggest": { 20 | "swiftmailer/swiftmailer": "Conversion to MIME (eml file) message format" 21 | }, 22 | "prefer-stable": true, 23 | "autoload": { 24 | "psr-4": { 25 | "Hfig\\MAPI\\": "src/MAPI" 26 | } 27 | }, 28 | "autoload-dev": { 29 | "psr-4": { 30 | "Hfig\\MAPI\\Tests\\": "tests/MAPI" 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | tests 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/MAPI/Item/Attachment.php: -------------------------------------------------------------------------------- 1 | properties['attach_long_filename'] ?? $this->properties['attach_filename'] ?? ''; 13 | } 14 | 15 | public function getData() 16 | { 17 | return $this->embedded_msg ?? $this->embedded_ole ?? $this->properties['attach_data'] ?? null; 18 | } 19 | 20 | public function copyToStream($stream) 21 | { 22 | if ($this->embedded_ole) { 23 | return $this->storeEmbeddedOle($stream); 24 | } 25 | fwrite($stream, $this->getData() ?? ''); 26 | } 27 | 28 | protected function storeEmbeddedOle($stream): void 29 | { 30 | // this is very untested... 31 | //throw new \RuntimeException('Saving an OLE Compound Document is not supported'); 32 | 33 | $this->embedded_ole->saveToStream($stream); 34 | } 35 | 36 | 37 | } -------------------------------------------------------------------------------- /src/MAPI/Item/MapiObject.php: -------------------------------------------------------------------------------- 1 | properties = $properties; 12 | } 13 | 14 | 15 | } -------------------------------------------------------------------------------- /src/MAPI/Item/Message.php: -------------------------------------------------------------------------------- 1 | 'From', 9 | 1 => 'To', 10 | 2 => 'Cc', 11 | 3 => 'Bcc' 12 | ]; 13 | 14 | //# some kind of best effort guess for converting to standard mime style format. 15 | //# there are some rules for encoding non 7bit stuff in mail headers. should obey 16 | //# that here, as these strings could be unicode 17 | //# email_address will be an EX:/ address (X.400?), unless external recipient. the 18 | //# other two we try first. 19 | //# consider using entry id for this too. 20 | public function getName() 21 | { 22 | $name = $this->properties['transmittable_display_name'] ?? $this->properties['display_name'] ?? ''; 23 | return preg_replace('/^\'(.*)\'/', '\1', $name); 24 | } 25 | 26 | public function getEmail() 27 | { 28 | return $this->properties['smtp_address'] ?? 29 | $this->properties['org_email_addr'] ?? 30 | $this->properties['email_address'] ?? 31 | ''; 32 | } 33 | 34 | public function getType() 35 | { 36 | $type = $this->properties['recipient_type']; 37 | if (isset(static::RECIPIENT_TYPES[$type])) { 38 | return static::RECIPIENT_TYPES[$type]; 39 | } 40 | 41 | return $type; 42 | } 43 | 44 | public function getAddressType() 45 | { 46 | $type = $this->properties['addrtype'] ?? 'Unknown'; 47 | return $type; 48 | 49 | /*if ($this->properties['smtp_address']) { 50 | return 'SMTP'; 51 | } 52 | if ($this->properties['org_email_addr']) { 53 | return 'ORG'; 54 | } 55 | if ($this->properties['email_address']) { 56 | return 'MAPI'; 57 | } 58 | return 'Unknown';*/ 59 | 60 | } 61 | 62 | public function __toString() 63 | { 64 | $name = $this->getName(); 65 | $email = $this->getEmail(); 66 | 67 | //echo $this->getAddressType() . ': ' . sprintf('%s <%s>', $name, unpack('H*', $email)[1]) . "\n"; 68 | 69 | if ($name && $name != $email) { 70 | return sprintf('%s <%s>', $name, $email); 71 | } 72 | return $email ?: $name; 73 | } 74 | 75 | 76 | 77 | } -------------------------------------------------------------------------------- /src/MAPI/MapiMessageFactory.php: -------------------------------------------------------------------------------- 1 | parent = $conversionFactory; 15 | } 16 | 17 | public function parseMessage(Element $root) 18 | { 19 | if ($this->parent) { 20 | return $this->parent->parseMessage($root); 21 | } 22 | return new \Hfig\MAPI\Message\Message($root); 23 | } 24 | } -------------------------------------------------------------------------------- /src/MAPI/Message/Attachment.php: -------------------------------------------------------------------------------- 1 | obj = $obj; 27 | $this->parent = $parent; 28 | 29 | $this->embedded_msg = null; 30 | $this->embedded_ole = null; 31 | $this->embedded_ole_type = ''; 32 | 33 | // Set properties 34 | parent::__construct(new PropertySet( 35 | new PropertyStore($obj, $parent->getNameId()) 36 | )); 37 | 38 | // initialise property set 39 | //super PropertySet.new(PropertyStore.load(@obj)) 40 | //Msg.warn_unknown @obj 41 | foreach ($obj->getChildren() as $child) { 42 | if ($child->isDirectory() && preg_match(PropertyStore::SUBSTG_RX, $child->getName(), $matches)) { 43 | // magic numbers?? 44 | if ($matches[1] == '3701' && strtolower($matches[2]) == '000d') { 45 | $this->embedded_ole = $child; 46 | } 47 | } 48 | 49 | } 50 | 51 | if ($this->embedded_ole) { 52 | $type = $this->checkEmbeddedOleType(); 53 | if ($type == 'Microsoft Office Outlook Message') { 54 | $this->embedded_msg = new Message($this->embedded_ole, $parent); 55 | } 56 | } 57 | 58 | } 59 | 60 | protected function checkEmbeddedOleType() 61 | { 62 | $found = 0; 63 | $type = null; 64 | 65 | foreach ($this->embedded_ole->getChildren() as $child) { 66 | if (preg_match('/__(substg|properties|recip|attach|nameid)/', $child->getName())) { 67 | $found++; 68 | if ($found > 2) break; 69 | } 70 | } 71 | if ($found > 2) { 72 | $type = 'Microsoft Office Outlook Message'; 73 | } 74 | 75 | if ($type) { 76 | $this->embedded_ole_type = $type; 77 | } 78 | 79 | return $type; 80 | 81 | } 82 | 83 | public function getMimeType() 84 | { 85 | 86 | $mime = $this->properties['attach_mime_tag'] ?? $this->embedded_ole_type; 87 | if (!$mime) { 88 | $mime = 'application/octet-stream'; 89 | } 90 | 91 | 92 | return $mime; 93 | } 94 | 95 | public function getContentId(): ?string 96 | { 97 | return $this->properties['attach_content_id'] ?? null; 98 | } 99 | 100 | public function getEmbeddedOleData(): ?string 101 | { 102 | $compobj = $this->properties["\01CompObj"]; 103 | if (is_null($compobj)) { 104 | return null; 105 | } 106 | return substr($compobj, 32); 107 | } 108 | 109 | public function isValid(): bool 110 | { 111 | return $this->properties !== null; 112 | } 113 | 114 | public function __get($name) 115 | { 116 | if ($name == 'properties') { 117 | return $this->properties; 118 | } 119 | 120 | return null; 121 | } 122 | } -------------------------------------------------------------------------------- /src/MAPI/Message/Message.php: -------------------------------------------------------------------------------- 1 | obj = $obj; 51 | $this->parent = $parent; 52 | 53 | $this->properties = new PropertySet( 54 | new PropertyStore($obj, ($parent) ? $parent->getNameId() : null) 55 | ); 56 | 57 | $this->buildAttachments(); 58 | $this->buildRecipients(); 59 | 60 | 61 | } 62 | 63 | 64 | 65 | protected function buildAttachments() 66 | { 67 | foreach ($this->obj->getChildren() as $child) { 68 | if ($child->isDirectory() && preg_match(self::ATTACH_RX, $child->getName())) { 69 | $attachment = new Attachment($child, $this); 70 | if ($attachment->isValid()) { 71 | $this->attachments[] = $attachment; 72 | } 73 | } 74 | } 75 | } 76 | 77 | protected function buildRecipients() 78 | { 79 | foreach ($this->obj->getChildren() as $child) { 80 | if ($child->isDirectory() && preg_match(self::RECIP_RX, $child->getName())) { 81 | 82 | //echo 'Got child . ' . $child->getName() . "\n"; 83 | 84 | $recipient = new Recipient($child, $this); 85 | $this->recipients[] = $recipient; 86 | } 87 | } 88 | } 89 | 90 | /** @return Attachment[] */ 91 | public function getAttachments(): array 92 | { 93 | return $this->attachments; 94 | } 95 | 96 | /** @return Recipient[] */ 97 | public function getRecipients(): array 98 | { 99 | return $this->recipients; 100 | } 101 | 102 | public function getRecipientsOfType($type): array 103 | { 104 | $response = []; 105 | foreach ($this->recipients as $r) { 106 | if ($r->getType() == $type) { 107 | $response[] = $r; 108 | } 109 | } 110 | return $response; 111 | } 112 | 113 | public function getNameId() 114 | { 115 | return $this->properties->getStore()->getNameId(); 116 | } 117 | 118 | public function getInternetMessageId(): ?string 119 | { 120 | return $this->properties['internet_message_id'] ?? null; 121 | } 122 | 123 | public function getBody() 124 | { 125 | if ($this->bodyPlain) return $this->bodyPlain; 126 | 127 | if ($this->properties['body']) { 128 | $this->bodyPlain = $this->properties['body']; 129 | } 130 | 131 | // parse from RTF 132 | if (!$this->bodyPlain) { 133 | //jstewmc/rtf 134 | throw new \Exception('No Plain Text body. Convert from RTF not implemented'); 135 | } 136 | 137 | return $this->bodyPlain; 138 | } 139 | 140 | public function getBodyRTF() 141 | { 142 | if ($this->bodyRTF) return $this->bodyRTF; 143 | 144 | if ($this->properties['rtf_compressed']) { 145 | 146 | $this->bodyRTF = RTF\CompressionCodec::decode($this->properties['rtf_compressed']); 147 | } 148 | 149 | return $this->bodyRTF; 150 | } 151 | 152 | public function getBodyHTML() 153 | { 154 | if ($this->bodyHTML) return $this->bodyHTML; 155 | 156 | if ($this->properties['body_html']) { 157 | $this->bodyHTML = $this->properties['body_html']; 158 | 159 | if ($this->bodyHTML) { 160 | $this->bodyHTML = trim($this->bodyHTML); 161 | } 162 | } 163 | 164 | if (!$this->bodyHTML) { 165 | if ($rtf = $this->getBodyRTF()) { 166 | $this->bodyHTML = RTF\EmbeddedHTML::extract($rtf); 167 | } 168 | 169 | if (!$this->bodyHTML) { 170 | //jstewmc/rtf 171 | throw new \Exception('No HTML or Embedded RTF body. Convert from RTF not implemented'); 172 | } 173 | } 174 | 175 | return $this->bodyHTML; 176 | } 177 | 178 | public function getSender() 179 | { 180 | $senderName = $this->properties['sender_name']; 181 | $senderAddr = $this->properties['sender_email_address']; 182 | $senderType = $this->properties['sender_addrtype']; 183 | 184 | $from = ''; 185 | if ($senderType == 'SMTP') { 186 | $from = $senderAddr; 187 | } 188 | else { 189 | $from = $this->properties['sender_smtp_address'] ?? 190 | $this->properties['sender_representing_smtp_address'] ?? 191 | // synthesise?? 192 | // for now settle on type:address eg X400: 193 | sprintf('%s:%s', $senderType, $senderAddr); 194 | } 195 | 196 | if ($senderName) { 197 | $from = sprintf('%s <%s>', $senderName, $from); 198 | } 199 | 200 | return $from; 201 | } 202 | 203 | public function getSendTime(): ?\DateTime 204 | { 205 | $sendTime = $this->properties['client_submit_time']; 206 | 207 | if (!$sendTime) { 208 | return null; 209 | } 210 | 211 | return \DateTime::createFromFormat('U',$sendTime); 212 | } 213 | 214 | public function properties(): PropertySet 215 | { 216 | return $this->properties; 217 | } 218 | 219 | public function __get($name) 220 | { 221 | if ($name == 'properties') { 222 | return $this->properties; 223 | } 224 | 225 | return null; 226 | } 227 | 228 | 229 | 230 | } 231 | -------------------------------------------------------------------------------- /src/MAPI/Message/Recipient.php: -------------------------------------------------------------------------------- 1 | obj = $obj; 22 | 23 | // initialise property set 24 | $this->properties = new PropertySet( 25 | new PropertyStore($obj, $parent->getNameId()) 26 | ); 27 | } 28 | 29 | public function __get($name) 30 | { 31 | if ($name == 'properties') { 32 | return $this->properties; 33 | } 34 | 35 | return null; 36 | } 37 | } -------------------------------------------------------------------------------- /src/MAPI/Mime/ConversionFactory.php: -------------------------------------------------------------------------------- 1 | rawHeaders); 12 | } 13 | 14 | public function add($header, $value = null): void 15 | { 16 | if (is_null($value)) { 17 | //echo $header . "\n"; 18 | @list($header, $value) = explode(':', $header, 2); 19 | //if (!$value) throw new \Exception('No value for ' . $header); 20 | $value = ltrim($value); 21 | } 22 | 23 | $key = strtolower($header); 24 | $val = [ 25 | 'rawkey' => $header, 26 | 'value' => $value, 27 | ]; 28 | $val = (object)$val; 29 | 30 | 31 | if (isset($this->rawHeaders[$key])) { 32 | if (!is_array($this->rawHeaders[$key])) { 33 | $this->rawHeaders[$key] = [ $this->rawHeaders[$key] ]; 34 | } 35 | 36 | $this->rawHeaders[$key][] = $val; 37 | } 38 | else { 39 | $this->rawHeaders[$key] = $val; 40 | } 41 | } 42 | 43 | public function set($header, $value): void 44 | { 45 | $key = strtolower($header); 46 | $val = [ 47 | 'rawkey' => $header, 48 | 'value' => $value, 49 | ]; 50 | $val = (object)$val; 51 | 52 | $this->rawHeaders[$key] = $val; 53 | } 54 | 55 | public function get($header) 56 | { 57 | $key = strtolower($header); 58 | if (!isset($this->rawHeaders[$key])) { 59 | return null; 60 | } 61 | 62 | return $this->rawHeaders[$key]; 63 | } 64 | 65 | public function getValue($header) 66 | { 67 | $raw = $this->get($header); 68 | 69 | if (is_null($raw)) return null; 70 | if (is_array($raw)) { 71 | return array_map(function ($e) { 72 | return $e->value; 73 | }, $raw); 74 | } 75 | 76 | return $raw->value; 77 | 78 | } 79 | 80 | public function has($header): bool 81 | { 82 | $key = strtolower($header); 83 | return isset($this->rawHeaders[$key]); 84 | } 85 | 86 | public function unset($header): void 87 | { 88 | $key = strtolower($header); 89 | unset($this->rawHeaders[$key]); 90 | } 91 | } -------------------------------------------------------------------------------- /src/MAPI/Mime/MimeConvertible.php: -------------------------------------------------------------------------------- 1 | register('mime.headerfactory') 19 | ->asNewInstanceOf(HeaderFactory::class) 20 | ->withDependencies([ 21 | 'mime.qpheaderencoder', 22 | 'mime.rfc2231encoder', 23 | 'email.validator', 24 | 'properties.charset', 25 | 'address.idnaddressencoder', 26 | ]); 27 | 28 | $registered = true; 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /src/MAPI/Mime/Swiftmailer/Adapter/HeaderFactory.php: -------------------------------------------------------------------------------- 1 | encoder = $encoder; 22 | $this->charset = $charset; 23 | } 24 | 25 | public function createTextHeader($name, $value = null): UnstructuredHeader 26 | { 27 | $header = new UnstructuredHeader($name, $this->encoder); 28 | if (isset($value)) { 29 | $header->setFieldBodyModel($value); 30 | } 31 | $this->setHeaderCharset($header); 32 | 33 | return $header; 34 | } 35 | 36 | protected function setHeaderCharset(Swift_Mime_Header $header): void 37 | { 38 | if (isset($this->charset)) { 39 | $header->setCharset($this->charset); 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /src/MAPI/Mime/Swiftmailer/Adapter/UnstructuredHeader.php: -------------------------------------------------------------------------------- 1 | obj, $attachment->parent); 18 | } 19 | 20 | public function toMime(): \Swift_Attachment 21 | { 22 | DependencySet::register(); 23 | 24 | $attachment = new \Swift_Attachment(); 25 | 26 | if ($this->getMimeType() != 'Microsoft Office Outlook Message') { 27 | $attachment->setFilename($this->getFilename()); 28 | $attachment->setContentType($this->getMimeType()); 29 | } 30 | else { 31 | $attachment->setFilename($this->getFilename() . '.eml'); 32 | $attachment->setContentType('message/rfc822'); 33 | } 34 | 35 | if ($data = $this->properties['attach_content_disposition']) { 36 | $attachment->setDisposition($data); 37 | } 38 | 39 | if ($data = $this->properties['attach_content_location']) { 40 | $attachment->getHeaders()->addTextHeader('Content-Location', $data); 41 | } 42 | 43 | if ($data = $this->properties['attach_content_id']) { 44 | $attachment->setId($data); 45 | } 46 | 47 | if ($this->embedded_msg) { 48 | $attachment->setBody( 49 | Message::wrap($this->embedded_msg)->toMime() 50 | ); 51 | } 52 | elseif ($this->embedded_ole) { 53 | // in practice this scenario doesn't seem to occur 54 | // MS Office documents are attached as files not 55 | // embedded ole objects 56 | throw new \Exception('Not implemented: saving emebed OLE content'); 57 | } 58 | else { 59 | $attachment->setBody($this->getData()); 60 | } 61 | 62 | return $attachment; 63 | } 64 | 65 | public function toMimeString(): string 66 | { 67 | return (string)$this->toMime(); 68 | } 69 | 70 | public function copyMimeToStream($stream): void 71 | { 72 | fwrite($stream, $this->toMimeString()); 73 | } 74 | } -------------------------------------------------------------------------------- /src/MAPI/Mime/Swiftmailer/Factory.php: -------------------------------------------------------------------------------- 1 | muteConversionExceptions = $muteConversionExceptions; 17 | } 18 | 19 | public function parseMessage(Element $root): Message 20 | { 21 | $message = new Message($root); 22 | $message->setMuteConversionExceptions($this->muteConversionExceptions); 23 | 24 | return $message; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/MAPI/Mime/Swiftmailer/Message.php: -------------------------------------------------------------------------------- 1 | obj, $message->parent); 25 | } 26 | 27 | public function toMime(): \Swift_Message 28 | { 29 | DependencySet::register(); 30 | 31 | $message = new \Swift_Message(); 32 | $message->setEncoder(new \Swift_Mime_ContentEncoder_RawContentEncoder()); 33 | 34 | 35 | // get headers 36 | $headers = $this->translatePropertyHeaders(); 37 | 38 | // add them to the message 39 | $add = [$message, 'setTo']; // function 40 | try { 41 | $this->addRecipientHeaders('To', $headers, $add); 42 | } 43 | catch (\Swift_RfcComplianceException $e) { 44 | if (!$this->muteConversionExceptions) { 45 | throw $e; 46 | } 47 | $this->conversionExceptionsList[] = $e; 48 | } 49 | $headers->unset('To'); 50 | 51 | $add = [$message, 'setCc']; // function 52 | try { 53 | $this->addRecipientHeaders('Cc', $headers, $add); 54 | } 55 | catch (\Swift_RfcComplianceException $e) { 56 | if (!$this->muteConversionExceptions) { 57 | throw $e; 58 | } 59 | $this->conversionExceptionsList[] = $e; 60 | } 61 | $headers->unset('Cc'); 62 | 63 | $add = [$message, 'setBcc']; // function 64 | try { 65 | $this->addRecipientHeaders('Bcc', $headers, $add); 66 | } 67 | catch (\Swift_RfcComplianceException $e) { 68 | if (!$this->muteConversionExceptions) { 69 | throw $e; 70 | } 71 | $this->conversionExceptionsList[] = $e;} 72 | $headers->unset('Bcc'); 73 | 74 | $add = [$message, 'setFrom']; // function 75 | try { 76 | $this->addRecipientHeaders('From', $headers, $add); 77 | } 78 | catch (\Swift_RfcComplianceException $e) { 79 | if (!$this->muteConversionExceptions) { 80 | throw $e; 81 | } 82 | $this->conversionExceptionsList[] = $e; 83 | } 84 | $headers->unset('From'); 85 | 86 | 87 | try { 88 | $message->setId(trim($headers->getValue('Message-ID'), '<>')); 89 | } 90 | catch (\Swift_RfcComplianceException $e) { 91 | if (!$this->muteConversionExceptions) { 92 | throw $e; 93 | } 94 | $this->conversionExceptionsList[] = $e; 95 | } 96 | 97 | try { 98 | $message->setDate(new \DateTime($headers->getValue('Date'))); 99 | } 100 | catch (\Exception $e) { // the \DateTime can throw \Exception 101 | if (!$this->muteConversionExceptions) { 102 | throw $e; 103 | } 104 | $this->conversionExceptionsList[] = $e; 105 | } 106 | 107 | if ($boundary = $this->getMimeBoundary($headers)) { 108 | $message->setBoundary($boundary); 109 | } 110 | 111 | 112 | $headers->unset('Message-ID'); 113 | $headers->unset('Date'); 114 | $headers->unset('Mime-Version'); 115 | $headers->unset('Content-Type'); 116 | 117 | $add = [$message->getHeaders(), 'addTextHeader']; 118 | $this->addPlainHeaders($headers, $add); 119 | 120 | 121 | // body 122 | $hasHtml = false; 123 | $bodyBoundary = ''; 124 | if ($boundary) { 125 | if (preg_match('~^_(\d\d\d)_([^_]+)_~', $boundary, $matches)) { 126 | $bodyBoundary = sprintf('_%03d_%s_', (int)$matches[1]+1, $matches[2]); 127 | } 128 | } 129 | try { 130 | $html = $this->getBodyHTML(); 131 | if ($html) { 132 | $hasHtml = true; 133 | } 134 | } 135 | catch (\Exception $e) { // getBodyHTML() can throw \Exception 136 | if (!$this->muteConversionExceptions) { 137 | throw $e; 138 | } 139 | $this->conversionExceptionsList[] = $e; 140 | } 141 | 142 | if (!$hasHtml) { 143 | try { 144 | $message->setBody($this->getBody(), 'text/plain'); 145 | } 146 | catch (\Exception $e) { // getBody() can throw \Exception 147 | if (!$this->muteConversionExceptions) { 148 | throw $e; 149 | } 150 | $this->conversionExceptionsList[] = $e; 151 | } 152 | } 153 | else { 154 | // build multi-part 155 | // (simple method is to just call addPart() on message but we can't control the ID 156 | $multipart = new \Swift_Attachment(); 157 | $multipart->setContentType('multipart/alternative'); 158 | $multipart->setEncoder($message->getEncoder()); 159 | if ($bodyBoundary) { 160 | $multipart->setBoundary($bodyBoundary); 161 | } 162 | try { 163 | $multipart->setBody($this->getBody(), 'text/plain'); 164 | } 165 | catch (\Exception $e) { // getBody() can throw \Exception 166 | if (!$this->muteConversionExceptions) { 167 | throw $e; 168 | } 169 | $this->conversionExceptionsList[] = $e; 170 | } 171 | 172 | $part = new \Swift_MimePart($html, 'text/html', null); 173 | $part->setEncoder($message->getEncoder()); 174 | 175 | 176 | $message->attach($multipart); 177 | $multipart->setChildren(array_merge($multipart->getChildren(), [$part])); 178 | } 179 | 180 | 181 | // attachments 182 | foreach ($this->getAttachments() as $a) { 183 | $wa = Attachment::wrap($a); 184 | $attachment = $wa->toMime(); 185 | 186 | $message->attach($attachment); 187 | } 188 | 189 | return $message; 190 | } 191 | 192 | public function toMimeString(): string 193 | { 194 | return (string) $this->toMime(); 195 | } 196 | 197 | public function copyMimeToStream($stream) 198 | { 199 | // TODO: use \Swift_Message::toByteStream instead 200 | fwrite($stream, $this->toMimeString()); 201 | } 202 | 203 | public function setMuteConversionExceptions(bool $muteConversionExceptions) 204 | { 205 | $this->muteConversionExceptions = $muteConversionExceptions; 206 | } 207 | 208 | protected function addRecipientHeaders($field, HeaderCollection $headers, callable $add) 209 | { 210 | $recipient = $headers->getValue($field); 211 | 212 | if (is_null($recipient)) { 213 | return; 214 | } 215 | 216 | if (!is_array($recipient)) { 217 | $recipient = [$recipient]; 218 | } 219 | 220 | 221 | $map = []; 222 | foreach ($recipient as $r) { 223 | if (preg_match('/^((?:"[^"]*")|.+) (<.+>)$/', $r, $matches)) { 224 | $map[trim($matches[2], '<>')] = $matches[1]; 225 | } 226 | else { 227 | $map[] = $r; 228 | } 229 | } 230 | 231 | $add($map); 232 | } 233 | 234 | protected function addPlainHeaders(HeaderCollection $headers, callable $add) 235 | { 236 | foreach ($headers as $key => $value) 237 | { 238 | if (is_array($value)) { 239 | foreach ($value as $ikey => $ivalue) { 240 | $header = $ivalue->rawkey; 241 | $value = $ivalue->value; 242 | $add($header, $value); 243 | } 244 | } 245 | else { 246 | $header = $value->rawkey; 247 | $value = $value->value; 248 | $add($header, $value); 249 | } 250 | } 251 | } 252 | 253 | protected function translatePropertyHeaders() 254 | { 255 | $rawHeaders = new HeaderCollection(); 256 | 257 | // additional headers - they can be multiple lines 258 | $transport = []; 259 | $transportKey = 0; 260 | 261 | $transportRaw = explode("\r\n", $this->properties['transport_message_headers']); 262 | foreach ($transportRaw as $v) { 263 | if (!$v) continue; 264 | 265 | if ($v[0] !== "\t" && $v[0] !== ' ') { 266 | $transportKey++; 267 | $transport[$transportKey] = $v; 268 | } 269 | else { 270 | $transport[$transportKey] = $transport[$transportKey] . "\r\n" . $v; 271 | } 272 | } 273 | 274 | foreach ($transport as $header) { 275 | $rawHeaders->add($header); 276 | } 277 | 278 | 279 | 280 | // sender 281 | $senderType = $this->properties['sender_addrtype']; 282 | if ($senderType == 'SMTP') { 283 | $rawHeaders->set('From', $this->getSender()); 284 | } 285 | elseif (!$rawHeaders->has('From')) { 286 | if ($from = $this->getSender()) { 287 | $rawHeaders->set('From', $from); 288 | } 289 | } 290 | 291 | 292 | // recipients 293 | foreach ($this->getRecipients() as $r) { 294 | $rawHeaders->add($r->getType(), (string)$r); 295 | } 296 | 297 | // subject - preference to msg properties 298 | if ($this->properties['subject']) { 299 | $rawHeaders->set('Subject', $this->properties['subject']); 300 | } 301 | 302 | // date - preference to transport headers 303 | if (!$rawHeaders->has('Date')) { 304 | $date = $this->properties['message_delivery_time'] ?? $this->properties['client_submit_time'] 305 | ?? $this->properties['last_modification_time'] ?? $this->properties['creation_time'] ?? null; 306 | if (!is_null($date)) { 307 | // ruby-msg suggests this is stored as an iso8601 timestamp in the message properties, not a Windows timestamp 308 | $date = date('r', strtotime($date)); 309 | $rawHeaders->set('Date', $date); 310 | } 311 | } 312 | 313 | // other headers map 314 | $map = [ 315 | ['internet_message_id', 'Message-ID'], 316 | ['in_reply_to_id', 'In-Reply-To'], 317 | 318 | ['importance', 'Importance', function($val) { return ($val == '1') ? null : $val; }], 319 | ['priority', 'Priority', function($val) { return ($val == '1') ? null : $val; }], 320 | ['sensitivity', 'Sensitivity', function($val) { return ($val == '0') ? null : $val; }], 321 | 322 | ['conversation_topic', 'Thread-Topic'], 323 | 324 | //# not sure of the distinction here 325 | //# :originator_delivery_report_requested ?? 326 | ['read_receipt_requested', 'Disposition-Notification-To', function($val) use ($rawHeaders) { 327 | $from = $rawHeaders->getValue('From'); 328 | 329 | if (preg_match('/^((?:"[^"]*")|.+) (<.+>)$/', $from, $matches)) { 330 | $from = trim($matches[2], '<>'); 331 | } 332 | return $from; 333 | }] 334 | ]; 335 | foreach ($map as $do) { 336 | $value = $this->properties[$do[0]]; 337 | if (isset($do[2])) { 338 | $value = $do[2]($value); 339 | } 340 | if (!is_null($value)) { 341 | $rawHeaders->set($do[1], $value); 342 | } 343 | } 344 | 345 | return $rawHeaders; 346 | 347 | } 348 | 349 | protected function getMimeBoundary(HeaderCollection $headers) 350 | { 351 | // firstly - use the value in the headers 352 | if ($type = $headers->getValue('Content-Type')) { 353 | if (preg_match('~boundary="([a-zA-z0-9\'()+_,-.\/:=? ]+)"~', $type, $matches)) { 354 | return $matches[1]; 355 | } 356 | } 357 | 358 | // if never sent via SMTP then it has to be synthesised 359 | // this is done using the message id 360 | if ($mid = $headers->getValue('Message-ID')) { 361 | $recount = 0; 362 | $mid = preg_replace('~[^a-zA-z0-9\'()+_,-.\/:=? ]~', '', $mid, -1, $recount); 363 | $mid = substr($mid, 0, 55); 364 | return sprintf('_%03d_%s_', $recount, $mid); 365 | } 366 | return ''; 367 | } 368 | 369 | /** 370 | * Returns the list of conversion exceptions. 371 | * 372 | * @return array 373 | */ 374 | public function getConversionExceptionsList() : array { 375 | return $this->conversionExceptionsList; 376 | } 377 | } 378 | -------------------------------------------------------------------------------- /src/MAPI/OLE/CompoundDocumentElement.php: -------------------------------------------------------------------------------- 1 | setCodec( 19 | new GuidStringCodec(self::$factory->getUuidBuilder()) 20 | ); 21 | } 22 | 23 | return self::$factory; 24 | } 25 | 26 | public static function fromBytes($bytes): OleGuidInterface 27 | { 28 | return self::getFactory()->fromBytes($bytes); 29 | } 30 | 31 | public static function fromString($guid): OleGuidInterface 32 | { 33 | return self::getFactory()->fromString($guid); 34 | } 35 | } -------------------------------------------------------------------------------- /src/MAPI/OLE/Pear/DocumentElement.php: -------------------------------------------------------------------------------- 1 | ole on the PPS 22 | // element is never actually set (ie is a bug in PEAR::OLE) 23 | public function __construct(OLE $file, OLE_PPS $pps) 24 | { 25 | $this->pps = $pps; 26 | $this->ole = $file; 27 | //$this->wrappedChildren = null; 28 | } 29 | 30 | public function getIndex() 31 | { 32 | return $this->pps->No; 33 | } 34 | 35 | public function setIndex($index): void 36 | { 37 | $this->pps->No = $index; 38 | } 39 | 40 | public function getName() 41 | { 42 | return $this->pps->Name; 43 | } 44 | 45 | public function setName($name): void 46 | { 47 | $this->pps->Name = $name; 48 | } 49 | 50 | public function getType(): ?int 51 | { 52 | static $map = [ 53 | OLE_PPS_TYPE_ROOT => CompoundDocumentElement::TYPE_ROOT, 54 | OLE_PPS_TYPE_DIR => CompoundDocumentElement::TYPE_DIRECTORY, 55 | OLE_PPS_TYPE_FILE => CompoundDocumentElement::TYPE_FILE, 56 | ]; 57 | 58 | return $map[$this->pps->Type] ?? null; 59 | } 60 | 61 | public function setType($type): void 62 | { 63 | static $map = [ 64 | CompoundDocumentElement::TYPE_ROOT => OLE_PPS_TYPE_ROOT, 65 | CompoundDocumentElement::TYPE_DIRECTORY => OLE_PPS_TYPE_DIR, 66 | CompoundDocumentElement::TYPE_FILE => OLE_PPS_TYPE_FILE , 67 | ]; 68 | 69 | if (!isset($map[$type])) { 70 | throw new \InvalidArgumentException(sprintf('Unknown document element type "%d"', $type)); 71 | } 72 | 73 | $this->pps->Type = $map[$type]; 74 | } 75 | 76 | public function isDirectory(): bool 77 | { 78 | return ($this->getType() == CompoundDocumentElement::TYPE_DIRECTORY); 79 | } 80 | 81 | public function isFile(): bool 82 | { 83 | return ($this->getType() == CompoundDocumentElement::TYPE_FILE); 84 | } 85 | 86 | public function isRoot(): bool 87 | { 88 | return ($this->getType() == CompoundDocumentElement::TYPE_ROOT); 89 | } 90 | 91 | public function getPreviousIndex() 92 | { 93 | return $this->pps->PrevPps; 94 | } 95 | 96 | public function setPreviousIndex($index): void 97 | { 98 | $this->pps->PrevPps = $index; 99 | } 100 | 101 | public function getNextIndex() 102 | { 103 | return $this->pps->NextPps; 104 | } 105 | 106 | public function setNextIndex($index): void 107 | { 108 | $this->pps->NextPps = $index; 109 | } 110 | 111 | public function getFirstChildIndex() 112 | { 113 | return $this->pps->DirPps; 114 | } 115 | 116 | public function setFirstChildIndex($index): void 117 | { 118 | $this->pps->DirPps = $index; 119 | } 120 | 121 | public function getTimeCreated() 122 | { 123 | return $this->pps->Time1st; 124 | } 125 | 126 | public function setTimeCreated($time): void 127 | { 128 | $this->pps->Time1st = $time; 129 | } 130 | 131 | public function getTimeModified() 132 | { 133 | return $this->pps->Time2nd; 134 | } 135 | 136 | public function setTimeModified($time): void 137 | { 138 | $this->pps->Time2nd = $time; 139 | } 140 | 141 | // private, so no setter interface 142 | public function getStartBlock() 143 | { 144 | return $this->pps->_StartBlock; 145 | } 146 | 147 | public function getSize() 148 | { 149 | return $this->pps->Size; 150 | } 151 | 152 | public function setSize($size): void 153 | { 154 | $this->pps->Size = $size; 155 | } 156 | 157 | public function getChildren(): DocumentElementCollection 158 | { 159 | //if (!$this->wrappedChildren) { 160 | // $this->wrappedChildren = new DocumentElementCollection($this->ole, $this->pps->Children); 161 | //} 162 | //return $this->wrappedChildren; 163 | 164 | return new DocumentElementCollection($this->ole, $this->pps->children); 165 | } 166 | 167 | public function getData() 168 | { 169 | //echo sprintf('Reading data for %s: index: %d, start: 0, length: %d'."\n", $this->getName(), $this->getIndex(), $this->getSize()); 170 | 171 | return $this->ole->getData($this->getIndex(), 0, $this->getSize()); 172 | } 173 | 174 | public function unwrap() 175 | { 176 | return $this->pps; 177 | } 178 | 179 | public function saveToStream($stream): void 180 | { 181 | 182 | 183 | $root = new OLE_PPS_Root($this->pps->Time1st, $this->pps->Time2nd, $this->pps->children); 184 | 185 | // nasty Pear_OLE actually writes out a temp file and fpassthru's on it. Yuck. 186 | // so let's give a wrapped stream which ignores Pear_OLE's fopen() and fclose() 187 | $wrappedStreamUrl = StreamWrapper::wrapStream($stream, 'r'); 188 | $root->save($wrappedStreamUrl); 189 | 190 | /*ob_start(); 191 | try { 192 | $root->save(''); 193 | fwrite($stream, ob_get_clean()); 194 | } 195 | finally { 196 | ob_end_clean(); 197 | }*/ 198 | } 199 | } -------------------------------------------------------------------------------- /src/MAPI/OLE/Pear/DocumentElementCollection.php: -------------------------------------------------------------------------------- 1 | col = &$collection; 21 | $this->ole = $ole; 22 | } 23 | 24 | public function getIterator(): \Traversable 25 | { 26 | foreach ($this->col as $k => $v) 27 | { 28 | yield $k => $this->offsetGet($k); 29 | } 30 | } 31 | 32 | public function offsetExists($offset): bool 33 | { 34 | return isset($this->col[$offset]); 35 | } 36 | 37 | /** 38 | * @return mixed 39 | */ 40 | #[\ReturnTypeWillChange] 41 | public function offsetGet($offset) 42 | { 43 | if (!isset($this->col[$offset])) { 44 | return null; 45 | } 46 | 47 | if (!isset($this->proxy_col[$offset])) { 48 | $this->proxy_col[$offset] = new DocumentElement($this->ole, $this->col[$offset]); 49 | } 50 | 51 | return $this->proxy_col[$offset]; 52 | } 53 | 54 | public function offsetSet($offset, $value): void 55 | { 56 | if (!$value instanceof DocumentElement) { 57 | throw new \InvalidArgumentException('Collection must contain DocumentElement instances'); 58 | } 59 | 60 | $this->proxy_col[$offset] = $value; 61 | $this->col[$offset] = $value->unwrap(); 62 | } 63 | 64 | public function offsetUnset($offset): void 65 | { 66 | unset($this->proxy_col[$offset]); 67 | unset($this->col[$offset]); 68 | } 69 | } -------------------------------------------------------------------------------- /src/MAPI/OLE/Pear/DocumentFactory.php: -------------------------------------------------------------------------------- 1 | read($file); 16 | 17 | return new DocumentElement($ole, $ole->root); 18 | } 19 | 20 | public function createFromStream($stream): CompoundDocumentElement 21 | { 22 | // PHP buffering appears to prevent us using this wrapper - sometimes fseek() is not called 23 | //$wrappedStreamUrl = StreamWrapper::wrapStream($stream, 'r'); 24 | 25 | $ole = new OLE(); 26 | $ole->readStream($stream); 27 | 28 | return new DocumentElement($ole, $ole->root); 29 | } 30 | } -------------------------------------------------------------------------------- /src/MAPI/OLE/Pear/StreamWrapper.php: -------------------------------------------------------------------------------- 1 | $mode, 'stream' => $stream]; 23 | self::$handles[] = $data; 24 | 25 | end(self::$handles); 26 | $key = key(self::$handles); 27 | 28 | return 'olewrap://stream/' . (string)$key; 29 | } 30 | 31 | /** 32 | * @return resource 33 | */ 34 | public static function createStreamContext($stream) 35 | { 36 | return stream_context_create([ 37 | 'olewrap' => ['stream' => $stream] 38 | ]); 39 | } 40 | 41 | public static function register(): void 42 | { 43 | if (!in_array('olewrap', stream_get_wrappers())) { 44 | stream_wrapper_register('olewrap', __CLASS__); 45 | } 46 | } 47 | 48 | public function stream_cast($cast_as) 49 | { 50 | return $this->stream; 51 | } 52 | 53 | 54 | public function stream_open($path, $mode, $options, &$opened_path): bool 55 | { 56 | $url = parse_url($path); 57 | $streampath = []; 58 | $handle = null; 59 | 60 | 61 | if (isset($url['path'])) { 62 | $streampath = explode('/', $url['path']); 63 | } 64 | if (isset($streampath[1])) { 65 | $handle = $streampath[1]; 66 | } 67 | if (isset($handle) && isset(self::$handles[$handle])) { 68 | $this->stream = self::$handles[$handle]['stream']; 69 | 70 | if ($mode[0] == 'r' || $mode[0] == 'a') { 71 | fseek($this->stream, 0); 72 | } 73 | 74 | $this->buffer = ''; 75 | $this->position = 0; 76 | 77 | 78 | 79 | return true; 80 | } 81 | 82 | return false; 83 | } 84 | 85 | public function stream_read($count): string 86 | { 87 | // always read a block to satisfy the buffer 88 | $this->buffer = fread($this->stream, 8192); 89 | 90 | 91 | return substr($this->buffer, 0, $count); 92 | } 93 | 94 | /** 95 | * @return false|int 96 | */ 97 | public function stream_write($data) 98 | { 99 | return fwrite($this->stream, $data); 100 | } 101 | 102 | /** 103 | * @return false|int 104 | */ 105 | public function stream_tell() 106 | { 107 | return ftell($this->stream); 108 | } 109 | 110 | public function stream_eof(): bool 111 | { 112 | return feof($this->stream); 113 | } 114 | 115 | public function stream_seek($offset, $whence): int 116 | { 117 | //echo 'seeking on parent stream (' . $offset . ' ' . $whence . ')'."\n"; 118 | return fseek($this->stream, $offset, $whence); 119 | } 120 | 121 | /** 122 | * @return array|false 123 | */ 124 | public function stream_stat() 125 | { 126 | return fstat($this->stream); 127 | } 128 | 129 | public function url_stat($path, $flags): array 130 | { 131 | return [ 132 | 'dev' => 0, 133 | 'ino' => 0, 134 | 'mode' => 0, 135 | 'nlink' => 0, 136 | 'uid' => 0, 137 | 'gid' => 0, 138 | 'rdev' => 0, 139 | 'size' => 0, 140 | 'atime' => 0, 141 | 'mtime' => 0, 142 | 'ctime' => 0, 143 | 'blksize' => 0, 144 | 'blocks' => 0 145 | ]; 146 | } 147 | } -------------------------------------------------------------------------------- /src/MAPI/OLE/RTF/CompressionCodec.php: -------------------------------------------------------------------------------- 1 | >= 1; 31 | 32 | if ($isRef) { 33 | // get the starting point for the buffer and the 34 | // length to read 35 | $refOffsetOrig = ord($raw[$pos++]) & 0xFF; 36 | $refSizeOrig = ord($raw[$pos++]) & 0xFF; 37 | $refOffset = ($refOffsetOrig << 4) | ($refSizeOrig >> 4); 38 | $refSize = ($refSizeOrig & 0xF) + 2; 39 | //$refOffset &= 0xFFF; 40 | 41 | // copy the data from the buffer 42 | $index = $refOffset; 43 | for ($y = 0; $y < $refSize; $y++) { 44 | $data .= $buf[$index]; 45 | 46 | if (strlen($data) >= $uncompressedSize) break; 47 | 48 | $buf[$wp] = $buf[$index]; 49 | 50 | $wp = ($wp + 1) % self::BLOCKSIZE; 51 | $index = ($index + 1) % self::BLOCKSIZE; 52 | } 53 | } 54 | else { 55 | $buf[$wp] = $raw[$pos]; 56 | $wp = ($wp + 1) % self::BLOCKSIZE; 57 | 58 | $data .= $raw[$pos++]; 59 | } 60 | 61 | if (strlen($data) >= $uncompressedSize) { 62 | break; 63 | } 64 | if ($pos >= $eof) { 65 | break; 66 | } 67 | } 68 | } 69 | 70 | //echo 'Decompressed: ', $data, "\n"; die(); 71 | return $data; 72 | } 73 | 74 | public static function decode($data): string 75 | { 76 | 77 | $result = ''; 78 | //echo 'Data: ' . bin2hex($data), "\n"; 79 | //echo 'Len: ' . strlen($data), "\n"; 80 | 81 | $header = array_values(unpack('Vcs/Vus/a4m/Vcrc', $data)); 82 | [$compressedSize, $uncompressedSize, $magic, $crc32] = $header; 83 | 84 | if ($magic == 'MELA') { 85 | $data = substr($data, self::HEADERSIZE, $uncompressedSize); 86 | } 87 | elseif ($magic == 'LZFu') { 88 | $data = self::uncompress($data, $compressedSize, $uncompressedSize); 89 | } 90 | else { 91 | throw new \Exception('Unknown stream data type ' . $magic); 92 | } 93 | 94 | return rtrim($data, "\0"); 95 | 96 | } 97 | 98 | /** 99 | * @comment see Kopano-core Mapi4Linux or Python delimitry/compressed_rtf 100 | * 101 | * @return false|string 102 | */ 103 | public static function encode($data) 104 | { 105 | $uncompressedSize = strlen($data); 106 | $compressedSize = $uncompressedSize + self::HEADERSIZE; 107 | 108 | return pack('V/V/a4/V/a*', $compressedSize, $uncompressedSize, 'MELA', $data); 109 | } 110 | } -------------------------------------------------------------------------------- /src/MAPI/OLE/RTF/EmbeddedHTML.php: -------------------------------------------------------------------------------- 1 | scanUntilRegex('/\x5c\*\x5chtmltag(\d+) ?/') === false) { 22 | return ''; 23 | } 24 | 25 | while (!$scanner->eos()) { 26 | //echo 'next 40 ' . str_pad(str_replace(["\r","\n"], '', trim(substr((string)$scanner, 0, 40))), 40) . ' '; 27 | 28 | if ($scanner->scan('{')) { 29 | //echo 'skip {'; 30 | } 31 | elseif ($scanner->scan('}')) { 32 | //echo 'skip }'; 33 | } 34 | 35 | elseif ($scanner->scanRegex('/\x5c\*\x5chtmltag(\d+) ?/')) { 36 | if ($ignoreTag == $scanner->result()[1][0]) { 37 | //echo 'duplicate. skip to }'; 38 | $scanner->scanUntil('}'); 39 | $ignoreTag = ''; 40 | } 41 | } 42 | elseif ($scanner->scanRegex('/\x5c\*\x5cmhtmltag(\d+) ?/')) { 43 | //echo 'set ignore on this'; 44 | $ignoreTag = $scanner->result()[1][0]; 45 | } 46 | // fix cf ruby-msg - negative lookahead of \par elements so we don't match \pard 47 | elseif ($scanner->scanRegex('/\x5cpar(?!\w) ?/')) { 48 | //echo 'CRLF'; 49 | $html .= "\r\n"; 50 | } 51 | elseif ($scanner->scanRegex('/\x5ctab ?/')) { 52 | //echo 'Tab'; 53 | $html .= "\t"; 54 | } 55 | elseif ($scanner->scanRegex('/\x5c\'([0-9A-Za-z]{2})/')) { 56 | //echo 'Append char' . $scanner->result()[1][0]; 57 | $html .= chr(hexdec($scanner->result()[1][0])); 58 | } 59 | elseif ($scanner->scan('\pntext')) { 60 | //echo 'skip to }'; 61 | $scanner->scanUntil('}'); 62 | } 63 | elseif ($scanner->scanRegex('/\x5chtmlrtf1? ?/')) { 64 | //echo 'skip to htmlrtf0'; 65 | $scanner->scanUntilRegex('/\x5chtmlrtf0 ?/'); 66 | } 67 | //# a generic throw away unknown tags thing. 68 | //# the above 2 however, are handled specially 69 | elseif ($scanner->scanRegex('/\x5c[a-z-]+(\d+)? ?/')) { 70 | //echo 'skip unknown tag'; 71 | } 72 | //#elseif ($scanner->scanRegex('/\\li(\d+) ?/')) {} 73 | //#elseif ($scanner->scanRegex('/\\fi-(\d+) ?/')) {} 74 | elseif ($scanner->scanRegex('/\r?\n/')) { 75 | //echo 'data CRLF'; 76 | } 77 | elseif ($scanner->scanRegex('/\x5c({|}|\x5c)/')) { 78 | //echo 'append special char'; 79 | $html .= $scanner->result()[1][0]; 80 | } 81 | else { 82 | //echo 'append'; 83 | 84 | $html .= $scanner->increment(); 85 | } 86 | 87 | //echo ' ' . substr($html, -20) . "\n"; 88 | } 89 | 90 | 91 | return trim($html); 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /src/MAPI/OLE/RTF/StringScanner.php: -------------------------------------------------------------------------------- 1 | buffer = $data; 19 | $this->pos = 0; 20 | } 21 | 22 | public function scan($str) 23 | { 24 | $len = strlen($str); 25 | if (substr($this->buffer, $this->pos, $len) == $str) { 26 | $this->pos += $len; 27 | $this->last = $str; 28 | return $this->last; 29 | } 30 | return false; 31 | } 32 | 33 | public function scanRegex($regex) 34 | { 35 | if (preg_match($regex, $this->buffer, $matches, PREG_OFFSET_CAPTURE, $this->pos)) { 36 | if ($matches[0][1] == $this->pos) { 37 | $this->pos += strlen($matches[0][0]); 38 | $this->last = $matches; 39 | return $this->last; 40 | } 41 | } 42 | return false; 43 | } 44 | 45 | public function scanUntil($str) 46 | { 47 | if (($newpos = strpos($this->buffer, $str, $this->pos)) !== false) { 48 | $this->last = substr($this->buffer, $this->pos, $newpos - $this->pos); 49 | $this->pos = $newpos + strlen($str); 50 | return $this->last; 51 | } 52 | return false; 53 | } 54 | 55 | public function scanUntilRegex($regex) 56 | { 57 | if (preg_match($regex, $this->buffer, $matches, PREG_OFFSET_CAPTURE, $this->pos)) { 58 | $mlen = strlen($matches[0][0]); 59 | $this->last = substr($this->buffer, $this->pos, $matches[0][1] + $mlen); 60 | $this->pos = $matches[0][1] + $mlen; 61 | return $this->last; 62 | } 63 | return false; 64 | } 65 | 66 | public function eos(): bool 67 | { 68 | return $this->pos >= strlen($this->buffer); 69 | } 70 | 71 | public function increment($count = 1) 72 | { 73 | $this->last = substr($this->buffer, $this->pos, $count); 74 | $this->pos += $count; 75 | return $this->last; 76 | } 77 | 78 | public function result() 79 | { 80 | return $this->last; 81 | } 82 | 83 | 84 | public function __toString() 85 | { 86 | return substr($this->buffer, $this->pos); 87 | } 88 | } 89 | 90 | -------------------------------------------------------------------------------- /src/MAPI/OLE/Time/OleTime.php: -------------------------------------------------------------------------------- 1 | getCode(), $key->getGuid()); 12 | $this->col[$key->getHash()] = ['key' => $key, 'value' => $value]; 13 | } 14 | 15 | public function delete(PropertyKey $key): void 16 | { 17 | unset($this->col[$key->getHash()]); 18 | } 19 | 20 | public function get(PropertyKey $key) 21 | { 22 | $bucket = $this->col[$key->getHash()] ?? null; 23 | if (is_null($bucket)) { 24 | return null; 25 | } 26 | return $bucket['value']; 27 | } 28 | 29 | public function has(PropertyKey $key): bool 30 | { 31 | return isset($this->col[$key->getHash()]); 32 | } 33 | 34 | public function keys(): array 35 | { 36 | return array_map(function($bucket) { 37 | return $bucket['key']; 38 | }, $this->col); 39 | } 40 | 41 | public function values(): array 42 | { 43 | return array_map(function($bucket) { 44 | return $bucket['value']; 45 | }, $this->col); 46 | } 47 | 48 | public function getIterator(): \Traversable 49 | { 50 | foreach ($this->col as $bucket) { 51 | yield $bucket['key'] => $bucket['value']; 52 | } 53 | } 54 | 55 | } -------------------------------------------------------------------------------- /src/MAPI/Property/PropertyKey.php: -------------------------------------------------------------------------------- 1 | code = $code; 20 | $this->guid = $guid; 21 | 22 | //echo ' Created with code ' . $code . "\n"; 23 | } 24 | 25 | public function getHash(): string 26 | { 27 | return static::getHashOf($this->code, $this->guid); 28 | } 29 | 30 | public function getCode() 31 | { 32 | return $this->code; 33 | } 34 | 35 | public function getGuid() 36 | { 37 | return $this->guid; 38 | } 39 | 40 | public static function getHashOf($code, $guid = null): string 41 | { 42 | if (!$guid) { 43 | $guid = PropertySetConstants::PS_MAPI(); 44 | } 45 | $guid = (string)$guid; 46 | 47 | return $code . '::' . $guid; 48 | } 49 | 50 | 51 | } -------------------------------------------------------------------------------- /src/MAPI/Property/PropertySet.php: -------------------------------------------------------------------------------- 1 | store = $store; 25 | $this->raw = $store->getCollection(); 26 | 27 | if (!self::$tagsMsg || !self::$tagsOther) { 28 | self::init(); 29 | } 30 | 31 | $this->map(); 32 | 33 | } 34 | 35 | private static function init(): void 36 | { 37 | self::$tagsMsg = Yaml::parseFile(self::SCHEMA_DIR . '/MapiFieldsMessage.yaml'); 38 | self::$tagsOther = Yaml::parseFile(self::SCHEMA_DIR . '/MapiFieldsOther.yaml'); 39 | 40 | foreach (self::$tagsOther as $propSet => $props) { 41 | $guid = (string)PropertySetConstants::$propSet(); 42 | if ($guid) { 43 | self::$tagsOther[$guid] = $props; 44 | unset(self::$tagsOther[$propSet]); 45 | } 46 | } 47 | } 48 | 49 | protected function map(): void 50 | { 51 | //print_r($this->raw->keys()); 52 | 53 | foreach ($this->raw->keys() as $key) { 54 | //echo sprintf('Mapping %s %s'."\n", $key->getGuid(), $key->getCode()); 55 | 56 | if ((string)$key->getGuid() == (string)PropertySetConstants::PS_MAPI()) { 57 | // read from tagsMsg 58 | //echo ' Seeking '.sprintf('%04x', $key->getCode())."\n"; 59 | $propertyName = strtolower($key->getCode()); 60 | $schemaElement = self::$tagsMsg[sprintf('%04x', $key->getCode())] ?? null; 61 | if ($schemaElement) { 62 | $propertyName = strtolower(preg_replace('/^[^_]*_/', '', $schemaElement[0])); 63 | //echo ' Found msg '.$propertyName."\n"; 64 | } 65 | $this->map[$propertyName] = $key; 66 | } 67 | else { 68 | // read from tagsOther 69 | $propertyName = strtolower($key->getCode()); 70 | $schemaElement = self::$tagsOther[(string)$key->getGuid()][$key->getCode()] ?? null; 71 | if ($schemaElement) { 72 | $propertyName = $schemaElement; 73 | //echo ' Found other '.$propertyName."\n"; 74 | } 75 | $this->map[$propertyName] = $key; 76 | } 77 | } 78 | 79 | } 80 | 81 | 82 | protected function resolveName($name) 83 | { 84 | if (isset($this->map[$name])) { 85 | return $this->map[$name]; 86 | } 87 | return new PropertyKey($name); 88 | } 89 | 90 | protected function resolveKey($code, $guid = null) 91 | { 92 | if (is_string($code) && is_null($guid)) { 93 | return $this->resolveName($code); 94 | } 95 | return new PropertyKey($code, $guid); 96 | } 97 | 98 | /* public methods */ 99 | 100 | public function getStore() 101 | { 102 | return $this->store; 103 | } 104 | 105 | public function get($code, $guid = null) 106 | { 107 | $val = $this->raw->get($this->resolveKey($code, $guid)); 108 | 109 | // resolve streams when they're requested 110 | if (is_callable($val)) { 111 | 112 | $val = $val(); 113 | 114 | } 115 | 116 | return $val; 117 | } 118 | 119 | public function set($code, $value, $guid = null): void 120 | { 121 | $this->raw->set($this->resolveKey($code, $guid), $value); 122 | } 123 | 124 | public function delete($code, $guid = null): void 125 | { 126 | $this->raw->delete($this->resolveKey($code, $guid)); 127 | } 128 | 129 | /* magic methods */ 130 | 131 | public function __get($name) 132 | { 133 | return $this->get($name); 134 | } 135 | 136 | public function __set($name, $value) 137 | { 138 | return $this->set($name, $value); 139 | } 140 | 141 | public function offsetExists($offset): bool 142 | { 143 | //return (!is_null($this->get($offset))); 144 | return (!is_null($this->raw->get($this->resolveKey($offset)))); 145 | } 146 | 147 | /** 148 | * @return mixed 149 | */ 150 | #[\ReturnTypeWillChange] 151 | public function offsetGet($offset) 152 | { 153 | return $this->get($offset); 154 | } 155 | 156 | public function offsetSet($offset, $value): void 157 | { 158 | $this->set($offset, $value); 159 | } 160 | 161 | public function offsetUnset($offset): void 162 | { 163 | $this->delete($offset); 164 | } 165 | } -------------------------------------------------------------------------------- /src/MAPI/Property/PropertySetConstants.php: -------------------------------------------------------------------------------- 1 | 'PS_MAPI', 19 | '00020329' => 'PS_PUBLIC_STRINGS', 20 | '00020380' => 'PS_ROUTING_EMAIL_ADDRESSES', 21 | '00020381' => 'PS_ROUTING_ADDRTYPE', 22 | '00020382' => 'PS_ROUTING_DISPLAY_NAME', 23 | '00020383' => 'PS_ROUTING_ENTRYID', 24 | '00020384' => 'PS_ROUTING_SEARCH_KEY', 25 | // string properties in this namespace automatically get added to the internet headers 26 | '00020386' => 'PS_INTERNET_HEADERS', 27 | // theres are bunch of outlook ones i think 28 | // http://blogs.msdn.com/stephen_griffin/archive/2006/05/10/outlook-2007-beta-documentation-notification-based-indexing-support.aspx 29 | // IPM.Appointment 30 | '00062002' => 'PSETID_Appointment', 31 | // IPM.Task 32 | '00062003' => 'PSETID_Task', 33 | // used for IPM.Contact 34 | '00062004' => 'PSETID_Address', 35 | '00062008' => 'PSETID_Common', 36 | // didn't find a source for this name. it is for IPM.StickyNote 37 | '0006200e' => 'PSETID_Note', 38 | // for IPM.Activity. also called the journal? 39 | '0006200a' => 'PSETID_Log', 40 | ]; 41 | 42 | protected static function get($offset) 43 | { 44 | static $lookup = []; 45 | if (isset($lookup[$offset])) return $lookup[$offset]; 46 | 47 | $guid = array_search($offset, static::NAMES); 48 | if ($guid === false) return null; 49 | 50 | $guid = str_replace('${prefix}', $guid, static::OLE_GUID); 51 | $guid = OleGuid::fromString($guid); 52 | 53 | $lookup[$offset] = $guid; 54 | return $guid; 55 | } 56 | 57 | public function __get($offset) 58 | { 59 | return static::get($offset); 60 | } 61 | 62 | public static function __callStatic($name, $args) 63 | { 64 | $ret = static::get($name); 65 | if (is_null($ret)) { 66 | throw new \RuntimeException('Unknown constant '.$name); 67 | } 68 | return $ret; 69 | } 70 | 71 | 72 | } -------------------------------------------------------------------------------- /src/MAPI/Property/PropertyStore.php: -------------------------------------------------------------------------------- 1 | cache = new PropertyCollection(); 36 | $this->nameId = null; 37 | $this->parentNameId = $nameId; 38 | $this->logger = $logger ?? new NullLogger(); 39 | 40 | if ($obj) { 41 | $this->load($obj); 42 | } 43 | } 44 | 45 | protected function load(Element $obj): void 46 | { 47 | 48 | //# find name_id first 49 | foreach ($obj->getChildren() as $child) { 50 | 51 | if (preg_match(self::NAMEID_RX, $child->getName())) { 52 | $this->nameId = $this->parseNameId($child); 53 | } 54 | } 55 | if (is_null($this->nameId)) { 56 | $this->nameId = $this->parentNameId; 57 | } 58 | 59 | 60 | 61 | foreach ($obj->getChildren() as $child) { 62 | if ($child->isFile()) { 63 | if (preg_match(self::PROPERTIES_RX, $child->getName())) { 64 | $this->parseProperties($child); 65 | } 66 | elseif (preg_match(self::SUBSTG_RX, $child->getName(), $matches)) { 67 | $key = hexdec($matches[1]); 68 | $encoding = hexdec($matches[2]); 69 | $offset = hexdec($matches[3] ?? '0'); 70 | 71 | $this->parseSubstg($key, $encoding, $offset, $child); 72 | } 73 | } 74 | } 75 | 76 | } 77 | 78 | /** 79 | * @return array 80 | */ 81 | protected function parseNameId($obj): array 82 | { 83 | // $remaining = clone $obj->getChildren() 84 | 85 | $knownPpsAlias = [ 86 | 'guids' => '__substg1.0_00020102', 87 | 'props' => '__substg1.0_00030102', 88 | 'names' => '__substg1.0_00040102']; 89 | 90 | $knownPpsObj = array_combine( 91 | array_keys($knownPpsAlias), 92 | [null, null, null] 93 | ); 94 | 95 | foreach ($obj->getChildren() as $child) { 96 | $alias = array_search($child->getName(), $knownPpsAlias); 97 | if ($alias !== false) { 98 | $knownPpsObj[$alias] = $child; 99 | } 100 | } 101 | 102 | 103 | //# parse guids 104 | //# this is the guids for named properities (other than builtin ones) 105 | //# i think PS_PUBLIC_STRINGS, and PS_MAPI are builtin. 106 | //# Scan using an ascii pattern - it's binary data we're looking 107 | //# at, so we don't want to look for unicode characters 108 | $guids = [PropertySetConstants::PS_PUBLIC_STRINGS()]; 109 | $rawGuid = str_split($knownPpsObj['guids']->getData(), 16); 110 | foreach ($rawGuid as $guid) { 111 | if (strlen($guid) == 16) { 112 | $guids[] = OleGuid::fromBytes($guid); 113 | } 114 | } 115 | 116 | //# parse names. 117 | //# the string ids for named properties 118 | //# they are no longer parsed, as they're referred to by offset not 119 | //# index. they are simply sequentially packed, as a long, giving 120 | //# the string length, then padding to 4 byte multiple, and repeat. 121 | $namesData = $knownPpsObj['names']->getData(); 122 | 123 | //# parse actual props. 124 | //# not sure about any of this stuff really. 125 | //# should flip a few bits in the real msg, to get a better understanding of how this works. 126 | //# Scan using an ascii pattern - it's binary data we're looking 127 | //# at, so we don't want to look for unicode characters 128 | $propsData = $knownPpsObj['props']->getData(); 129 | $properties = []; 130 | foreach (str_split($propsData, 8) as $idx => $rawProp) { 131 | if (strlen($rawProp) < 8) break; 132 | 133 | $d = unpack('vflags/voffset', substr($rawProp, 4)); 134 | $flags = $d['flags']; 135 | $offset = $d['offset']; 136 | 137 | //# the property will be serialised as this pseudo property, mapping it to this named property 138 | $pseudo_prop = 0x8000 + $offset; 139 | $named = ($flags & 1 == 1); 140 | $prop = ''; 141 | if ($named) { 142 | $str_off = unpack('V', $rawProp)[1]; 143 | if (strlen($namesData) - $str_off < 4) continue; // not sure with this, but at least it will not read outside the bounds and crash 144 | $len = unpack('V', substr($namesData, $str_off, 4))[1]; 145 | $data = substr($namesData, $str_off + 4, $len); 146 | $prop = mb_convert_encoding($data, 'UTF-8', 'UTF-16LE'); 147 | } 148 | else { 149 | $d = unpack('va/vb', $rawProp); 150 | if ($d['b'] != 0) { 151 | $this->logger->Debug("b not 0"); 152 | } 153 | $prop = $d['a']; 154 | } 155 | 156 | //# a bit sus 157 | $guid_off = $flags >> 1; 158 | $guid = $guids[$guid_off - 2]; 159 | 160 | /*$properties[] = [ 161 | 'key' => new PropertyKey($prop, $guid), 162 | 'prop' => $pseudo_prop, 163 | ];*/ 164 | $properties[$pseudo_prop] = new PropertyKey($prop, $guid); 165 | 166 | } 167 | 168 | 169 | //# this leaves a bunch of other unknown chunks of data with completely unknown meaning. 170 | //# pp [:unknown, child.name, child.data.unpack('H*')[0].scan(/.{16}/m)] 171 | //print_r($properties); 172 | return $properties; 173 | 174 | } 175 | 176 | protected function parseSubstg($key, $encoding, $offset, $obj): void 177 | { 178 | $MULTIVAL = 0x1000; 179 | 180 | if (($encoding & $MULTIVAL) != 0) { 181 | if (!$offset) { 182 | //# there is typically one with no offset first, whose data is a series of numbers 183 | //# equal to the lengths of all the sub parts. gives an implied array size i suppose. 184 | //# maybe you can initialize the array at this time. the sizes are the same as all the 185 | //# ole object sizes anyway, its to pre-allocate i suppose. 186 | //#p obj.data.unpack('V*') 187 | //# ignore this one 188 | return; 189 | } 190 | else { 191 | // remove multivalue flag for individual pieces 192 | $encoding = $encoding & ~$MULTIVAL; 193 | } 194 | } 195 | else { 196 | if ($offset) { 197 | $this->logger->warning(sprintf('offset specified for non-multivalue encoding %s', $obj->getName())); 198 | } 199 | $offset = null; 200 | } 201 | 202 | $valueFn = PropertyStoreEncodings::decodeFunction($encoding, $obj); 203 | 204 | //$property = [ 205 | // 'key' => $key, 206 | // 'value' => $valueFn, 207 | // 'offset' => $offset 208 | //]; 209 | 210 | $this->addProperty($key, $valueFn, $offset); 211 | } 212 | 213 | //# For parsing the +properties+ file. Smaller properties are serialized in one chunk, 214 | //# such as longs, bools, times etc. The parsing has problems. 215 | protected function parseProperties($obj): void 216 | { 217 | $data = $obj->getData(); 218 | $pad = $obj->getSize() % 16; 219 | 220 | //# don't really understand this that well... 221 | // it's also wrong 222 | //if (!(($pad == 0 || $pad == 8) && substr($data, 0, $pad) == str_repeat("\0", 16))) { 223 | // $this->logger->warning('padding was not as expected', ['pad' => $pad, 'size' => $obj->getSize(), substr($data, 0, $pad)]); 224 | //} 225 | 226 | //# Scan using an ascii pattern - it's binary data we're looking 227 | //# at, so we don't want to look for unicode characters 228 | foreach (str_split(substr($data, $pad), 16) as $idx => $rawProp) { 229 | 230 | // copying ruby implementation's oddness to avoid any endianess issues 231 | $rawData = unpack('V', $rawProp)[1]; 232 | [$property, $encoding] = str_split(sprintf('%08x', $rawData), 4); 233 | $key = hexdec($property); 234 | 235 | //# doesn't make any sense to me. probably because its a serialization of some internal 236 | //# outlook structure.. 237 | if ($property == '0000') { 238 | continue; 239 | } 240 | 241 | // improved from ruby-msg - handle more types 242 | // https://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/property-types 243 | switch ($encoding) { 244 | 245 | case '0001': // PT_NULL 246 | break; 247 | 248 | 249 | case '0002': // PT_I2 250 | case '1002': // PT_MV_I2 251 | $value = unpack('v', substr($rawProp, 8, 2))[1]; 252 | $this->addProperty($key, $value); 253 | break; 254 | 255 | case '0003': // PT_I4 256 | case '1003': // PT_MV_I4 257 | $value = unpack('V', substr($rawProp, 8, 4))[1]; 258 | $this->addProperty($key, $value); 259 | break; 260 | 261 | case '0004': // PT_FLOAT 262 | case '1004': // PT_MV_FLOAT 263 | $value = unpack('f', substr($rawProp, 8, 4))[1]; 264 | $this->addProperty($key, $value); 265 | break; 266 | 267 | case '0005': // PT_DOUBLE 268 | case '1005': // PT_MV_DOUBLE 269 | $value = unpack('e', substr($rawProp, 8, 8))[1]; 270 | $this->addProperty($key, $value); 271 | break; 272 | 273 | case '0006': // PT_CURRENCY 274 | case '1006': // PT_MV_CURRENCY 275 | // TODO work out how to interpret PT_CURRENCY (same as VB currency type, apparently) 276 | $value = unpack('a8', substr($rawProp, 8, 8))[1]; 277 | $this->addProperty($key, $value); 278 | break; 279 | 280 | case '0007': // PT_APPTIME 281 | case '1007': // PT_MV_APPTIME 282 | // TODO work out how to interpret PT_APPTIME (same as VB time type, apparently) 283 | $value = unpack('a8', substr($rawProp, 8, 8))[1]; 284 | $this->addProperty($key, $value); 285 | break; 286 | 287 | case '000a': // PT_ERROR 288 | $value = unpack('V', substr($rawProp, 8, 4))[1]; 289 | $this->addProperty($key, $value); 290 | break; 291 | 292 | case '000b': // PT_BOOLEAN 293 | case '100b': // PT_MV_12 294 | // Windows 2-byte BOOL 295 | $value = unpack('v', substr($rawProp, 8, 2))[1]; 296 | $this->addProperty($key, $value != 0); 297 | break; 298 | 299 | case '000d': // PT_OBJECT 300 | // pointer to IUnknown - cannot exist in an Outlook property hopefully!! 301 | break; 302 | 303 | case '0014': // PT_I8 304 | case '1014': // PT_MV_I8 305 | //$value = unpack('P', substr($rawProp, 8, 8))[1]; 306 | // raw data, change endianess 307 | $raw = strrev(substr($rawProp, 8, 8)); 308 | $value = ord($raw[7]); 309 | for ($i = 6; $i >= 0; $i--) { 310 | $fig = ord($raw[$i]); 311 | $order = abs(8 - $i); 312 | $value = bcadd($value, bcmul($fig, bcmul(10, $order))); 313 | } 314 | $this->addProperty($key, $value); 315 | break; 316 | 317 | case '001e': // PT_STRING8 318 | case '101e': // PT_MV_STRING8 319 | // LPSTR - stored in a stream 320 | //$value = substr($rawProp, 8); 321 | //$this->addProperty($key, $value); 322 | break; 323 | 324 | case '001f': // PT_TSTRING 325 | case '101f': // PT_MV_TSTRING 326 | // LPWSTR - stored in a stream 327 | //$value = substr($rawProp, 8); 328 | //$this->addProperty($key, $value); 329 | break; 330 | 331 | case '0040': // PT_SYSTIME 332 | case '1040': // PT_MV_SYSTIME 333 | $value = OleTime::getTimeFromOleTime(substr($rawProp, 8)); 334 | $this->addProperty($key, $value); 335 | break; 336 | 337 | case '0048': // PT_CLSID 338 | $value = (string)OleGuid::fromBytes($rawProp); 339 | $this->addProperty($key, $value); 340 | break; 341 | 342 | case '1048': // PT_MV_CLSID 343 | $value = (string)OleGuid::fromBytes(substr($rawProp, 8)); 344 | $this->addProperty($key, $value); 345 | break; 346 | 347 | case '00fb': // PT_SVREID 348 | // Variable size, a 16-bit (2-byte) COUNT followed by a structure. 349 | break; 350 | 351 | case '00fd': // PT_SRESTRICT 352 | // Variable size, a byte array representing one or more Restriction structures. 353 | break; 354 | 355 | case '00fe': // PT_ACTIONS 356 | // Variable size, a 16-bit (2-byte) COUNT of actions (not bytes) followed by that many Rule Action structures. 357 | break; 358 | 359 | case '0102': // PT_BINARY 360 | case '1102': // PT_MV_BINARY 361 | // assume this is also stored in a stream 362 | //$value = substr($rawProp, 8); 363 | //$this->addProperty($key, $value); 364 | break; 365 | 366 | 367 | default: 368 | $this->logger->warning(sprintf('ignoring data in __properties section, encoding: %s', $encoding), unpack('H*', $rawProp)); 369 | 370 | } 371 | } 372 | 373 | 374 | } 375 | 376 | protected function addProperty($key, $value, $pos = null): void 377 | { 378 | 379 | 380 | //# map keys in the named property range through nameid 381 | if (is_int($key) && $key >= 0x8000) { 382 | if (!$this->nameId) { 383 | $this->logger->warning('No nameid section yet named properties used'); 384 | $key = new PropertyKey($key); 385 | } 386 | elseif (isset($this->nameId[$key])) { 387 | $key = $this->nameId[$key]; 388 | } 389 | else { 390 | //# i think i hit these when i have a named property, in the PS_MAPI 391 | //# guid 392 | $this->logger->warning(sprintf('property in named range not in nameid %s', print_r($key, true))); 393 | $key = new PropertyKey($key); 394 | } 395 | } 396 | else { 397 | $key = new PropertyKey($key); 398 | } 399 | 400 | 401 | //$this->logger->debug(sprintf('Writing property %s', print_r($key, true))); 402 | //$hash = $key->getHash(); 403 | if (!is_null($pos)) { 404 | if (!$this->cache->has($key)) { 405 | $this->cache->set($key, []); 406 | } 407 | if (!is_array($this->cache->get($key))) { 408 | $this->logger->warning('Duplicate property'); 409 | } 410 | 411 | $el = $this->cache->get($key); 412 | $el[$pos] = $value; 413 | $this->cache->set($key, $el); 414 | } 415 | else { 416 | $this->cache->set($key, $value); 417 | } 418 | 419 | } 420 | 421 | 422 | public function getCollection(): PropertyCollection 423 | { 424 | return $this->cache; 425 | 426 | } 427 | 428 | public function getNameId() 429 | { 430 | return $this->nameId; 431 | } 432 | 433 | 434 | } 435 | -------------------------------------------------------------------------------- /src/MAPI/Property/PropertyStoreEncodings.php: -------------------------------------------------------------------------------- 1 | 'decode0x000d', 11 | 0x001f => 'decode0x001f', 12 | 0x001e => 'decode0x001e', 13 | 0x0203 => 'decode0x0102', 14 | ]; 15 | 16 | public static function decode0x000d(Element $e):Element 17 | { 18 | return $e; 19 | } 20 | 21 | public static function decode0x001f(Element $e) 22 | { 23 | return mb_convert_encoding( $e->getData(), 'UTF-8', 'UTF-16LE'); 24 | } 25 | 26 | public static function decode0x001e(Element $e) 27 | { 28 | return trim($e->getData()); 29 | } 30 | 31 | public static function decode0x0102(Element $e) 32 | { 33 | return $e->getData(); 34 | } 35 | 36 | public static function decodeUnknown(Element $e) 37 | { 38 | return $e->getData(); 39 | } 40 | 41 | public static function decode($encoding, Element $e) 42 | { 43 | if (isset(self::ENCODERS[$encoding])) { 44 | $fn = self::ENCODERS[$encoding]; 45 | return self::$fn($e); 46 | } 47 | return self::decodeUnknown($e); 48 | 49 | } 50 | 51 | public static function getDecoder($encoding) 52 | { 53 | if (isset(self::ENCODERS[$encoding])) { 54 | $fn = self::ENCODERS[$encoding]; 55 | return self::$fn; 56 | } 57 | return self::decodeUnknown; 58 | } 59 | 60 | public static function decodeFunction($encoding, Element $e) 61 | { 62 | return function() use ($encoding, $e) { 63 | return PropertyStoreEncodings::decode($encoding, $e); 64 | }; 65 | } 66 | } -------------------------------------------------------------------------------- /src/MAPI/Schema/MapiFieldsMessage.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | "66b0": 3 | - PR_RECIPIENT_ON_ASSOC_MSG_COUNT 4 | - PT_LONG 5 | "3a01": 6 | - PR_ALTERNATE_RECIPIENT 7 | - PT_BINARY 8 | "6628": 9 | - PR_GW_MTSIN_ENTRYID 10 | - PT_BINARY 11 | "0061": 12 | - PR_END_DATE 13 | - PT_SYSTIME 14 | "66b1": 15 | - PR_ATTACH_ON_NORMAL_MSG_COUNT 16 | - PT_LONG 17 | "1006": 18 | - PR_RTF_SYNC_BODY_CRC 19 | - PT_LONG 20 | "3a02": 21 | - PR_CALLBACK_TELEPHONE_NUMBER 22 | - PT_TSTRING 23 | "67aa": 24 | - PR_ASSOCIATED 25 | - PT_BOOLEAN 26 | "6629": 27 | - PR_GW_MTSOUT_ENTRYID 28 | - PT_BINARY 29 | "0062": 30 | - PR_OWNER_APPT_ID 31 | - PT_LONG 32 | "fffa": 33 | - PR_EMS_AB_OBJECT_OID 34 | - PT_BINARY 35 | "66b2": 36 | - PR_ATTACH_ON_ASSOC_MSG_COUNT 37 | - PT_LONG 38 | "36e0": 39 | - PR_FOLDER_XVIEWINFO_E 40 | - PT_BINARY 41 | "1007": 42 | - PR_RTF_SYNC_BODY_COUNT 43 | - PT_LONG 44 | "3a03": 45 | - PR_CONVERSION_PROHIBITED 46 | - PT_BOOLEAN 47 | "0063": 48 | - PR_RESPONSE_REQUESTED 49 | - PT_BOOLEAN 50 | "fffb": 51 | - PR_EMS_AB_IS_MASTER 52 | - PT_BOOLEAN 53 | "002a": 54 | - PR_RECEIPT_TIME 55 | - PT_SYSTIME 56 | "66b3": 57 | - PR_NORMAL_MESSAGE_SIZE 58 | - PT_LONG|PT_I8 59 | "36e1": 60 | - PR_FOLDER_VIEWS_ONLY 61 | - PT_LONG 62 | "1008": 63 | - PR_RTF_SYNC_BODY_TAG 64 | - PT_TSTRING 65 | "3a04": 66 | - PR_DISCLOSE_RECIPIENTS 67 | - PT_BOOLEAN 68 | "0064": 69 | - PR_SENT_REPRESENTING_ADDRTYPE 70 | - PT_TSTRING 71 | "fffc": 72 | - PR_EMS_AB_PARENT_ENTRYID 73 | - PT_BINARY 74 | "002b": 75 | - PR_RECIPIENT_REASSIGNMENT_PROHIBITED 76 | - PT_BOOLEAN 77 | "66b4": 78 | - PR_ASSOC_MESSAGE_SIZE 79 | - PT_LONG|PT_I8 80 | "1009": 81 | - PR_RTF_COMPRESSED 82 | - PT_BINARY 83 | "3a05": 84 | - PR_GENERATION 85 | - PT_TSTRING 86 | "0065": 87 | - PR_SENT_REPRESENTING_EMAIL_ADDRESS 88 | - PT_TSTRING 89 | "002c": 90 | - PR_REDIRECTION_HISTORY 91 | - PT_BINARY 92 | "66b5": 93 | - PR_FOLDER_PATHNAME 94 | - PT_TSTRING 95 | "3a06": 96 | - PR_GIVEN_NAME 97 | - PT_TSTRING 98 | "fffe": 99 | - PR_EMS_AB_SERVER 100 | - PT_TSTRING 101 | "002d": 102 | - PR_RELATED_IPMS 103 | - PT_BINARY 104 | "66b6": 105 | - PR_OWNER_COUNT 106 | - PT_LONG 107 | "36e4": 108 | - PR_FREEBUSY_ENTRYIDS 109 | - PT_MV_BINARY 110 | "3a07": 111 | - PR_GOVERNMENT_ID_NUMBER 112 | - PT_TSTRING 113 | "0066": 114 | - PR_ORIGINAL_SENDER_ADDRTYPE 115 | - PT_TSTRING 116 | "002e": 117 | - PR_ORIGINAL_SENSITIVITY 118 | - PT_LONG 119 | "1010": 120 | - PR_RTF_SYNC_PREFIX_COUNT 121 | - PT_LONG 122 | "66b7": 123 | - PR_CONTACT_COUNT 124 | - PT_LONG 125 | "36e5": 126 | - PR_DEF_MSG_CLASS 127 | - PT_UNICODE 128 | "3a08": 129 | - PR_BUSINESS_TELEPHONE_NUMBER 130 | - PT_TSTRING 131 | "0067": 132 | - PR_ORIGINAL_SENDER_EMAIL_ADDRESS 133 | - PT_TSTRING 134 | "002f": 135 | - PR_LANGUAGES 136 | - PT_TSTRING 137 | "1011": 138 | - PR_RTF_SYNC_TRAILING_COUNT 139 | - PT_LONG 140 | "6634": 141 | - PR_CHANGE_ADVISOR 142 | - PT_OBJECT 143 | "36e6": 144 | - PR_DEF_FORM_NAME 145 | - PT_UNICODE 146 | "3a09": 147 | - PR_HOME_TELEPHONE_NUMBER 148 | - PT_TSTRING 149 | "0068": 150 | - PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE 151 | - PT_TSTRING 152 | "6635": 153 | - PR_FAVORITES_DEFAULT_NAME 154 | - PT_TSTRING 155 | "0069": 156 | - PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS 157 | - PT_TSTRING 158 | "1012": 159 | - PR_ORIGINALLY_INTENDED_RECIP_ENTRYID 160 | - PT_BINARY 161 | "0e96": 162 | - PR_ATTACH_VIRUS_SCAN_INFO 163 | - PT_BINARY 164 | "6636": 165 | - PR_SYS_CONFIG_FOLDER_ENTRYID 166 | - PT_BINARY 167 | "67f0": 168 | - PR_PROFILE_SECURE_MAILBOX 169 | - PT_BINARY 170 | "1013": 171 | - PR_BODY_HTML 172 | - PT_TSTRING 173 | "3400": 174 | - PR_DEFAULT_STORE 175 | - PT_BOOLEAN 176 | "6637": 177 | - PR_CHANGE_NOTIFICATION_GUID 178 | - PT_CLSID 179 | "36e9": 180 | - PR_GENERATE_EXCHANGE_VIEWS 181 | - PT_BOOLEAN 182 | "0070": 183 | - PR_CONVERSATION_TOPIC 184 | - PT_TSTRING 185 | "0e5e": 186 | - PR_MIME_HANDLER_CLASSIDS 187 | - PT_CLSID 188 | "3a10": 189 | - PR_ORGANIZATIONAL_ID_NUMBER 190 | - PT_TSTRING 191 | "6638": 192 | - PR_FOLDER_CHILD_COUNT 193 | - PT_LONG 194 | "0071": 195 | - PR_CONVERSATION_INDEX 196 | - PT_BINARY 197 | "3a11": 198 | - PR_SURNAME 199 | - PT_TSTRING 200 | "0072": 201 | - PR_ORIGINAL_DISPLAY_BCC 202 | - PT_TSTRING 203 | "7001": 204 | - PR_VD_BINARY 205 | - PT_BINARY 206 | "3a12": 207 | - PR_ORIGINAL_ENTRYID 208 | - PT_BINARY 209 | "0073": 210 | - PR_ORIGINAL_DISPLAY_CC 211 | - PT_TSTRING 212 | "003a": 213 | - PR_REPORT_NAME 214 | - PT_TSTRING 215 | "7002": 216 | - PR_VD_STRINGS 217 | - PT_UNICODE 218 | "3a13": 219 | - PR_ORIGINAL_DISPLAY_NAME 220 | - PT_TSTRING 221 | "0074": 222 | - PR_ORIGINAL_DISPLAY_TO 223 | - PT_TSTRING 224 | "686b": 225 | - PR_DELEGATES_SEE_PRIVATE 226 | - PT_MV_LONG 227 | "003b": 228 | - PR_SENT_REPRESENTING_SEARCH_KEY 229 | - PT_BINARY 230 | "66c3": 231 | - PR_CODE_PAGE_ID 232 | - PT_LONG 233 | "7003": 234 | - PR_VD_FLAGS 235 | - PT_LONG 236 | "3a14": 237 | - PR_ORIGINAL_SEARCH_KEY 238 | - PT_BINARY 239 | "0075": 240 | - PR_RECEIVED_BY_ADDRTYPE 241 | - PT_TSTRING 242 | "686c": 243 | - PR_PERSONAL_FREEBUSY 244 | - PT_BINARY 245 | "003c": 246 | - PR_X400_CONTENT_TYPE 247 | - PT_BINARY 248 | "66c4": 249 | - PR_RETENTION_AGE_LIMIT 250 | - PT_LONG 251 | "7004": 252 | - PR_VD_LINK_TO 253 | - PT_BINARY 254 | "3a15": 255 | - PR_POSTAL_ADDRESS 256 | - PT_TSTRING 257 | "0076": 258 | - PR_RECEIVED_BY_EMAIL_ADDRESS 259 | - PT_TSTRING 260 | "686d": 261 | - PR_PROCESS_MEETING_REQUESTS 262 | - PT_BOOLEAN 263 | "003d": 264 | - PR_SUBJECT_PREFIX 265 | - PT_TSTRING 266 | "66c5": 267 | - PR_DISABLE_PERUSER_READ 268 | - PT_BOOLEAN 269 | "7005": 270 | - PR_VD_VIEW_FOLDER 271 | - PT_BINARY 272 | "3a16": 273 | - PR_COMPANY_NAME 274 | - PT_TSTRING 275 | "686e": 276 | - PR_DECLINE_RECURRING_MEETING_REQUESTS 277 | - PT_BOOLEAN 278 | "003e": 279 | - PR_NON_RECEIPT_REASON 280 | - PT_LONG 281 | "66c6": 282 | - PR_INTERNET_PARSE_STATE 283 | - PT_BINARY 284 | "7006": 285 | - PR_VD_NAME 286 | - PT_UNICODE 287 | "3a17": 288 | - PR_TITLE 289 | - PT_TSTRING 290 | "660a": 291 | - PR_PROFILE_TYPE 292 | - PT_LONG 293 | "0077": 294 | - PR_RCVD_REPRESENTING_ADDRTYPE 295 | - PT_TSTRING 296 | "686f": 297 | - PR_DECLINE_CONFLICTING_MEETING_REQUESTS 298 | - PT_BOOLEAN 299 | "003f": 300 | - PR_RECEIVED_BY_ENTRYID 301 | - PT_BINARY 302 | "66c7": 303 | - PR_INTERNET_MESSAGE_INFO 304 | - PT_BINARY 305 | "3a18": 306 | - PR_DEPARTMENT_NAME 307 | - PT_TSTRING 308 | "660b": 309 | - PR_PROFILE_MAILBOX 310 | - PT_TSTRING 311 | "0078": 312 | - PR_RCVD_REPRESENTING_EMAIL_ADDRESS 313 | - PT_TSTRING 314 | "7d01": 315 | - PR_FAV_AUTOSUBFOLDERS 316 | - PT_LONG 317 | "7007": 318 | - PR_VD_VERSION 319 | - PT_LONG 320 | "3a19": 321 | - PR_OFFICE_LOCATION 322 | - PT_TSTRING 323 | "660c": 324 | - PR_PROFILE_SERVER 325 | - PT_TSTRING 326 | "0079": 327 | - PR_ORIGINAL_AUTHOR_ADDRTYPE 328 | - PT_TSTRING 329 | "7d02": 330 | - PR_FAV_PARENT_SOURCE_KEY 331 | - PT_BINARY 332 | "660d": 333 | - PR_PROFILE_MAX_RESTRICT 334 | - PT_LONG 335 | "7d03": 336 | - PR_FAV_LEVEL_MASK 337 | - PT_LONG 338 | "3410": 339 | - PR_IPM_SUBTREE_SEARCH_KEY 340 | - PT_BINARY 341 | "660e": 342 | - PR_PROFILE_AB_FILES_PATH 343 | - PT_TSTRING 344 | "3a20": 345 | - PR_TRANSMITTABLE_DISPLAY_NAME 346 | - PT_TSTRING 347 | "3411": 348 | - PR_IPM_OUTBOX_SEARCH_KEY 349 | - PT_BINARY 350 | "6779": 351 | - PR_PF_QUOTA_STYLE 352 | - PT_LONG 353 | "0c0a": 354 | - PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY 355 | - PT_BOOLEAN 356 | "660f": 357 | - PR_PROFILE_FAVFLD_DISPLAY_NAME 358 | - PT_TSTRING 359 | "3a21": 360 | - PR_PAGER_TELEPHONE_NUMBER 361 | - PT_TSTRING 362 | "3412": 363 | - PR_IPM_WASTEBASKET_SEARCH_KEY 364 | - PT_BINARY 365 | "0c0b": 366 | - PR_PHYSICAL_DELIVERY_MODE 367 | - PT_LONG 368 | "3a22": 369 | - PR_USER_CERTIFICATE 370 | - PT_BINARY 371 | "3413": 372 | - PR_IPM_SENTMAIL_SEARCH_KEY 373 | - PT_BINARY 374 | "0c0c": 375 | - PR_PHYSICAL_DELIVERY_REPORT_REQUEST 376 | - PT_LONG 377 | "7d07": 378 | - PR_FAV_INHERIT_AUTO 379 | - PT_LONG 380 | "65a0": 381 | - PR_RULE_SERVER_RULE_ID 382 | - PT_I8 383 | "3a23": 384 | - PR_PRIMARY_FAX_NUMBER 385 | - PT_TSTRING 386 | "3414": 387 | - PR_MDB_PROVIDER 388 | - PT_BINARY 389 | "0c0d": 390 | - PR_PHYSICAL_FORWARDING_ADDRESS 391 | - PT_BINARY 392 | "004a": 393 | - PR_DISC_VAL 394 | - PT_BOOLEAN 395 | "7d08": 396 | - PR_FAV_DEL_SUBS 397 | - PT_BINARY 398 | "6650": 399 | - PR_RULE_ACTION_NUMBER 400 | - PT_LONG 401 | "3a24": 402 | - PR_BUSINESS_FAX_NUMBER 403 | - PT_TSTRING 404 | "3415": 405 | - PR_RECEIVE_FOLDER_SETTINGS 406 | - PT_OBJECT 407 | "0c0e": 408 | - PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED 409 | - PT_BOOLEAN 410 | "004b": 411 | - PR_ORIG_MESSAGE_CLASS 412 | - PT_TSTRING 413 | "6651": 414 | - PR_RULE_FOLDER_ENTRYID 415 | - PT_BINARY 416 | "6783": 417 | - PR_SEARCH_FLAGS 418 | - PT_LONG 419 | "3a25": 420 | - PR_HOME_FAX_NUMBER 421 | - PT_TSTRING 422 | "674a": 423 | - PR_MID 424 | - PT_I8 425 | "0c0f": 426 | - PR_PHYSICAL_FORWARDING_PROHIBITED 427 | - PT_BOOLEAN 428 | "004c": 429 | - PR_ORIGINAL_AUTHOR_ENTRYID 430 | - PT_BINARY 431 | "6652": 432 | - PR_ACTIVE_USER_ENTRYID 433 | - PT_BINARY 434 | "3a26": 435 | - PR_COUNTRY 436 | - PT_TSTRING 437 | "674b": 438 | - PR_CATEG_ID 439 | - PT_I8 440 | "004d": 441 | - PR_ORIGINAL_AUTHOR_NAME 442 | - PT_TSTRING 443 | "1030": 444 | - PR_INTERNET_APPROVED 445 | - PT_TSTRING 446 | "6653": 447 | - PR_X400_ENVELOPE_TYPE 448 | - PT_LONG 449 | "3a27": 450 | - PR_LOCALITY 451 | - PT_TSTRING 452 | "661a": 453 | - PR_USER_NAME 454 | - PT_TSTRING 455 | "674c": 456 | - PR_PARENT_CATEG_ID 457 | - PT_I8 458 | "004e": 459 | - PR_ORIGINAL_SUBMIT_TIME 460 | - PT_SYSTIME 461 | "1031": 462 | - PR_INTERNET_CONTROL 463 | - PT_TSTRING 464 | "6654": 465 | - PR_MSG_FOLD_TIME 466 | - PT_SYSTIME 467 | "3a28": 468 | - PR_STATE_OR_PROVINCE 469 | - PT_TSTRING 470 | "661b": 471 | - PR_MAILBOX_OWNER_ENTRYID 472 | - PT_BINARY 473 | "674d": 474 | - PR_INST_ID 475 | - PT_I8 476 | "004f": 477 | - PR_REPLY_RECIPIENT_ENTRIES 478 | - PT_BINARY 479 | "1032": 480 | - PR_INTERNET_DISTRIBUTION 481 | - PT_TSTRING 482 | "3a29": 483 | - PR_STREET_ADDRESS 484 | - PT_TSTRING 485 | "661c": 486 | - PR_MAILBOX_OWNER_NAME 487 | - PT_TSTRING 488 | "674e": 489 | - PR_INSTANCE_NUM 490 | - PT_LONG 491 | "1033": 492 | - PR_INTERNET_FOLLOWUP_TO 493 | - PT_TSTRING 494 | "6655": 495 | - PR_ICS_CHANGE_KEY 496 | - PT_BINARY 497 | "661d": 498 | - PR_OOF_STATE 499 | - PT_BOOLEAN 500 | "674f": 501 | - PR_ADDRBOOK_MID 502 | - PT_I8 503 | "661e": 504 | - PR_SCHEDULE_FOLDER_ENTRYID 505 | - PT_BINARY 506 | "1034": 507 | - PR_INTERNET_LINES 508 | - PT_LONG 509 | "3a30": 510 | - PR_ASSISTANT 511 | - PT_TSTRING 512 | "0c1a": 513 | - PR_SENDER_NAME 514 | - PT_TSTRING 515 | "661f": 516 | - PR_IPM_DAF_ENTRYID 517 | - PT_BINARY 518 | "1035": 519 | - PR_INTERNET_MESSAGE_ID 520 | - PT_TSTRING 521 | "6658": 522 | - PR_GW_ADMIN_OPERATIONS 523 | - PT_LONG 524 | "0c1b": 525 | - PR_SUPPLEMENTARY_INFO 526 | - PT_TSTRING 527 | "1036": 528 | - PR_INTERNET_NEWSGROUPS 529 | - PT_TSTRING 530 | "6659": 531 | - PR_INTERNET_CONTENT 532 | - PT_BINARY 533 | "0c1c": 534 | - PR_TYPE_OF_MTS_USER 535 | - PT_LONG 536 | "0c1d": 537 | - PR_SENDER_SEARCH_KEY 538 | - PT_BINARY 539 | "005a": 540 | - PR_ORIGINAL_SENDER_NAME 541 | - PT_TSTRING 542 | "1037": 543 | - PR_INTERNET_ORGANIZATION 544 | - PT_TSTRING 545 | "66aa": 546 | - PR_RESTRICTION_COUNT 547 | - PT_LONG 548 | "0c1e": 549 | - PR_SENDER_ADDRTYPE 550 | - PT_TSTRING 551 | "005b": 552 | - PR_ORIGINAL_SENDER_ENTRYID 553 | - PT_BINARY 554 | "10c0": 555 | - PR_SMTP_TEMP_TBL_DATA 556 | - PT_BINARY 557 | "6660": 558 | - PR_TRACE_INFO 559 | - PT_BINARY 560 | "1038": 561 | - PR_INTERNET_NNTP_PATH 562 | - PT_TSTRING 563 | "66ab": 564 | - PR_CATEG_COUNT 565 | - PT_LONG 566 | "675a": 567 | - PR_PCL_EXPORT 568 | - PT_BINARY 569 | "0c1f": 570 | - PR_SENDER_EMAIL_ADDRESS 571 | - PT_TSTRING 572 | "005c": 573 | - PR_ORIGINAL_SENDER_SEARCH_KEY 574 | - PT_BINARY 575 | "10c1": 576 | - PR_SMTP_TEMP_TBL_DATA_2 577 | - PT_LONG 578 | "35e0": 579 | - PR_IPM_SUBTREE_ENTRYID 580 | - PT_BINARY 581 | "6661": 582 | - PR_SUBJECT_TRACE_INFO 583 | - PT_BINARY 584 | "1039": 585 | - PR_INTERNET_REFERENCES 586 | - PT_TSTRING 587 | "66ac": 588 | - PR_CACHED_COLUMN_COUNT 589 | - PT_LONG 590 | "675b": 591 | - PR_CN_MV_EXPORT 592 | - PT_MV_BINARY 593 | "8100": 594 | - PR_EMS_AB_OPEN_RETRY_INTERVAL 595 | - PT_LONG 596 | "005d": 597 | - PR_ORIGINAL_SENT_REPRESENTING_NAME 598 | - PT_TSTRING 599 | "10c2": 600 | - PR_SMTP_TEMP_TBL_DATA_3 601 | - PT_BINARY 602 | "6662": 603 | - PR_RECIPIENT_NUMBER 604 | - PT_LONG 605 | "66ad": 606 | - PR_NORMAL_MSG_W_ATTACH_COUNT 607 | - PT_LONG 608 | "662a": 609 | - PR_TRANSFER_ENABLED 610 | - PT_BOOLEAN 611 | "8101": 612 | - PR_EMS_AB_ORGANIZATION_NAME 613 | - PT_MV_TSTRING 614 | "005e": 615 | - PR_ORIGINAL_SENT_REPRESENTING_ENTRYID 616 | - PT_BINARY 617 | "10c3": 618 | - PR_CAL_START_TIME 619 | - PT_SYSTIME 620 | "1040": 621 | - PR_NNTP_XREF 622 | - PT_TSTRING 623 | "35e2": 624 | - PR_IPM_OUTBOX_ENTRYID 625 | - PT_BINARY 626 | "6663": 627 | - PR_MTS_SUBJECT_ID 628 | - PT_BINARY 629 | "66ae": 630 | - PR_ASSOC_MSG_W_ATTACH_COUNT 631 | - PT_LONG 632 | "662b": 633 | - PR_TEST_LINE_SPEED 634 | - PT_BINARY 635 | "8102": 636 | - PR_EMS_AB_ORGANIZATIONAL_UNIT_NAME 637 | - PT_MV_TSTRING 638 | "005f": 639 | - PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY 640 | - PT_BINARY 641 | "10c4": 642 | - PR_CAL_END_TIME 643 | - PT_SYSTIME 644 | "1041": 645 | - PR_INTERNET_PRECEDENCE 646 | - PT_TSTRING 647 | "35e3": 648 | - PR_IPM_WASTEBASKET_ENTRYID 649 | - PT_BINARY 650 | "6664": 651 | - PR_REPORT_DESTINATION_NAME 652 | - PT_TSTRING 653 | "66af": 654 | - PR_RECIPIENT_ON_NORMAL_MSG_COUNT 655 | - PT_LONG 656 | "662c": 657 | - PR_HIERARCHY_SYNCHRONIZER 658 | - PT_OBJECT 659 | "8103": 660 | - PR_EMS_AB_ORIGINAL_DISPLAY_TABLE 661 | - PT_BINARY 662 | "10c5": 663 | - PR_CAL_RECURRING_ID 664 | - PT_SYSTIME 665 | "1042": 666 | - PR_IN_REPLY_TO_ID 667 | - PT_UNICODE 668 | "35e4": 669 | - PR_IPM_SENTMAIL_ENTRYID 670 | - PT_BINARY 671 | "6665": 672 | - PR_REPORT_DESTINATION_ENTRYID 673 | - PT_BINARY 674 | "662d": 675 | - PR_CONTENTS_SYNCHRONIZER 676 | - PT_OBJECT 677 | "8104": 678 | - PR_EMS_AB_ORIGINAL_DISPLAY_TABLE_MSDOS 679 | - PT_BINARY 680 | "10c6": 681 | - PR_DAV_SUBMIT_DATA 682 | - PT_UNICODE 683 | "1043": 684 | - PR_LIST_HELP 685 | - PT_UNICODE 686 | "35e5": 687 | - PR_VIEWS_ENTRYID 688 | - PT_BINARY 689 | "662e": 690 | - PR_COLLECTOR 691 | - PT_OBJECT 692 | "36df": 693 | - PR_FOLDER_WEBVIEWINFO 694 | - PT_BINARY 695 | "8105": 696 | - PR_EMS_AB_OUTBOUND_SITES 697 | - PT_OBJECT|PT_MV_TSTRING 698 | "10c7": 699 | - PR_CDO_EXPANSION_INDEX 700 | - PT_LONG 701 | "1044": 702 | - PR_LIST_SUBSCRIBE 703 | - PT_UNICODE 704 | "35e6": 705 | - PR_COMMON_VIEWS_ENTRYID 706 | - PT_BINARY 707 | "6666": 708 | - PR_CONTENT_SEARCH_KEY 709 | - PT_BINARY 710 | "662f": 711 | - PR_FAST_TRANSFER 712 | - PT_OBJECT 713 | "8106": 714 | - PR_EMS_AB_P_SELECTOR 715 | - PT_BINARY 716 | "10c8": 717 | - PR_IFS_INTERNAL_DATA 718 | - PT_BINARY 719 | "3a40": 720 | - PR_SEND_RICH_INFO 721 | - PT_BOOLEAN 722 | "35e7": 723 | - PR_FINDER_ENTRYID 724 | - PT_BINARY 725 | "6667": 726 | - PR_FOREIGN_ID 727 | - PT_BINARY 728 | "1045": 729 | - PR_LIST_UNSUBSCRIBE 730 | - PT_UNICODE 731 | "3a41": 732 | - PR_WEDDING_ANNIVERSARY 733 | - PT_SYSTIME 734 | "6668": 735 | - PR_FOREIGN_REPORT_ID 736 | - PT_BINARY 737 | "8107": 738 | - PR_EMS_AB_P_SELECTOR_INBOUND 739 | - PT_BINARY 740 | "3301": 741 | - PR_FORM_VERSION 742 | - PT_TSTRING 743 | "3a42": 744 | - PR_BIRTHDAY 745 | - PT_SYSTIME 746 | "6669": 747 | - PR_FOREIGN_SUBJECT_ID 748 | - PT_BINARY 749 | "3a0a": 750 | - PR_INITIALS 751 | - PT_TSTRING 752 | "8108": 753 | - PR_EMS_AB_PER_MSG_DIALOG_DISPLAY_TABLE 754 | - PT_BINARY 755 | "3302": 756 | - PR_FORM_CLSID 757 | - PT_CLSID 758 | "3a43": 759 | - PR_HOBBIES 760 | - PT_TSTRING 761 | "8109": 762 | - PR_EMS_AB_PER_RECIP_DIALOG_DISPLAY_TABLE 763 | - PT_BINARY 764 | "6670": 765 | - PR_LONGTERM_ENTRYID_FROM_TABLE 766 | - PT_BINARY 767 | "3303": 768 | - PR_FORM_CONTACT_NAME 769 | - PT_TSTRING 770 | "3a44": 771 | - PR_MIDDLE_NAME 772 | - PT_TSTRING 773 | "3a0b": 774 | - PR_KEYWORD 775 | - PT_TSTRING 776 | "65c2": 777 | - PR_REPLY_TEMPLATE_ID 778 | - PT_BINARY 779 | "6671": 780 | - PR_MEMBER_ID 781 | - PT_I8 782 | "3304": 783 | - PR_FORM_CATEGORY 784 | - PT_TSTRING 785 | "3a45": 786 | - PR_DISPLAY_NAME_PREFIX 787 | - PT_TSTRING 788 | "3a0c": 789 | - PR_LANGUAGE 790 | - PT_TSTRING 791 | "6672": 792 | - PR_MEMBER_NAME 793 | - PT_TSTRING 794 | "3305": 795 | - PR_FORM_CATEGORY_SUB 796 | - PT_TSTRING 797 | "3a46": 798 | - PR_PROFESSION 799 | - PT_TSTRING 800 | "8110": 801 | - PR_EMS_AB_PUBLIC_DELEGATES_BL 802 | - PT_OBJECT|PT_MV_TSTRING 803 | "3a0d": 804 | - PR_LOCATION 805 | - PT_TSTRING 806 | "6673": 807 | - PR_MEMBER_RIGHTS 808 | - PT_LONG 809 | "3306": 810 | - PR_FORM_HOST_MAP 811 | - PT_MV_LONG 812 | "3a47": 813 | - PR_PREFERRED_BY_NAME 814 | - PT_TSTRING 815 | "663a": 816 | - PR_HAS_RULES 817 | - PT_BOOLEAN 818 | "8111": 819 | - PR_EMS_AB_QUOTA_NOTIFICATION_SCHEDULE 820 | - PT_BINARY 821 | "3a0e": 822 | - PR_MAIL_PERMISSION 823 | - PT_BOOLEAN 824 | "6674": 825 | - PR_RULE_ID 826 | - PT_I8 827 | "3307": 828 | - PR_FORM_HIDDEN 829 | - PT_BOOLEAN 830 | "3a48": 831 | - PR_SPOUSE_NAME 832 | - PT_TSTRING 833 | "663b": 834 | - PR_ADDRESS_BOOK_ENTRYID 835 | - PT_BINARY 836 | "36ec": 837 | - PR_AGING_PERIOD 838 | - PT_LONG 839 | "8112": 840 | - PR_EMS_AB_QUOTA_NOTIFICATION_STYLE 841 | - PT_LONG 842 | "3a0f": 843 | - PR_MHS_COMMON_NAME 844 | - PT_TSTRING 845 | "6675": 846 | - PR_RULE_IDS 847 | - PT_BINARY 848 | "3308": 849 | - PR_FORM_DESIGNER_NAME 850 | - PT_TSTRING 851 | "3a49": 852 | - PR_COMPUTER_NETWORK_NAME 853 | - PT_TSTRING 854 | "663c": 855 | - PR_PUBLIC_FOLDER_ENTRYID 856 | - PT_BINARY 857 | "8113": 858 | - PR_EMS_AB_RANGE_LOWER 859 | - PT_LONG 860 | "6676": 861 | - PR_RULE_SEQUENCE 862 | - PT_LONG 863 | "3309": 864 | - PR_FORM_DESIGNER_GUID 865 | - PT_CLSID 866 | "663d": 867 | - PR_OFFLINE_FLAGS 868 | - PT_LONG 869 | "36ee": 870 | - PR_AGING_GRANULARITY 871 | - PT_LONG 872 | "7c00": 873 | - PR_FAV_DISPLAY_NAME 874 | - PT_TSTRING 875 | "8114": 876 | - PR_EMS_AB_RANGE_UPPER 877 | - PT_LONG 878 | "663e": 879 | - PR_HIERARCHY_CHANGE_NUM 880 | - PT_LONG 881 | "8115": 882 | - PR_EMS_AB_RAS_CALLBACK_NUMBER 883 | - PT_TSTRING 884 | "3a50": 885 | - PR_PERSONAL_HOME_PAGE 886 | - PT_TSTRING 887 | "6677": 888 | - PR_RULE_STATE 889 | - PT_LONG 890 | "663f": 891 | - PR_HAS_MODERATOR_RULES 892 | - PT_BOOLEAN 893 | "7c02": 894 | - PR_FAV_PUBLIC_SOURCE_KEY 895 | - PT_BINARY 896 | "8116": 897 | - PR_EMS_AB_RAS_PHONE_NUMBER 898 | - PT_TSTRING 899 | "3a51": 900 | - PR_BUSINESS_HOME_PAGE 901 | - PT_TSTRING 902 | "6678": 903 | - PR_RULE_USER_FLAGS 904 | - PT_LONG 905 | "8117": 906 | - PR_EMS_AB_RAS_PHONEBOOK_ENTRY_NAME 907 | - PT_TSTRING 908 | "3a52": 909 | - PR_CONTACT_VERSION 910 | - PT_CLSID 911 | "6679": 912 | - PR_RULE_CONDITION 913 | - PT_SRESTRICTION 914 | "3a1a": 915 | - PR_PRIMARY_TELEPHONE_NUMBER 916 | - PT_TSTRING 917 | "7c04": 918 | - PR_OST_OSTID 919 | - PT_BINARY 920 | "4000": 921 | - PR_NEW_ATTACH 922 | - PT_LONG 923 | "3a53": 924 | - PR_CONTACT_ENTRYIDS 925 | - PT_MV_BINARY 926 | "3a1b": 927 | - PR_BUSINESS2_TELEPHONE_NUMBER 928 | - PT_TSTRING 929 | "007a": 930 | - PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS 931 | - PT_TSTRING 932 | "8118": 933 | - PR_EMS_AB_RAS_REMOTE_SRVR_NAME 934 | - PT_TSTRING 935 | "4001": 936 | - PR_START_EMBED 937 | - PT_LONG 938 | "3a54": 939 | - PR_CONTACT_ADDRTYPES 940 | - PT_MV_TSTRING 941 | "81a1": 942 | - PR_EMS_AB_X500_RDN 943 | - PT_TSTRING 944 | "340d": 945 | - PR_STORE_SUPPORT_MASK 946 | - PT_LONG 947 | "007b": 948 | - PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE 949 | - PT_TSTRING 950 | "8119": 951 | - PR_EMS_AB_REGISTERED_ADDRESS 952 | - PT_MV_BINARY 953 | "4002": 954 | - PR_END_EMBED 955 | - PT_LONG 956 | "6681": 957 | - PR_RULE_PROVIDER 958 | - PT_TSTRING 959 | "3a55": 960 | - PR_CONTACT_DEFAULT_ADDRESS_INDEX 961 | - PT_LONG 962 | "81a2": 963 | - PR_EMS_AB_X500_NC 964 | - PT_TSTRING 965 | "3a1c": 966 | - PR_MOBILE_TELEPHONE_NUMBER 967 | - PT_TSTRING 968 | "340e": 969 | - PR_STORE_STATE 970 | - PT_LONG 971 | "007c": 972 | - PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS 973 | - PT_TSTRING 974 | "4003": 975 | - PR_START_RECIP 976 | - PT_LONG 977 | "6682": 978 | - PR_RULE_NAME 979 | - PT_TSTRING 980 | "3a56": 981 | - PR_CONTACT_EMAIL_ADDRESSES 982 | - PT_MV_TSTRING 983 | "677b": 984 | - PR_PF_STORAGE_QUOTA 985 | - PT_LONG 986 | "81a3": 987 | - PR_EMS_AB_REFERRAL_LIST 988 | - PT_MV_TSTRING 989 | "8120": 990 | - PR_EMS_AB_REPORT_TO_ORIGINATOR 991 | - PT_BOOLEAN 992 | "3a1d": 993 | - PR_RADIO_TELEPHONE_NUMBER 994 | - PT_TSTRING 995 | "007d": 996 | - PR_TRANSPORT_MESSAGE_HEADERS 997 | - PT_TSTRING 998 | "6683": 999 | - PR_RULE_LEVEL 1000 | - PT_LONG 1001 | "3a57": 1002 | - PR_COMPANY_MAIN_PHONE_NUMBER 1003 | - PT_TSTRING 1004 | "664a": 1005 | - PR_HAS_NAMED_PROPERTIES 1006 | - PT_BOOLEAN 1007 | "81a4": 1008 | - PR_EMS_AB_NNTP_DISTRIBUTIONS_FLAG 1009 | - PT_BOOLEAN 1010 | "8121": 1011 | - PR_EMS_AB_REPORT_TO_OWNER 1012 | - PT_BOOLEAN 1013 | "3a1e": 1014 | - PR_CAR_TELEPHONE_NUMBER 1015 | - PT_TSTRING 1016 | "007e": 1017 | - PR_DELEGATION 1018 | - PT_BINARY 1019 | "4004": 1020 | - PR_END_RECIP 1021 | - PT_LONG 1022 | "6684": 1023 | - PR_RULE_PROVIDER_DATA 1024 | - PT_BINARY 1025 | "3a58": 1026 | - PR_CHILDRENS_NAMES 1027 | - PT_MV_TSTRING 1028 | "664b": 1029 | - PR_REPLICA_VERSION 1030 | - PT_I8 1031 | "81a5": 1032 | - PR_EMS_AB_ASSOC_PROTOCOL_CFG_NNTP 1033 | - PT_OBJECT|PT_MV_TSTRING 1034 | "8122": 1035 | - PR_EMS_AB_REQ_SEQ 1036 | - PT_LONG 1037 | "3a1f": 1038 | - PR_OTHER_TELEPHONE_NUMBER 1039 | - PT_TSTRING 1040 | "007f": 1041 | - PR_TNEF_CORRELATION_KEY 1042 | - PT_BINARY 1043 | "4005": 1044 | - PR_END_CC_RECIP 1045 | - PT_LONG 1046 | "6685": 1047 | - PR_LAST_FULL_BACKUP 1048 | - PT_SYSTIME 1049 | "3a59": 1050 | - PR_HOME_ADDRESS_CITY 1051 | - PT_TSTRING 1052 | "81a6": 1053 | - PR_EMS_AB_NNTP_NEWSFEEDS 1054 | - PT_OBJECT|PT_MV_TSTRING 1055 | "8123": 1056 | - PR_EMS_AB_RESPONSIBLE_LOCAL_DXA 1057 | - PT_OBJECT|PT_MV_TSTRING 1058 | "4006": 1059 | - PR_END_BCC_RECIP 1060 | - PT_LONG 1061 | "8124": 1062 | - PR_EMS_AB_RID_SERVER 1063 | - PT_OBJECT|PT_MV_TSTRING 1064 | "4007": 1065 | - PR_END_P1_RECIP 1066 | - PT_LONG 1067 | "6687": 1068 | - PR_PROFILE_ADDR_INFO 1069 | - PT_BINARY 1070 | "81a8": 1071 | - PR_EMS_AB_ENABLED_PROTOCOL_CFG 1072 | - PT_BOOLEAN 1073 | "8125": 1074 | - PR_EMS_AB_ROLE_OCCUPANT 1075 | - PT_OBJECT|PT_MV_TSTRING 1076 | "81a9": 1077 | - PR_EMS_AB_HTTP_PUB_AB_ATTRIBUTES 1078 | - PT_MV_TSTRING 1079 | "8126": 1080 | - PR_EMS_AB_ROUTING_LIST 1081 | - PT_MV_TSTRING 1082 | "4009": 1083 | - PR_START_TOP_FLD 1084 | - PT_LONG 1085 | "3a60": 1086 | - PR_OTHER_ADDRESS_COUNTRY 1087 | - PT_TSTRING 1088 | "8127": 1089 | - PR_EMS_AB_RTS_CHECKPOINT_SIZE 1090 | - PT_LONG 1091 | "5902": 1092 | - PR_INET_MAIL_OVERRIDE_FORMAT 1093 | - PT_LONG 1094 | "3a61": 1095 | - PR_OTHER_ADDRESS_POSTAL_CODE 1096 | - PT_TSTRING 1097 | "6689": 1098 | - PR_PROFILE_OPTIONS_DATA 1099 | - PT_BINARY 1100 | "3a2a": 1101 | - PR_POSTAL_CODE 1102 | - PT_TSTRING 1103 | "8128": 1104 | - PR_EMS_AB_RTS_RECOVERY_TIMEOUT 1105 | - PT_LONG 1106 | "4010": 1107 | - PR_START_FAI_MSG 1108 | - PT_LONG 1109 | "3a62": 1110 | - PR_OTHER_ADDRESS_STATE_OR_PROVINCE 1111 | - PT_TSTRING 1112 | "81b0": 1113 | - PR_EMS_AB_OUTBOUND_HOST_TYPE 1114 | - PT_BOOLEAN 1115 | "3a2b": 1116 | - PR_POST_BOX 1117 | - PT_TSTRING 1118 | "4011": 1119 | - PR_NEW_FX_FOLDER 1120 | - PT_BINARY 1121 | "7ffa": 1122 | - PR_ATTACHMENT_LINKID 1123 | - PT_LONG 1124 | "65e0": 1125 | - PR_SOURCE_KEY 1126 | - PT_BINARY 1127 | "3a63": 1128 | - PR_OTHER_ADDRESS_STREET 1129 | - PT_TSTRING 1130 | "81b1": 1131 | - PR_EMS_AB_PROXY_GENERATION_ENABLED 1132 | - PT_BOOLEAN 1133 | "3a2c": 1134 | - PR_TELEX_NUMBER 1135 | - PT_TSTRING 1136 | "8129": 1137 | - PR_EMS_AB_RTS_WINDOW_SIZE 1138 | - PT_LONG 1139 | "4012": 1140 | - PR_INCR_SYNC_CHG 1141 | - PT_LONG 1142 | "7ffb": 1143 | - PR_EXCEPTION_STARTTIME 1144 | - PT_SYSTIME 1145 | "65e1": 1146 | - PR_PARENT_SOURCE_KEY 1147 | - PT_BINARY 1148 | "6690": 1149 | - PR_REPLICATION_STYLE 1150 | - PT_LONG 1151 | "3a64": 1152 | - PR_OTHER_ADDRESS_POST_OFFICE_BOX 1153 | - PT_TSTRING 1154 | "81b2": 1155 | - PR_EMS_AB_ROOT_NEWSGROUPS_FOLDER_ID 1156 | - PT_BINARY 1157 | "10f1": 1158 | - PR_OWA_URL 1159 | - PT_TSTRING 1160 | "4013": 1161 | - PR_INCR_SYNC_DEL 1162 | - PT_LONG 1163 | "7ffc": 1164 | - PR_EXCEPTION_ENDTIME 1165 | - PT_SYSTIME 1166 | "65e2": 1167 | - PR_CHANGE_KEY 1168 | - PT_BINARY 1169 | "6691": 1170 | - PR_REPLICATION_SCHEDULE 1171 | - PT_BINARY 1172 | "81b3": 1173 | - PR_EMS_AB_CONNECTION_TYPE 1174 | - PT_BOOLEAN 1175 | "3a2d": 1176 | - PR_ISDN_NUMBER 1177 | - PT_TSTRING 1178 | "8130": 1179 | - PR_EMS_AB_SERIAL_NUMBER 1180 | - PT_MV_TSTRING 1181 | "10f2": 1182 | - PR_DISABLE_FULL_FIDELITY 1183 | - PT_BOOLEAN 1184 | "4014": 1185 | - PR_INCR_SYNC_END 1186 | - PT_LONG 1187 | "7ffd": 1188 | - PR_ATTACHMENT_FLAGS 1189 | - PT_LONG 1190 | "65e3": 1191 | - PR_PREDECESSOR_CHANGE_LIST 1192 | - PT_BINARY 1193 | "6692": 1194 | - PR_REPLICATION_MESSAGE_PRIORITY 1195 | - PT_LONG 1196 | "81b4": 1197 | - PR_EMS_AB_CONNECTION_LIST_FILTER_TYPE 1198 | - PT_LONG 1199 | "8131": 1200 | - PR_EMS_AB_SERVICE_ACTION_FIRST 1201 | - PT_LONG 1202 | "3a2e": 1203 | - PR_ASSISTANT_TELEPHONE_NUMBER 1204 | - PT_TSTRING 1205 | "10f3": 1206 | - PR_URL_COMP_NAME 1207 | - PT_UNICODE 1208 | "7ffe": 1209 | - PR_ATTACHMENT_HIDDEN 1210 | - PT_BOOLEAN 1211 | "65e4": 1212 | - PR_SYNCHRONIZE_FLAGS 1213 | - PT_LONG 1214 | "6693": 1215 | - PR_OVERALL_MSG_AGE_LIMIT 1216 | - PT_LONG 1217 | "665a": 1218 | - PR_HAS_ATTACH_FROM_IMAIL 1219 | - PT_BOOLEAN 1220 | "81b5": 1221 | - PR_EMS_AB_PORT_NUMBER 1222 | - PT_LONG 1223 | "8132": 1224 | - PR_EMS_AB_SERVICE_ACTION_OTHER 1225 | - PT_LONG 1226 | "3a2f": 1227 | - PR_HOME2_TELEPHONE_NUMBER 1228 | - PT_TSTRING 1229 | "10f4": 1230 | - PR_ATTR_HIDDEN 1231 | - PT_BOOLEAN 1232 | "4015": 1233 | - PR_INCR_SYNC_MSG 1234 | - PT_LONG 1235 | "65e5": 1236 | - PR_AUTO_ADD_NEW_SUBS 1237 | - PT_BOOLEAN 1238 | "6694": 1239 | - PR_REPLICATION_ALWAYS_INTERVAL 1240 | - PT_LONG 1241 | "5909": 1242 | - PR_MSG_EDITOR_FORMAT 1243 | - PT_LONG 1244 | "665b": 1245 | - PR_ORIGINATOR_NAME 1246 | - PT_TSTRING 1247 | "8001": 1248 | - PR_EMS_AB_DISPLAY_NAME_OVERRIDE 1249 | - PT_BOOLEAN 1250 | "81b6": 1251 | - PR_EMS_AB_PROTOCOL_SETTINGS 1252 | - PT_MV_TSTRING 1253 | "8133": 1254 | - PR_EMS_AB_SERVICE_ACTION_SECOND 1255 | - PT_LONG 1256 | "10f5": 1257 | - PR_ATTR_SYSTEM 1258 | - PT_BOOLEAN 1259 | "4016": 1260 | - PR_FX_DEL_PROP 1261 | - PT_LONG 1262 | "65e6": 1263 | - PR_NEW_SUBS_GET_AUTO_ADD 1264 | - PT_BOOLEAN 1265 | "6695": 1266 | - PR_REPLICATION_MSG_SIZE 1267 | - PT_LONG 1268 | "665c": 1269 | - PR_ORIGINATOR_ADDR 1270 | - PT_TSTRING 1271 | "81b7": 1272 | - PR_EMS_AB_GROUP_BY_ATTR_1 1273 | - PT_TSTRING 1274 | "8134": 1275 | - PR_EMS_AB_SERVICE_RESTART_DELAY 1276 | - PT_LONG 1277 | "10f6": 1278 | - PR_ATTR_READONLY 1279 | - PT_BOOLEAN 1280 | "4017": 1281 | - PR_IDSET_GIVEN 1282 | - PT_LONG 1283 | "65e7": 1284 | - PR_MESSAGE_SITE_NAME 1285 | - PT_TSTRING 1286 | "6696": 1287 | - PR_IS_NEWSGROUP_ANCHOR 1288 | - PT_BOOLEAN 1289 | "103a": 1290 | - PR_SUPERSEDES 1291 | - PT_TSTRING 1292 | "665d": 1293 | - PR_ORIGINATOR_ADDRTYPE 1294 | - PT_TSTRING 1295 | "8003": 1296 | - PR_EMS_AB_CA_CERTIFICATE 1297 | - PT_MV_BINARY 1298 | "81b8": 1299 | - PR_EMS_AB_GROUP_BY_ATTR_2 1300 | - PT_TSTRING 1301 | "8135": 1302 | - PR_EMS_AB_SERVICE_RESTART_MESSAGE 1303 | - PT_TSTRING 1304 | "65e8": 1305 | - PR_MESSAGE_PROCESSED 1306 | - PT_BOOLEAN 1307 | "6697": 1308 | - PR_IS_NEWSGROUP 1309 | - PT_BOOLEAN 1310 | "103b": 1311 | - PR_POST_FOLDER_ENTRIES 1312 | - PT_BINARY 1313 | "665e": 1314 | - PR_ORIGINATOR_ENTRYID 1315 | - PT_BINARY 1316 | "8004": 1317 | - PR_EMS_AB_FOLDER_PATHNAME 1318 | - PT_TSTRING 1319 | "81b9": 1320 | - PR_EMS_AB_GROUP_BY_ATTR_3 1321 | - PT_TSTRING 1322 | "8136": 1323 | - PR_EMS_AB_SESSION_DISCONNECT_TIMER 1324 | - PT_LONG 1325 | "4019": 1326 | - PR_SENDER_FLAGS 1327 | - PT_LONG 1328 | "65e9": 1329 | - PR_RULE_MSG_STATE 1330 | - PT_LONG 1331 | "3a70": 1332 | - PR_USER_X509_CERTIFICATE 1333 | - PT_MV_BINARY 1334 | "6698": 1335 | - PR_REPLICA_LIST 1336 | - PT_BINARY 1337 | "103c": 1338 | - PR_POST_FOLDER_NAMES 1339 | - PT_TSTRING 1340 | "665f": 1341 | - PR_ARRIVAL_TIME 1342 | - PT_SYSTIME 1343 | "8005": 1344 | - PR_EMS_AB_MANAGER 1345 | - PT_OBJECT|PT_MV_TSTRING 1346 | "8137": 1347 | - PR_EMS_AB_SITE_AFFINITY 1348 | - PT_MV_TSTRING 1349 | "3a71": 1350 | - PR_SEND_INTERNET_ENCODING 1351 | - PT_LONG 1352 | "103d": 1353 | - PR_POST_REPLY_FOLDER_ENTRIES 1354 | - PT_BINARY 1355 | "35df": 1356 | - PR_VALID_FOLDER_MASK 1357 | - PT_LONG 1358 | "8006": 1359 | - PR_EMS_AB_HOME_MDB 1360 | - PT_OBJECT|PT_MV_TSTRING 1361 | "8138": 1362 | - PR_EMS_AB_SITE_PROXY_SPACE 1363 | - PT_MV_TSTRING 1364 | "4020": 1365 | - PR_READ_RECEIPT_FLAGS 1366 | - PT_LONG 1367 | "6699": 1368 | - PR_OVERALL_AGE_LIMIT 1369 | - PT_LONG 1370 | "103e": 1371 | - PR_POST_REPLY_FOLDER_NAMES 1372 | - PT_TSTRING 1373 | "8007": 1374 | - PR_EMS_AB_HOME_MTA 1375 | - PT_OBJECT|PT_MV_TSTRING 1376 | "8139": 1377 | - PR_EMS_AB_SPACE_LAST_COMPUTED 1378 | - PT_SYSTIME 1379 | "4021": 1380 | - PR_SOFT_DELETES 1381 | - PT_BOOLEAN 1382 | "65f0": 1383 | - PR_RULE_MSG_CONDITION 1384 | - PT_BINARY 1385 | "103f": 1386 | - PR_POST_REPLY_DENIED 1387 | - PT_BINARY 1388 | "81c0": 1389 | - PR_EMS_AB_VIEW_CONTAINER_2 1390 | - PT_TSTRING 1391 | "65f1": 1392 | - PR_RULE_MSG_CONDITION_LCID 1393 | - PT_LONG 1394 | "81c1": 1395 | - PR_EMS_AB_VIEW_CONTAINER_3 1396 | - PT_TSTRING 1397 | "65f2": 1398 | - PR_RULE_MSG_VERSION 1399 | - PT_SHORT 1400 | "81c2": 1401 | - PR_EMS_AB_PROMO_EXPIRATION 1402 | - PT_SYSTIME 1403 | "8008": 1404 | - PR_EMS_AB_IS_MEMBER_OF_DL 1405 | - PT_OBJECT|PT_MV_TSTRING 1406 | "65f3": 1407 | - PR_RULE_MSG_SEQUENCE 1408 | - PT_LONG 1409 | "10ca": 1410 | - PR_CAL_REMINDER_NEXT_TIME 1411 | - PT_SYSTIME 1412 | "81c3": 1413 | - PR_EMS_AB_DISABLED_GATEWAY_PROXY 1414 | - PT_MV_TSTRING 1415 | "8140": 1416 | - PR_EMS_AB_T_SELECTOR 1417 | - PT_BINARY 1418 | "8009": 1419 | - PR_EMS_AB_MEMBER 1420 | - PT_OBJECT|PT_MV_TSTRING 1421 | "1080": 1422 | - PR_ACTION 1423 | - PT_LONG 1424 | "65f4": 1425 | - PR_PREVENT_MSG_CREATE 1426 | - PT_BOOLEAN 1427 | "81c4": 1428 | - PR_EMS_AB_COMPROMISED_KEY_LIST 1429 | - PT_BINARY 1430 | "8141": 1431 | - PR_EMS_AB_T_SELECTOR_INBOUND 1432 | - PT_BINARY 1433 | "1081": 1434 | - PR_ACTION_FLAG 1435 | - PT_LONG 1436 | "65f5": 1437 | - PR_IMAP_INTERNAL_DATE 1438 | - PT_SYSTIME 1439 | "8010": 1440 | - PR_EMS_AB_HELP_DATA32 1441 | - PT_BINARY 1442 | "81c5": 1443 | - PR_EMS_AB_INSADMIN 1444 | - PT_OBJECT|PT_MV_TSTRING 1445 | "8142": 1446 | - PR_EMS_AB_TARGET_MTAS 1447 | - PT_MV_TSTRING 1448 | "1082": 1449 | - PR_ACTION_DATE 1450 | - PT_SYSTIME 1451 | "666c": 1452 | - PR_IN_CONFLICT 1453 | - PT_BOOLEAN 1454 | "8011": 1455 | - PR_EMS_AB_TARGET_ADDRESS 1456 | - PT_TSTRING 1457 | "81c6": 1458 | - PR_EMS_AB_OVERRIDE_NNTP_CONTENT_FORMAT 1459 | - PT_BOOLEAN 1460 | "8143": 1461 | - PR_EMS_AB_TELETEX_TERMINAL_IDENTIFIER 1462 | - PT_MV_BINARY 1463 | "3f00": 1464 | - PR_CONTROL_FLAGS 1465 | - PT_LONG 1466 | "810a": 1467 | - PR_EMS_AB_PERIOD_REP_SYNC_TIMES 1468 | - PT_BINARY 1469 | "8012": 1470 | - PR_EMS_AB_TELEPHONE_NUMBER 1471 | - PT_MV_TSTRING 1472 | "81c7": 1473 | - PR_EMS_AB_OBJ_VIEW_CONTAINERS 1474 | - PT_OBJECT|PT_MV_TSTRING 1475 | "8144": 1476 | - PR_EMS_AB_TEMP_ASSOC_THRESHOLD 1477 | - PT_LONG 1478 | "3f01": 1479 | - PR_CONTROL_STRUCTURE 1480 | - PT_BINARY 1481 | "810b": 1482 | - PR_EMS_AB_PERIOD_REPL_STAGGER 1483 | - PT_LONG 1484 | "8013": 1485 | - PR_EMS_AB_NT_SECURITY_DESCRIPTOR 1486 | - PT_BINARY 1487 | "8145": 1488 | - PR_EMS_AB_TOMBSTONE_LIFETIME 1489 | - PT_LONG 1490 | "3f02": 1491 | - PR_CONTROL_TYPE 1492 | - PT_LONG 1493 | "810c": 1494 | - PR_EMS_AB_POSTAL_ADDRESS 1495 | - PT_MV_BINARY 1496 | "8014": 1497 | - PR_EMS_AB_HOME_MDB_BL 1498 | - PT_OBJECT|PT_MV_TSTRING 1499 | "8146": 1500 | - PR_EMS_AB_TRACKING_LOG_PATH_NAME 1501 | - PT_TSTRING 1502 | "3f03": 1503 | - PR_DELTAX 1504 | - PT_LONG 1505 | "810d": 1506 | - PR_EMS_AB_PREFERRED_DELIVERY_METHOD 1507 | - PT_MV_LONG 1508 | "8015": 1509 | - PR_EMS_AB_PUBLIC_DELEGATES 1510 | - PT_OBJECT|PT_MV_TSTRING 1511 | "8147": 1512 | - PR_EMS_AB_TRANS_RETRY_MINS 1513 | - PT_LONG 1514 | "3f04": 1515 | - PR_DELTAY 1516 | - PT_LONG 1517 | "810e": 1518 | - PR_EMS_AB_PRMD 1519 | - PT_TSTRING 1520 | "3a4a": 1521 | - PR_CUSTOMER_ID 1522 | - PT_TSTRING 1523 | "8016": 1524 | - PR_EMS_AB_CERTIFICATE_REVOCATION_LIST 1525 | - PT_BINARY 1526 | "8148": 1527 | - PR_EMS_AB_TRANS_TIMEOUT_MINS 1528 | - PT_LONG 1529 | "4030": 1530 | - PR_SENDER_SIMPLE_DISP_NAME 1531 | - PT_UNICODE 1532 | "3f05": 1533 | - PR_XPOS 1534 | - PT_LONG 1535 | "810f": 1536 | - PR_EMS_AB_PROXY_GENERATOR_DLL 1537 | - PT_TSTRING 1538 | "330a": 1539 | - PR_FORM_MESSAGE_BEHAVIOR 1540 | - PT_LONG 1541 | "3a4b": 1542 | - PR_TTYTDD_PHONE_NUMBER 1543 | - PT_TSTRING 1544 | "8017": 1545 | - PR_EMS_AB_ADDRESS_ENTRY_DISPLAY_TABLE 1546 | - PT_BINARY 1547 | "8149": 1548 | - PR_EMS_AB_TRANSFER_RETRY_INTERVAL 1549 | - PT_LONG 1550 | "4031": 1551 | - PR_SENT_REPRESENTING_SIMPLE_DISP_NAME 1552 | - PT_UNICODE 1553 | "3f06": 1554 | - PR_YPOS 1555 | - PT_LONG 1556 | "3a4c": 1557 | - PR_FTP_SITE 1558 | - PT_TSTRING 1559 | "8018": 1560 | - PR_EMS_AB_ADDRESS_SYNTAX 1561 | - PT_BINARY 1562 | "3f07": 1563 | - PR_CONTROL_ID 1564 | - PT_BINARY 1565 | "80a0": 1566 | - PR_EMS_AB_DXA_TYPES 1567 | - PT_LONG 1568 | "3a4d": 1569 | - PR_GENDER 1570 | - PT_SHORT 1571 | "3f08": 1572 | - PR_INITIAL_DETAILS_PANE 1573 | - PT_LONG 1574 | "80a1": 1575 | - PR_EMS_AB_DXA_UNCONF_CONTAINER_LIST 1576 | - PT_OBJECT|PT_MV_TSTRING 1577 | "8150": 1578 | - PR_EMS_AB_TURN_REQUEST_THRESHOLD 1579 | - PT_LONG 1580 | "3a4e": 1581 | - PR_MANAGER_NAME 1582 | - PT_TSTRING 1583 | "66fe": 1584 | - PR_OWNER_NAME 1585 | - PT_STRING8 1586 | "80a2": 1587 | - PR_EMS_AB_ENCAPSULATION_METHOD 1588 | - PT_LONG 1589 | "8151": 1590 | - PR_EMS_AB_TWO_WAY_ALTERNATE_FACILITY 1591 | - PT_BOOLEAN 1592 | "1090": 1593 | - PR_FLAG_STATUS 1594 | - PT_LONG 1595 | "667b": 1596 | - PR_PROFILE_MOAB 1597 | - PT_TSTRING 1598 | "80a3": 1599 | - PR_EMS_AB_ENCRYPT 1600 | - PT_BOOLEAN 1601 | "8152": 1602 | - PR_EMS_AB_UNAUTH_ORIG_BL 1603 | - PT_OBJECT|PT_MV_TSTRING 1604 | "3a4f": 1605 | - PR_NICKNAME 1606 | - PT_TSTRING 1607 | "3900": 1608 | - PR_DISPLAY_TYPE 1609 | - PT_LONG 1610 | "1091": 1611 | - PR_FLAG_COMPLETE 1612 | - PT_SYSTIME 1613 | "66ff": 1614 | - PR_ASSIGNED_ACCESS 1615 | - PT_LONG 1616 | "667c": 1617 | - PR_PROFILE_MOAB_GUID 1618 | - PT_TSTRING 1619 | "80a4": 1620 | - PR_EMS_AB_EXPAND_DLS_LOCALLY 1621 | - PT_BOOLEAN 1622 | "8153": 1623 | - PR_EMS_AB_USER_PASSWORD 1624 | - PT_MV_BINARY 1625 | "811a": 1626 | - PR_EMS_AB_REMOTE_BRIDGE_HEAD 1627 | - PT_TSTRING 1628 | "667d": 1629 | - PR_PROFILE_MOAB_SEQ 1630 | - PT_LONG 1631 | "80a5": 1632 | - PR_EMS_AB_EXPORT_CONTAINERS 1633 | - PT_OBJECT|PT_MV_TSTRING 1634 | "8154": 1635 | - PR_EMS_AB_USN_CREATED 1636 | - PT_LONG 1637 | "3902": 1638 | - PR_TEMPLATEID 1639 | - PT_BINARY 1640 | "811b": 1641 | - PR_EMS_AB_REMOTE_BRIDGE_HEAD_ADDRESS 1642 | - PT_TSTRING 1643 | "80a6": 1644 | - PR_EMS_AB_EXPORT_CUSTOM_RECIPIENTS 1645 | - PT_BOOLEAN 1646 | "8023": 1647 | - PR_EMS_AB_BUSINESS_ROLES 1648 | - PT_BINARY 1649 | "8155": 1650 | - PR_EMS_AB_USN_DSA_LAST_OBJ_REMOVED 1651 | - PT_LONG 1652 | "811c": 1653 | - PR_EMS_AB_REMOTE_OUT_BH_SERVER 1654 | - PT_OBJECT|PT_MV_TSTRING 1655 | "4038": 1656 | - PR_CREATOR_SIMPLE_DISP_NAME 1657 | - PT_UNICODE 1658 | "667f": 1659 | - PR_IMPLIED_RESTRICTIONS 1660 | - PT_MV_BINARY 1661 | "80a7": 1662 | - PR_EMS_AB_EXTENDED_CHARS_ALLOWED 1663 | - PT_BOOLEAN 1664 | "8024": 1665 | - PR_EMS_AB_OWNER_BL 1666 | - PT_OBJECT|PT_MV_TSTRING 1667 | "8156": 1668 | - PR_EMS_AB_USN_LAST_OBJ_REM 1669 | - PT_LONG 1670 | "3904": 1671 | - PR_PRIMARY_CAPABILITY 1672 | - PT_BINARY 1673 | "7c0a": 1674 | - PR_STORE_SLOWLINK 1675 | - PT_BOOLEAN 1676 | "811d": 1677 | - PR_EMS_AB_REMOTE_SITE 1678 | - PT_OBJECT|PT_MV_TSTRING 1679 | "80a8": 1680 | - PR_EMS_AB_EXTENSION_DATA 1681 | - PT_MV_BINARY 1682 | "8025": 1683 | - PR_EMS_AB_CROSS_CERTIFICATE_PAIR 1684 | - PT_MV_BINARY 1685 | "8157": 1686 | - PR_EMS_AB_USN_SOURCE 1687 | - PT_LONG 1688 | "811e": 1689 | - PR_EMS_AB_REPLICATION_SENSITIVITY 1690 | - PT_LONG 1691 | "80a9": 1692 | - PR_EMS_AB_EXTENSION_NAME 1693 | - PT_MV_TSTRING 1694 | "8026": 1695 | - PR_EMS_AB_AUTHORITY_REVOCATION_LIST 1696 | - PT_MV_BINARY 1697 | "8158": 1698 | - PR_EMS_AB_X121_ADDRESS 1699 | - PT_MV_TSTRING 1700 | "811f": 1701 | - PR_EMS_AB_REPLICATION_STAGGER 1702 | - PT_LONG 1703 | "3a5a": 1704 | - PR_HOME_ADDRESS_COUNTRY 1705 | - PT_TSTRING 1706 | "8027": 1707 | - PR_EMS_AB_ASSOC_NT_ACCOUNT 1708 | - PT_BINARY 1709 | "8159": 1710 | - PR_EMS_AB_X25_CALL_USER_DATA_INCOMING 1711 | - PT_BINARY 1712 | "3a5b": 1713 | - PR_HOME_ADDRESS_POSTAL_CODE 1714 | - PT_TSTRING 1715 | "8028": 1716 | - PR_EMS_AB_EXPIRATION_TIME 1717 | - PT_SYSTIME 1718 | "3a5c": 1719 | - PR_HOME_ADDRESS_STATE_OR_PROVINCE 1720 | - PT_TSTRING 1721 | "8029": 1722 | - PR_EMS_AB_USN_CHANGED 1723 | - PT_LONG 1724 | "400a": 1725 | - PR_START_SUB_FLD 1726 | - PT_LONG 1727 | "80b0": 1728 | - PR_EMS_AB_GATEWAY_LOCAL_CRED 1729 | - PT_TSTRING 1730 | "3a5d": 1731 | - PR_HOME_ADDRESS_STREET 1732 | - PT_TSTRING 1733 | "81ab": 1734 | - PR_EMS_AB_HTTP_SERVERS 1735 | - PT_MV_TSTRING 1736 | "400b": 1737 | - PR_END_FOLDER 1738 | - PT_LONG 1739 | "80b1": 1740 | - PR_EMS_AB_GATEWAY_LOCAL_DESIG 1741 | - PT_TSTRING 1742 | "8160": 1743 | - PR_EMS_AB_X400_ATTACHMENT_TYPE 1744 | - PT_BINARY 1745 | "3a5e": 1746 | - PR_HOME_ADDRESS_POST_OFFICE_BOX 1747 | - PT_TSTRING 1748 | "81ac": 1749 | - PR_EMS_AB_MODERATED 1750 | - PT_BOOLEAN 1751 | "400c": 1752 | - PR_START_MESSAGE 1753 | - PT_LONG 1754 | "80b2": 1755 | - PR_EMS_AB_GATEWAY_PROXY 1756 | - PT_MV_TSTRING 1757 | "8161": 1758 | - PR_EMS_AB_X400_SELECTOR_SYNTAX 1759 | - PT_LONG 1760 | "3a5f": 1761 | - PR_OTHER_ADDRESS_CITY 1762 | - PT_TSTRING 1763 | "81ad": 1764 | - PR_EMS_AB_RAS_ACCOUNT 1765 | - PT_TSTRING 1766 | "400d": 1767 | - PR_END_MESSAGE 1768 | - PT_LONG 1769 | "668b": 1770 | - PR_NNTP_CONTROL_FOLDER_ENTRYID 1771 | - PT_BINARY 1772 | "80b3": 1773 | - PR_EMS_AB_GATEWAY_ROUTING_TREE 1774 | - PT_BINARY 1775 | "8030": 1776 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_4 1777 | - PT_TSTRING 1778 | "8162": 1779 | - PR_EMS_AB_X500_ACCESS_CONTROL_LIST 1780 | - PT_BINARY 1781 | "81ae": 1782 | - PR_EMS_AB_RAS_PASSWORD 1783 | - PT_BINARY 1784 | "812a": 1785 | - PR_EMS_AB_RUNS_ON 1786 | - PT_OBJECT|PT_MV_TSTRING 1787 | "400e": 1788 | - PR_END_ATTACH 1789 | - PT_LONG 1790 | "668c": 1791 | - PR_NEWSGROUP_ROOT_FOLDER_ENTRYID 1792 | - PT_BINARY 1793 | "80b4": 1794 | - PR_EMS_AB_GWART_LAST_MODIFIED 1795 | - PT_SYSTIME 1796 | "8031": 1797 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_5 1798 | - PT_TSTRING 1799 | "8163": 1800 | - PR_EMS_AB_XMIT_TIMEOUT_NON_URGENT 1801 | - PT_LONG 1802 | "81af": 1803 | - PR_EMS_AB_INCOMING_PASSWORD 1804 | - PT_BINARY 1805 | "812b": 1806 | - PR_EMS_AB_S_SELECTOR 1807 | - PT_BINARY 1808 | "400f": 1809 | - PR_EC_WARNING 1810 | - PT_LONG 1811 | "668d": 1812 | - PR_INBOUND_NEWSFEED_DN 1813 | - PT_TSTRING 1814 | "80b5": 1815 | - PR_EMS_AB_HAS_FULL_REPLICA_NCS 1816 | - PT_OBJECT|PT_MV_TSTRING 1817 | "8032": 1818 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_6 1819 | - PT_TSTRING 1820 | "8164": 1821 | - PR_EMS_AB_XMIT_TIMEOUT_NORMAL 1822 | - PT_LONG 1823 | "812c": 1824 | - PR_EMS_AB_S_SELECTOR_INBOUND 1825 | - PT_BINARY 1826 | "668e": 1827 | - PR_OUTBOUND_NEWSFEED_DN 1828 | - PT_TSTRING 1829 | "80b6": 1830 | - PR_EMS_AB_HAS_MASTER_NCS 1831 | - PT_OBJECT|PT_MV_TSTRING 1832 | "8033": 1833 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_7 1834 | - PT_TSTRING 1835 | "8165": 1836 | - PR_EMS_AB_XMIT_TIMEOUT_URGENT 1837 | - PT_LONG 1838 | "812d": 1839 | - PR_EMS_AB_SEARCH_FLAGS 1840 | - PT_LONG 1841 | "668f": 1842 | - PR_DELETED_ON 1843 | - PT_SYSTIME 1844 | "80b7": 1845 | - PR_EMS_AB_HEURISTICS 1846 | - PT_LONG 1847 | "8034": 1848 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_8 1849 | - PT_TSTRING 1850 | "8166": 1851 | - PR_EMS_AB_SITE_FOLDER_GUID 1852 | - PT_BINARY 1853 | "812e": 1854 | - PR_EMS_AB_SEARCH_GUIDE 1855 | - PT_MV_BINARY 1856 | "80b8": 1857 | - PR_EMS_AB_HIDE_DL_MEMBERSHIP 1858 | - PT_BOOLEAN 1859 | "8035": 1860 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_9 1861 | - PT_TSTRING 1862 | "8167": 1863 | - PR_EMS_AB_SITE_FOLDER_SERVER 1864 | - PT_OBJECT|PT_MV_TSTRING 1865 | "812f": 1866 | - PR_EMS_AB_SEE_ALSO 1867 | - PT_OBJECT|PT_MV_TSTRING 1868 | "80b9": 1869 | - PR_EMS_AB_HIDE_FROM_ADDRESS_BOOK 1870 | - PT_BOOLEAN 1871 | "8036": 1872 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_10 1873 | - PT_TSTRING 1874 | "8168": 1875 | - PR_EMS_AB_REPLICATION_MAIL_MSG_SIZE 1876 | - PT_LONG 1877 | "8037": 1878 | - PR_EMS_AB_SECURITY_PROTOCOL 1879 | - PT_MV_BINARY 1880 | "8169": 1881 | - PR_EMS_AB_MAXIMUM_OBJECT_ID 1882 | - PT_BINARY 1883 | "8038": 1884 | - PR_EMS_AB_PF_CONTACTS 1885 | - PT_OBJECT|PT_MV_TSTRING 1886 | "401a": 1887 | - PR_SENT_REPRESENTING_FLAGS 1888 | - PT_LONG 1889 | "65ea": 1890 | - PR_RULE_MSG_USER_FLAGS 1891 | - PT_LONG 1892 | "80c0": 1893 | - PR_EMS_AB_IS_DELETED 1894 | - PT_BOOLEAN 1895 | "81ba": 1896 | - PR_EMS_AB_GROUP_BY_ATTR_4 1897 | - PT_TSTRING 1898 | "401b": 1899 | - PR_RCVD_BY_FLAGS 1900 | - PT_LONG 1901 | "65eb": 1902 | - PR_RULE_MSG_PROVIDER 1903 | - PT_UNICODE 1904 | "80c1": 1905 | - PR_EMS_AB_IS_SINGLE_VALUED 1906 | - PT_BOOLEAN 1907 | "8170": 1908 | - PR_EMS_AB_NETWORK_ADDRESS 1909 | - PT_MV_TSTRING 1910 | "401c": 1911 | - PR_RCVD_REPRESENTING_FLAGS 1912 | - PT_LONG 1913 | "65ec": 1914 | - PR_RULE_MSG_NAME 1915 | - PT_UNICODE 1916 | "669a": 1917 | - PR_INTERNET_CHARSET 1918 | - PT_TSTRING 1919 | "80c2": 1920 | - PR_EMS_AB_KCC_STATUS 1921 | - PT_MV_BINARY 1922 | "8171": 1923 | - PR_EMS_AB_LDAP_DISPLAY_NAME 1924 | - PT_MV_TSTRING 1925 | "401d": 1926 | - PR_ORIGINAL_SENDER_FLAGS 1927 | - PT_LONG 1928 | "65ed": 1929 | - PR_RULE_MSG_LEVEL 1930 | - PT_LONG 1931 | "669b": 1932 | - PR_DELETED_MESSAGE_SIZE 1933 | - PT_I8 1934 | "80c3": 1935 | - PR_EMS_AB_KNOWLEDGE_INFORMATION 1936 | - PT_MV_TSTRING 1937 | "8040": 1938 | - PR_EMS_AB_ENCRYPT_ALG_LIST_NA 1939 | - PT_MV_TSTRING 1940 | "401e": 1941 | - PR_ORIGINAL_SENT_REPRESENTING_FLAGS 1942 | - PT_LONG 1943 | "65ee": 1944 | - PR_RULE_MSG_PROVIDER_DATA 1945 | - PT_BINARY 1946 | "669c": 1947 | - PR_DELETED_NORMAL_MESSAGE_SIZE 1948 | - PT_I8 1949 | "80c4": 1950 | - PR_EMS_AB_LINE_WRAP 1951 | - PT_LONG 1952 | "8041": 1953 | - PR_EMS_AB_ENCRYPT_ALG_LIST_OTHER 1954 | - PT_MV_TSTRING 1955 | "8173": 1956 | - PR_EMS_AB_SCHEMA_FLAGS 1957 | - PT_LONG 1958 | "81be": 1959 | - PR_EMS_AB_VIEW_SITE 1960 | - PT_TSTRING 1961 | "813a": 1962 | - PR_EMS_AB_STREET_ADDRESS 1963 | - PT_TSTRING 1964 | "401f": 1965 | - PR_REPORT_FLAGS 1966 | - PT_LONG 1967 | "669d": 1968 | - PR_DELETED_ASSOC_MESSAGE_SIZE 1969 | - PT_I8 1970 | "80c5": 1971 | - PR_EMS_AB_LINK_ID 1972 | - PT_LONG 1973 | "8042": 1974 | - PR_EMS_AB_IMPORTED_FROM 1975 | - PT_TSTRING 1976 | "8174": 1977 | - PR_EMS_AB_BRIDGEHEAD_SERVERS 1978 | - PT_OBJECT|PT_MV_TSTRING 1979 | "81bf": 1980 | - PR_EMS_AB_VIEW_CONTAINER_1 1981 | - PT_TSTRING 1982 | "813b": 1983 | - PR_EMS_AB_SUB_REFS 1984 | - PT_OBJECT|PT_MV_TSTRING 1985 | "65ef": 1986 | - PR_RULE_MSG_ACTIONS 1987 | - PT_BINARY 1988 | "669e": 1989 | - PR_SECURE_IN_SITE 1990 | - PT_BOOLEAN 1991 | "80c6": 1992 | - PR_EMS_AB_LOCAL_BRIDGE_HEAD 1993 | - PT_TSTRING 1994 | "8043": 1995 | - PR_EMS_AB_ENCRYPT_ALG_SELECTED_NA 1996 | - PT_TSTRING 1997 | "8175": 1998 | - PR_EMS_AB_WWW_HOME_PAGE 1999 | - PT_TSTRING 2000 | "3e00": 2001 | - PR_IDENTITY_DISPLAY 2002 | - PT_TSTRING 2003 | "800a": 2004 | - PR_EMS_AB_AUTOREPLY_MESSAGE 2005 | - PT_TSTRING 2006 | "813c": 2007 | - PR_EMS_AB_SUBMISSION_CONT_LENGTH 2008 | - PT_LONG 2009 | "80c7": 2010 | - PR_EMS_AB_LOCAL_BRIDGE_HEAD_ADDRESS 2011 | - PT_TSTRING 2012 | "8044": 2013 | - PR_EMS_AB_ACCESS_CATEGORY 2014 | - PT_LONG 2015 | "8176": 2016 | - PR_EMS_AB_NNTP_CONTENT_FORMAT 2017 | - PT_TSTRING 2018 | "3e01": 2019 | - PR_IDENTITY_ENTRYID 2020 | - PT_BINARY 2021 | "800b": 2022 | - PR_EMS_AB_AUTOREPLY 2023 | - PT_BOOLEAN 2024 | "813d": 2025 | - PR_EMS_AB_SUPPORTED_APPLICATION_CONTEXT 2026 | - PT_MV_BINARY 2027 | "4059": 2028 | - PR_CREATOR_FLAGS 2029 | - PT_LONG 2030 | "80c8": 2031 | - PR_EMS_AB_LOCAL_INITIAL_TURN 2032 | - PT_BOOLEAN 2033 | "8045": 2034 | - PR_EMS_AB_ACTIVATION_SCHEDULE 2035 | - PT_BINARY 2036 | "8177": 2037 | - PR_EMS_AB_POP_CONTENT_FORMAT 2038 | - PT_TSTRING 2039 | "3e02": 2040 | - PR_RESOURCE_METHODS 2041 | - PT_LONG 2042 | "800c": 2043 | - PR_EMS_AB_OWNER 2044 | - PT_OBJECT|PT_MV_TSTRING 2045 | "813e": 2046 | - PR_EMS_AB_SUPPORTING_STACK 2047 | - PT_OBJECT|PT_MV_TSTRING 2048 | "80c9": 2049 | - PR_EMS_AB_LOCAL_SCOPE 2050 | - PT_OBJECT|PT_MV_TSTRING 2051 | "8046": 2052 | - PR_EMS_AB_ACTIVATION_STYLE 2053 | - PT_LONG 2054 | "8178": 2055 | - PR_EMS_AB_LANGUAGE 2056 | - PT_LONG 2057 | "3e03": 2058 | - PR_RESOURCE_TYPE 2059 | - PT_LONG 2060 | "800d": 2061 | - PR_EMS_AB_KM_SERVER 2062 | - PT_OBJECT|PT_MV_TSTRING 2063 | "813f": 2064 | - PR_EMS_AB_SUPPORTING_STACK_BL 2065 | - PT_OBJECT|PT_MV_TSTRING 2066 | "8047": 2067 | - PR_EMS_AB_ADDRESS_ENTRY_DISPLAY_TABLE_MSDOS 2068 | - PT_BINARY 2069 | "8179": 2070 | - PR_EMS_AB_POP_CHARACTER_SET 2071 | - PT_TSTRING 2072 | "4061": 2073 | - PR_ORIGINATOR_SEARCH_KEY 2074 | - PT_BINARY 2075 | "3e04": 2076 | - PR_STATUS_CODE 2077 | - PT_LONG 2078 | "800e": 2079 | - PR_EMS_AB_REPORTS 2080 | - PT_OBJECT 2081 | "8048": 2082 | - PR_EMS_AB_ADDRESS_TYPE 2083 | - PT_TSTRING 2084 | "3e05": 2085 | - PR_IDENTITY_SEARCH_KEY 2086 | - PT_BINARY 2087 | "800f": 2088 | - PR_EMS_AB_PROXY_ADDRESSES 2089 | - PT_MV_TSTRING 2090 | "80d0": 2091 | - PR_EMS_AB_MDB_MSG_TIME_OUT_PERIOD 2092 | - PT_LONG 2093 | "8049": 2094 | - PR_EMS_AB_ADMD 2095 | - PT_TSTRING 2096 | "3e06": 2097 | - PR_OWN_STORE_ENTRYID 2098 | - PT_BINARY 2099 | "80d1": 2100 | - PR_EMS_AB_MDB_OVER_QUOTA_LIMIT 2101 | - PT_LONG 2102 | "8180": 2103 | - PR_EMS_AB_CONNECTION_LIST_FILTER 2104 | - PT_BINARY 2105 | "4064": 2106 | - PR_REPORT_DESTINATION_SEARCH_KEY 2107 | - PT_BINARY 2108 | "3e07": 2109 | - PR_RESOURCE_PATH 2110 | - PT_TSTRING 2111 | "80d2": 2112 | - PR_EMS_AB_MDB_STORAGE_QUOTA 2113 | - PT_LONG 2114 | "8181": 2115 | - PR_EMS_AB_AVAILABLE_AUTHORIZATION_PACKAGES 2116 | - PT_MV_TSTRING 2117 | "4065": 2118 | - PR_ER_FLAG 2119 | - PT_LONG 2120 | "3e08": 2121 | - PR_STATUS_STRING 2122 | - PT_TSTRING 2123 | "402c": 2124 | - PR_MESSAGE_SUBMISSION_ID_FROM_CLIENT 2125 | - PT_BINARY 2126 | "80d3": 2127 | - PR_EMS_AB_MDB_UNREAD_LIMIT 2128 | - PT_LONG 2129 | "8050": 2130 | - PR_EMS_AB_ANCESTOR_ID 2131 | - PT_BINARY 2132 | "8182": 2133 | - PR_EMS_AB_CHARACTER_SET_LIST 2134 | - PT_MV_TSTRING 2135 | "3e09": 2136 | - PR_X400_DEFERRED_DELIVERY_CANCEL 2137 | - PT_BOOLEAN 2138 | "8051": 2139 | - PR_EMS_AB_ASSOC_REMOTE_DXA 2140 | - PT_OBJECT|PT_MV_TSTRING 2141 | "8183": 2142 | - PR_EMS_AB_USE_SITE_VALUES 2143 | - PT_BOOLEAN 2144 | "814a": 2145 | - PR_EMS_AB_TRANSFER_TIMEOUT_NON_URGENT 2146 | - PT_LONG 2147 | "80d4": 2148 | - PR_EMS_AB_MDB_USE_DEFAULTS 2149 | - PT_BOOLEAN 2150 | "8052": 2151 | - PR_EMS_AB_ASSOCIATION_LIFETIME 2152 | - PT_LONG 2153 | "8184": 2154 | - PR_EMS_AB_ENABLED_AUTHORIZATION_PACKAGES 2155 | - PT_MV_TSTRING 2156 | "814b": 2157 | - PR_EMS_AB_TRANSFER_TIMEOUT_NORMAL 2158 | - PT_LONG 2159 | "4068": 2160 | - PR_INTERNET_SUBJECT 2161 | - PT_BINARY 2162 | "80d5": 2163 | - PR_EMS_AB_MESSAGE_TRACKING_ENABLED 2164 | - PT_BOOLEAN 2165 | "8053": 2166 | - PR_EMS_AB_AUTH_ORIG_BL 2167 | - PT_OBJECT|PT_MV_TSTRING 2168 | "8185": 2169 | - PR_EMS_AB_CHARACTER_SET 2170 | - PT_TSTRING 2171 | "814c": 2172 | - PR_EMS_AB_TRANSFER_TIMEOUT_URGENT 2173 | - PT_LONG 2174 | "4069": 2175 | - PR_INTERNET_SENT_REPRESENTING_NAME 2176 | - PT_BINARY 2177 | "80d6": 2178 | - PR_EMS_AB_MONITOR_CLOCK 2179 | - PT_BOOLEAN 2180 | "8054": 2181 | - PR_EMS_AB_AUTHORIZED_DOMAIN 2182 | - PT_TSTRING 2183 | "8186": 2184 | - PR_EMS_AB_CONTENT_TYPE 2185 | - PT_LONG 2186 | "814d": 2187 | - PR_EMS_AB_TRANSLATION_TABLE_USED 2188 | - PT_LONG 2189 | "80d7": 2190 | - PR_EMS_AB_MONITOR_SERVERS 2191 | - PT_BOOLEAN 2192 | "8187": 2193 | - PR_EMS_AB_ANONYMOUS_ACCESS 2194 | - PT_BOOLEAN 2195 | "814e": 2196 | - PR_EMS_AB_TRANSPORT_EXPEDITED_DATA 2197 | - PT_BOOLEAN 2198 | "8c18": 2199 | - PR_EMS_AB_VIEW_FLAGS 2200 | - PT_LONG 2201 | "80d8": 2202 | - PR_EMS_AB_MONITOR_SERVICES 2203 | - PT_BOOLEAN 2204 | "8055": 2205 | - PR_EMS_AB_AUTHORIZED_PASSWORD 2206 | - PT_BINARY 2207 | "8188": 2208 | - PR_EMS_AB_CONTROL_MSG_FOLDER_ID 2209 | - PT_BINARY 2210 | "814f": 2211 | - PR_EMS_AB_TRUST_LEVEL 2212 | - PT_LONG 2213 | "8c19": 2214 | - PR_EMS_AB_GROUP_BY_ATTR_VALUE_STR 2215 | - PT_TSTRING 2216 | "80d9": 2217 | - PR_EMS_AB_MONITORED_CONFIGURATIONS 2218 | - PT_OBJECT|PT_MV_TSTRING 2219 | "8056": 2220 | - PR_EMS_AB_AUTHORIZED_USER 2221 | - PT_TSTRING 2222 | "8189": 2223 | - PR_EMS_AB_USENET_SITE_NAME 2224 | - PT_TSTRING 2225 | "3fc9": 2226 | - PR_LAST_CONFLICT 2227 | - PT_BINARY 2228 | "8057": 2229 | - PR_EMS_AB_BUSINESS_CATEGORY 2230 | - PT_MV_TSTRING 2231 | "8058": 2232 | - PR_EMS_AB_CAN_CREATE_PF 2233 | - PT_OBJECT|PT_MV_TSTRING 2234 | "8c20": 2235 | - PR_EMS_AB_INBOUND_ACCEPT_ALL 2236 | - PT_BOOLEAN 2237 | "80e0": 2238 | - PR_EMS_AB_MONITORING_CACHED_VIA_MAIL 2239 | - PT_OBJECT|PT_MV_TSTRING 2240 | "3fd0": 2241 | - PR_REPL_HEADER 2242 | - PT_BINARY 2243 | "8059": 2244 | - PR_EMS_AB_CAN_CREATE_PF_BL 2245 | - PT_OBJECT|PT_MV_TSTRING 2246 | "8c21": 2247 | - PR_EMS_AB_ENABLED 2248 | - PT_BOOLEAN 2249 | "80e1": 2250 | - PR_EMS_AB_MONITORING_CACHED_VIA_RPC 2251 | - PT_OBJECT|PT_MV_TSTRING 2252 | "8190": 2253 | - PR_EMS_AB_INCOMING_MSG_SIZE_LIMIT 2254 | - PT_LONG 2255 | "8c22": 2256 | - PR_EMS_AB_PRESERVE_INTERNET_CONTENT 2257 | - PT_BOOLEAN 2258 | "80e2": 2259 | - PR_EMS_AB_MONITORING_ESCALATION_PROCEDURE 2260 | - PT_MV_BINARY 2261 | "8191": 2262 | - PR_EMS_AB_SEND_TNEF 2263 | - PT_BOOLEAN 2264 | "3fd1": 2265 | - PR_REPL_STATUS 2266 | - PT_BINARY 2267 | "80aa": 2268 | - PR_EMS_AB_EXTENSION_NAME_INHERITED 2269 | - PT_MV_TSTRING 2270 | "403d": 2271 | - PR_ORG_ADDR_TYPE 2272 | - PT_UNICODE 2273 | "8c23": 2274 | - PR_EMS_AB_DISABLE_DEFERRED_COMMIT 2275 | - PT_BOOLEAN 2276 | "80e3": 2277 | - PR_EMS_AB_MONITORING_HOTSITE_POLL_INTERVAL 2278 | - PT_LONG 2279 | "8060": 2280 | - PR_EMS_AB_CAN_PRESERVE_DNS 2281 | - PT_BOOLEAN 2282 | "8192": 2283 | - PR_EMS_AB_AUTHORIZED_PASSWORD_CONFIRM 2284 | - PT_BINARY 2285 | "3fd2": 2286 | - PR_REPL_CHANGES 2287 | - PT_BINARY 2288 | "80ab": 2289 | - PR_EMS_AB_FACSIMILE_TELEPHONE_NUMBER 2290 | - PT_MV_BINARY 2291 | "403e": 2292 | - PR_ORG_EMAIL_ADDR 2293 | - PT_UNICODE 2294 | "8c24": 2295 | - PR_EMS_AB_CLIENT_ACCESS_ENABLED 2296 | - PT_BOOLEAN 2297 | "80e4": 2298 | - PR_EMS_AB_MONITORING_HOTSITE_POLL_UNITS 2299 | - PT_LONG 2300 | "8061": 2301 | - PR_EMS_AB_CLOCK_ALERT_OFFSET 2302 | - PT_LONG 2303 | "8193": 2304 | - PR_EMS_AB_INBOUND_NEWSFEED 2305 | - PT_TSTRING 2306 | "3fd3": 2307 | - PR_REPL_RGM 2308 | - PT_BINARY 2309 | "80ac": 2310 | - PR_EMS_AB_FILE_VERSION 2311 | - PT_BINARY 2312 | "815a": 2313 | - PR_EMS_AB_X25_CALL_USER_DATA_OUTGOING 2314 | - PT_BINARY 2315 | "8c25": 2316 | - PR_EMS_AB_REQUIRE_SSL 2317 | - PT_BOOLEAN 2318 | "80e5": 2319 | - PR_EMS_AB_MONITORING_MAIL_UPDATE_INTERVAL 2320 | - PT_LONG 2321 | "8062": 2322 | - PR_EMS_AB_CLOCK_ALERT_REPAIR 2323 | - PT_BOOLEAN 2324 | "8194": 2325 | - PR_EMS_AB_NEWSFEED_TYPE 2326 | - PT_LONG 2327 | "3fd4": 2328 | - PR_RMI 2329 | - PT_BINARY 2330 | "80ad": 2331 | - PR_EMS_AB_FILTER_LOCAL_ADDRESSES 2332 | - PT_BOOLEAN 2333 | "815b": 2334 | - PR_EMS_AB_X25_FACILITIES_DATA_INCOMING 2335 | - PT_BINARY 2336 | "8063": 2337 | - PR_EMS_AB_CLOCK_WARNING_OFFSET 2338 | - PT_LONG 2339 | "80ae": 2340 | - PR_EMS_AB_FOLDERS_CONTAINER 2341 | - PT_OBJECT|PT_MV_TSTRING 2342 | "80e6": 2343 | - PR_EMS_AB_MONITORING_MAIL_UPDATE_UNITS 2344 | - PT_LONG 2345 | "815c": 2346 | - PR_EMS_AB_X25_FACILITIES_DATA_OUTGOING 2347 | - PT_BINARY 2348 | "8195": 2349 | - PR_EMS_AB_OUTBOUND_NEWSFEED 2350 | - PT_TSTRING 2351 | "8c26": 2352 | - PR_EMS_AB_ANONYMOUS_ACCOUNT 2353 | - PT_TSTRING 2354 | "3fd5": 2355 | - PR_INTERNAL_POST_REPLY 2356 | - PT_BINARY 2357 | "8064": 2358 | - PR_EMS_AB_CLOCK_WARNING_REPAIR 2359 | - PT_BOOLEAN 2360 | "80af": 2361 | - PR_EMS_AB_GARBAGE_COLL_PERIOD 2362 | - PT_LONG 2363 | "80e7": 2364 | - PR_EMS_AB_MONITORING_NORMAL_POLL_INTERVAL 2365 | - PT_LONG 2366 | "815d": 2367 | - PR_EMS_AB_X25_LEASED_LINE_PORT 2368 | - PT_BINARY 2369 | "8196": 2370 | - PR_EMS_AB_NEWSGROUP_LIST 2371 | - PT_BINARY 2372 | "8c27": 2373 | - PR_EMS_AB_CERTIFICATE_CHAIN_V3 2374 | - PT_BINARY 2375 | "3fd6": 2376 | - PR_NTSD_MODIFICATION_TIME 2377 | - PT_SYSTIME 2378 | "8065": 2379 | - PR_EMS_AB_COMPUTER_NAME 2380 | - PT_TSTRING 2381 | "80e8": 2382 | - PR_EMS_AB_MONITORING_NORMAL_POLL_UNITS 2383 | - PT_LONG 2384 | "815e": 2385 | - PR_EMS_AB_X25_LEASED_OR_SWITCHED 2386 | - PT_BOOLEAN 2387 | "8197": 2388 | - PR_EMS_AB_NNTP_DISTRIBUTIONS 2389 | - PT_MV_TSTRING 2390 | "8c28": 2391 | - PR_EMS_AB_CERTIFICATE_REVOCATION_LIST_V3 2392 | - PT_BINARY 2393 | "802d": 2394 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_1 2395 | - PT_TSTRING 2396 | "3fd8": 2397 | - PR_PREVIEW_UNREAD 2398 | - PT_TSTRING 2399 | "8066": 2400 | - PR_EMS_AB_CONNECTED_DOMAINS 2401 | - PT_MV_TSTRING 2402 | "80e9": 2403 | - PR_EMS_AB_MONITORING_RECIPIENTS 2404 | - PT_OBJECT|PT_MV_TSTRING 2405 | "815f": 2406 | - PR_EMS_AB_X25_REMOTE_MTA_PHONE 2407 | - PT_TSTRING 2408 | "8198": 2409 | - PR_EMS_AB_NEWSGROUP 2410 | - PT_TSTRING 2411 | "8c29": 2412 | - PR_EMS_AB_CERTIFICATE_REVOCATION_LIST_V1 2413 | - PT_BINARY 2414 | "802e": 2415 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_2 2416 | - PT_TSTRING 2417 | "3fd9": 2418 | - PR_PREVIEW 2419 | - PT_TSTRING 2420 | "8067": 2421 | - PR_EMS_AB_CONTAINER_INFO 2422 | - PT_LONG 2423 | "8199": 2424 | - PR_EMS_AB_MODERATOR 2425 | - PT_TSTRING 2426 | "802f": 2427 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_3 2428 | - PT_TSTRING 2429 | "8068": 2430 | - PR_EMS_AB_COST 2431 | - PT_LONG 2432 | "8069": 2433 | - PR_EMS_AB_COUNTRY_NAME 2434 | - PT_TSTRING 2435 | "80f0": 2436 | - PR_EMS_AB_MTA_LOCAL_DESIG 2437 | - PT_TSTRING 2438 | "8c30": 2439 | - PR_EMS_AB_CROSS_CERTIFICATE_CRL 2440 | - PT_MV_BINARY 2441 | "3000": 2442 | - PR_ROWID 2443 | - PT_LONG 2444 | "80f1": 2445 | - PR_EMS_AB_N_ADDRESS 2446 | - PT_BINARY 2447 | "8c31": 2448 | - PR_EMS_AB_SEND_EMAIL_MESSAGE 2449 | - PT_BOOLEAN 2450 | "3001": 2451 | - PR_DISPLAY_NAME 2452 | - PT_TSTRING 2453 | "80ba": 2454 | - PR_EMS_AB_IMPORT_CONTAINER 2455 | - PT_OBJECT|PT_MV_TSTRING 2456 | "80f2": 2457 | - PR_EMS_AB_N_ADDRESS_TYPE 2458 | - PT_LONG 2459 | "8c32": 2460 | - PR_EMS_AB_ENABLE_COMPATIBILITY 2461 | - PT_BOOLEAN 2462 | "3002": 2463 | - PR_ADDRTYPE 2464 | - PT_TSTRING 2465 | "3fe2": 2466 | - PR_FOLDER_DESIGN_FLAGS 2467 | - PT_LONG 2468 | "8070": 2469 | - PR_EMS_AB_DESTINATION_INDICATOR 2470 | - PT_MV_TSTRING 2471 | "80bb": 2472 | - PR_EMS_AB_IMPORT_SENSITIVITY 2473 | - PT_LONG 2474 | "80f3": 2475 | - PR_EMS_AB_NT_MACHINE_NAME 2476 | - PT_TSTRING 2477 | "8c33": 2478 | - PR_EMS_AB_SMIME_ALG_LIST_NA 2479 | - PT_MV_TSTRING 2480 | "3fe3": 2481 | - PR_DELEGATED_BY_RULE 2482 | - PT_BOOLEAN 2483 | "8071": 2484 | - PR_EMS_AB_DIAGNOSTIC_REG_KEY 2485 | - PT_TSTRING 2486 | "80bc": 2487 | - PR_EMS_AB_INBOUND_SITES 2488 | - PT_OBJECT|PT_MV_TSTRING 2489 | "80f4": 2490 | - PR_EMS_AB_NUM_OF_OPEN_RETRIES 2491 | - PT_LONG 2492 | "8c34": 2493 | - PR_EMS_AB_SMIME_ALG_LIST_OTHER 2494 | - PT_MV_TSTRING 2495 | "3003": 2496 | - PR_EMAIL_ADDRESS 2497 | - PT_TSTRING 2498 | "3fe4": 2499 | - PR_DESIGN_IN_PROGRESS 2500 | - PT_BOOLEAN 2501 | "8072": 2502 | - PR_EMS_AB_DL_MEM_REJECT_PERMS_BL 2503 | - PT_OBJECT|PT_MV_TSTRING 2504 | "80bd": 2505 | - PR_EMS_AB_INSTANCE_TYPE 2506 | - PT_LONG 2507 | "80f5": 2508 | - PR_EMS_AB_NUM_OF_TRANSFER_RETRIES 2509 | - PT_LONG 2510 | "8c35": 2511 | - PR_EMS_AB_SMIME_ALG_SELECTED_NA 2512 | - PT_TSTRING 2513 | "3004": 2514 | - PR_COMMENT 2515 | - PT_TSTRING 2516 | "803a": 2517 | - PR_EMS_AB_HELP_DATA16 2518 | - PT_BINARY 2519 | "3fe5": 2520 | - PR_SECURE_ORIGINATION 2521 | - PT_BOOLEAN 2522 | "8073": 2523 | - PR_EMS_AB_DL_MEM_SUBMIT_PERMS_BL 2524 | - PT_OBJECT|PT_MV_TSTRING 2525 | "80be": 2526 | - PR_EMS_AB_INTERNATIONAL_ISDN_NUMBER 2527 | - PT_MV_TSTRING 2528 | "80f6": 2529 | - PR_EMS_AB_OBJECT_CLASS_CATEGORY 2530 | - PT_LONG 2531 | "8c36": 2532 | - PR_EMS_AB_SMIME_ALG_SELECTED_OTHER 2533 | - PT_TSTRING 2534 | "3005": 2535 | - PR_DEPTH 2536 | - PT_LONG 2537 | "803b": 2538 | - PR_EMS_AB_HELP_FILE_NAME 2539 | - PT_TSTRING 2540 | "3fe6": 2541 | - PR_PUBLISH_IN_ADDRESS_BOOK 2542 | - PT_BOOLEAN 2543 | "8074": 2544 | - PR_EMS_AB_DL_MEMBER_RULE 2545 | - PT_MV_BINARY 2546 | "80bf": 2547 | - PR_EMS_AB_INVOCATION_ID 2548 | - PT_BINARY 2549 | "80f7": 2550 | - PR_EMS_AB_OBJECT_VERSION 2551 | - PT_LONG 2552 | "8c37": 2553 | - PR_EMS_AB_DEFAULT_MESSAGE_FORMAT 2554 | - PT_BOOLEAN 2555 | "3006": 2556 | - PR_PROVIDER_DISPLAY 2557 | - PT_TSTRING 2558 | "803c": 2559 | - PR_EMS_AB_OBJ_DIST_NAME 2560 | - PT_OBJECT|PT_MV_TSTRING 2561 | "3fe7": 2562 | - PR_RESOLVE_METHOD 2563 | - PT_LONG 2564 | "3d00": 2565 | - PR_STORE_PROVIDERS 2566 | - PT_BINARY 2567 | "8075": 2568 | - PR_EMS_AB_DOMAIN_DEF_ALT_RECIP 2569 | - PT_OBJECT|PT_MV_TSTRING 2570 | "80f8": 2571 | - PR_EMS_AB_OFF_LINE_AB_CONTAINERS 2572 | - PT_OBJECT|PT_MV_TSTRING 2573 | "8c38": 2574 | - PR_EMS_AB_TYPE 2575 | - PT_TSTRING 2576 | "3007": 2577 | - PR_CREATION_TIME 2578 | - PT_SYSTIME 2579 | "803d": 2580 | - PR_EMS_AB_ENCRYPT_ALG_SELECTED_OTHER 2581 | - PT_TSTRING 2582 | "3fe8": 2583 | - PR_ADDRESS_BOOK_DISPLAY_NAME 2584 | - PT_TSTRING 2585 | "3d01": 2586 | - PR_AB_PROVIDERS 2587 | - PT_BINARY 2588 | "8076": 2589 | - PR_EMS_AB_DOMAIN_NAME 2590 | - PT_TSTRING 2591 | "80f9": 2592 | - PR_EMS_AB_OFF_LINE_AB_SCHEDULE 2593 | - PT_BINARY 2594 | "3008": 2595 | - PR_LAST_MODIFICATION_TIME 2596 | - PT_SYSTIME 2597 | "803e": 2598 | - PR_EMS_AB_AUTOREPLY_SUBJECT 2599 | - PT_TSTRING 2600 | "3fe9": 2601 | - PR_EFORMS_LOCALE_ID 2602 | - PT_LONG 2603 | "3d02": 2604 | - PR_TRANSPORT_PROVIDERS 2605 | - PT_BINARY 2606 | "8077": 2607 | - PR_EMS_AB_DSA_SIGNATURE 2608 | - PT_BINARY 2609 | "3009": 2610 | - PR_RESOURCE_FLAGS 2611 | - PT_LONG 2612 | "803f": 2613 | - PR_EMS_AB_HOME_PUBLIC_SERVER 2614 | - PT_OBJECT|PT_MV_TSTRING 2615 | "8078": 2616 | - PR_EMS_AB_DXA_ADMIN_COPY 2617 | - PT_BOOLEAN 2618 | "3d04": 2619 | - PR_DEFAULT_PROFILE 2620 | - PT_BOOLEAN 2621 | "8079": 2622 | - PR_EMS_AB_DXA_ADMIN_FORWARD 2623 | - PT_BOOLEAN 2624 | "3ff0": 2625 | - PR_CONFLICT_ENTRYID 2626 | - PT_BINARY 2627 | "8c40": 2628 | - PR_EMS_AB_VOICE_MAIL_FLAGS 2629 | - PT_MV_BINARY 2630 | "405a": 2631 | - PR_MODIFIER_FLAGS 2632 | - PT_LONG 2633 | "3d05": 2634 | - PR_AB_SEARCH_PATH 2635 | - PT_MV_BINARY 2636 | "3ff1": 2637 | - PR_MESSAGE_LOCALE_ID 2638 | - PT_LONG 2639 | "8c41": 2640 | - PR_EMS_AB_VOICE_MAIL_VOLUME 2641 | - PT_LONG 2642 | "405b": 2643 | - PR_ORIGINATOR_FLAGS 2644 | - PT_LONG 2645 | "3d06": 2646 | - PR_AB_DEFAULT_DIR 2647 | - PT_BINARY 2648 | "3ff2": 2649 | - PR_RULE_TRIGGER_HISTORY 2650 | - PT_BINARY 2651 | "80ca": 2652 | - PR_EMS_AB_LOG_FILENAME 2653 | - PT_TSTRING 2654 | "8c42": 2655 | - PR_EMS_AB_VOICE_MAIL_SPEED 2656 | - PT_LONG 2657 | "405c": 2658 | - PR_REPORT_DESTINATION_FLAGS 2659 | - PT_LONG 2660 | "8080": 2661 | - PR_EMS_AB_DXA_EXCHANGE_OPTIONS 2662 | - PT_LONG 2663 | "3d07": 2664 | - PR_AB_DEFAULT_PAB 2665 | - PT_BINARY 2666 | "80cb": 2667 | - PR_EMS_AB_LOG_ROLLOVER_INTERVAL 2668 | - PT_LONG 2669 | "8c43": 2670 | - PR_EMS_AB_VOICE_MAIL_RECORDING_LENGTH 2671 | - PT_MV_LONG 2672 | "405d": 2673 | - PR_ORIGINAL_AUTHOR_FLAGS 2674 | - PT_LONG 2675 | "6800": 2676 | - PR_MAILBEAT_BOUNCE_SERVER 2677 | - PT_UNICODE 2678 | "3ff3": 2679 | - PR_MOVE_TO_STORE_ENTRYID 2680 | - PT_BINARY 2681 | "8081": 2682 | - PR_EMS_AB_DXA_EXPORT_NOW 2683 | - PT_BOOLEAN 2684 | "3d08": 2685 | - PR_FILTERING_HOOKS 2686 | - PT_BINARY 2687 | "80cc": 2688 | - PR_EMS_AB_MAINTAIN_AUTOREPLY_HISTORY 2689 | - PT_BOOLEAN 2690 | "817a": 2691 | - PR_EMS_AB_USN_INTERSITE 2692 | - PT_LONG 2693 | "8c44": 2694 | - PR_EMS_AB_DISPLAY_NAME_SUFFIX 2695 | - PT_TSTRING 2696 | "6801": 2697 | - PR_MAILBEAT_REQUEST_SENT 2698 | - PT_SYSTIME 2699 | "3ff4": 2700 | - PR_MOVE_TO_FOLDER_ENTRYID 2701 | - PT_BINARY 2702 | "8082": 2703 | - PR_EMS_AB_DXA_FLAGS 2704 | - PT_LONG 2705 | "3d09": 2706 | - PR_SERVICE_NAME 2707 | - PT_TSTRING 2708 | "80cd": 2709 | - PR_EMS_AB_MAPI_DISPLAY_TYPE 2710 | - PT_LONG 2711 | "817b": 2712 | - PR_EMS_AB_SUB_SITE 2713 | - PT_TSTRING 2714 | "8c45": 2715 | - PR_EMS_AB_ATTRIBUTE_CERTIFICATE 2716 | - PT_MV_BINARY 2717 | "6802": 2718 | - PR_USENET_SITE_NAME 2719 | - PT_UNICODE 2720 | "3ff5": 2721 | - PR_STORAGE_QUOTA_LIMIT 2722 | - PT_LONG 2723 | "8083": 2724 | - PR_EMS_AB_DXA_IMP_SEQ 2725 | - PT_TSTRING 2726 | "804a": 2727 | - PR_EMS_AB_ADMIN_DESCRIPTION 2728 | - PT_TSTRING 2729 | "80ce": 2730 | - PR_EMS_AB_MAPI_ID 2731 | - PT_LONG 2732 | "817c": 2733 | - PR_EMS_AB_SCHEMA_VERSION 2734 | - PT_MV_LONG 2735 | "8c46": 2736 | - PR_EMS_AB_DELTA_REVOCATION_LIST 2737 | - PT_MV_BINARY 2738 | "6803": 2739 | - PR_MAILBEAT_REQUEST_RECEIVED 2740 | - PT_SYSTIME 2741 | "3ff6": 2742 | - PR_EXCESS_STORAGE_USED 2743 | - PT_LONG 2744 | "3700": 2745 | - PR_ATTACHMENT_X400_PARAMETERS 2746 | - PT_BINARY 2747 | "8084": 2748 | - PR_EMS_AB_DXA_IMP_SEQ_TIME 2749 | - PT_SYSTIME 2750 | "0e00": 2751 | - PR_CURRENT_VERSION 2752 | - PT_I8 2753 | "804b": 2754 | - PR_EMS_AB_ADMIN_DISPLAY_NAME 2755 | - PT_TSTRING 2756 | "80cf": 2757 | - PR_EMS_AB_MDB_BACKOFF_INTERVAL 2758 | - PT_LONG 2759 | "817d": 2760 | - PR_EMS_AB_NNTP_CHARACTER_SET 2761 | - PT_TSTRING 2762 | "8c47": 2763 | - PR_EMS_AB_SECURITY_POLICY 2764 | - PT_MV_BINARY 2765 | "6804": 2766 | - PR_MAILBEAT_REQUEST_PROCESSED 2767 | - PT_SYSTIME 2768 | "3ff7": 2769 | - PR_SVR_GENERATING_QUOTA_MSG 2770 | - PT_TSTRING 2771 | "3d10": 2772 | - PR_SERVICE_DELETE_FILES 2773 | - PT_MV_TSTRING 2774 | "8085": 2775 | - PR_EMS_AB_DXA_IMP_SEQ_USN 2776 | - PT_LONG 2777 | "0e01": 2778 | - PR_DELETE_AFTER_SUBMIT 2779 | - PT_BOOLEAN 2780 | "804c": 2781 | - PR_EMS_AB_ADMIN_EXTENSION_DLL 2782 | - PT_TSTRING 2783 | "817e": 2784 | - PR_EMS_AB_USE_SERVER_VALUES 2785 | - PT_BOOLEAN 2786 | "8c48": 2787 | - PR_EMS_AB_SUPPORT_SMIME_SIGNATURES 2788 | - PT_BOOLEAN 2789 | "3701": 2790 | - PR_ATTACH_DATA 2791 | - PT_OBJECT|PT_BINARY 2792 | "3ff8": 2793 | - PR_CREATOR_NAME 2794 | - PT_TSTRING 2795 | "3702": 2796 | - PR_ATTACH_ENCODING 2797 | - PT_BINARY 2798 | "3d11": 2799 | - PR_AB_SEARCH_PATH_UPDATE 2800 | - PT_BINARY 2801 | "8086": 2802 | - PR_EMS_AB_DXA_IMPORT_NOW 2803 | - PT_BOOLEAN 2804 | "0e02": 2805 | - PR_DISPLAY_BCC 2806 | - PT_TSTRING 2807 | "3e0a": 2808 | - PR_HEADER_FOLDER_ENTRYID 2809 | - PT_BINARY 2810 | "804d": 2811 | - PR_EMS_AB_ALIASED_OBJECT_NAME 2812 | - PT_OBJECT|PT_MV_TSTRING 2813 | "817f": 2814 | - PR_EMS_AB_ENABLED_PROTOCOLS 2815 | - PT_LONG 2816 | "8c49": 2817 | - PR_EMS_AB_DELEGATE_USER 2818 | - PT_BOOLEAN 2819 | "6806": 2820 | - PR_MAILBEAT_REPLY_SENT 2821 | - PT_SYSTIME 2822 | "3ff9": 2823 | - PR_CREATOR_ENTRYID 2824 | - PT_BINARY 2825 | "3703": 2826 | - PR_ATTACH_EXTENSION 2827 | - PT_TSTRING 2828 | "3d12": 2829 | - PR_PROFILE_NAME 2830 | - PT_TSTRING 2831 | "8087": 2832 | - PR_EMS_AB_DXA_IN_TEMPLATE_MAP 2833 | - PT_MV_TSTRING 2834 | "0e03": 2835 | - PR_DISPLAY_CC 2836 | - PT_TSTRING 2837 | "3e0b": 2838 | - PR_REMOTE_PROGRESS 2839 | - PT_LONG 2840 | "804e": 2841 | - PR_EMS_AB_ALT_RECIPIENT 2842 | - PT_OBJECT|PT_MV_TSTRING 2843 | "6807": 2844 | - PR_MAILBEAT_REPLY_SUBMIT 2845 | - PT_SYSTIME 2846 | "3704": 2847 | - PR_ATTACH_FILENAME 2848 | - PT_TSTRING 2849 | "8088": 2850 | - PR_EMS_AB_DXA_LOCAL_ADMIN 2851 | - PT_OBJECT|PT_MV_TSTRING 2852 | "0e04": 2853 | - PR_DISPLAY_TO 2854 | - PT_TSTRING 2855 | "3e0c": 2856 | - PR_REMOTE_PROGRESS_TEXT 2857 | - PT_TSTRING 2858 | "804f": 2859 | - PR_EMS_AB_ALT_RECIPIENT_BL 2860 | - PT_OBJECT|PT_MV_TSTRING 2861 | "6808": 2862 | - PR_MAILBEAT_REPLY_RECEIVED 2863 | - PT_SYSTIME 2864 | "3705": 2865 | - PR_ATTACH_METHOD 2866 | - PT_LONG 2867 | "8089": 2868 | - PR_EMS_AB_DXA_LOGGING_LEVEL 2869 | - PT_LONG 2870 | "0e05": 2871 | - PR_PARENT_DISPLAY 2872 | - PT_TSTRING 2873 | "3e0d": 2874 | - PR_REMOTE_VALIDATE_OK 2875 | - PT_BOOLEAN 2876 | "8c50": 2877 | - PR_EMS_AB_LIST_PUBLIC_FOLDERS 2878 | - PT_BOOLEAN 2879 | "6809": 2880 | - PR_MAILBEAT_REPLY_PROCESSED 2881 | - PT_SYSTIME 2882 | "0e06": 2883 | - PR_MESSAGE_DELIVERY_TIME 2884 | - PT_SYSTIME 2885 | "8c51": 2886 | - PR_EMS_AB_LABELEDURI 2887 | - PT_TSTRING 2888 | "3707": 2889 | - PR_ATTACH_LONG_FILENAME 2890 | - PT_TSTRING 2891 | "0e07": 2892 | - PR_MESSAGE_FLAGS 2893 | - PT_LONG 2894 | "80da": 2895 | - PR_EMS_AB_MONITORED_SERVERS 2896 | - PT_OBJECT|PT_MV_TSTRING 2897 | "8c1a": 2898 | - PR_EMS_AB_GROUP_BY_ATTR_VALUE_DN 2899 | - PT_OBJECT|PT_MV_TSTRING 2900 | "8c52": 2901 | - PR_EMS_AB_RETURN_EXACT_MSG_SIZE 2902 | - PT_BOOLEAN 2903 | "3708": 2904 | - PR_ATTACH_PATHNAME 2905 | - PT_TSTRING 2906 | "8090": 2907 | - PR_EMS_AB_DXA_PREV_REMOTE_ENTRIES 2908 | - PT_OBJECT|PT_MV_TSTRING 2909 | "80db": 2910 | - PR_EMS_AB_MONITORED_SERVICES 2911 | - PT_MV_TSTRING 2912 | "8c1b": 2913 | - PR_EMS_AB_VIEW_DEFINITION 2914 | - PT_MV_BINARY 2915 | "8c53": 2916 | - PR_EMS_AB_GENERATION_QUALIFIER 2917 | - PT_TSTRING 2918 | "3fca": 2919 | - PR_CONFLICT_MSG_KEY 2920 | - PT_BINARY 2921 | "0e08": 2922 | - PR_MESSAGE_SIZE 2923 | - PT_LONG|PT_I8 2924 | "3709": 2925 | - PR_ATTACH_RENDERING 2926 | - PT_BINARY 2927 | "0e09": 2928 | - PR_PARENT_ENTRYID 2929 | - PT_BINARY 2930 | "8091": 2931 | - PR_EMS_AB_DXA_PREV_REPLICATION_SENSITIVITY 2932 | - PT_LONG 2933 | "80dc": 2934 | - PR_EMS_AB_MONITORING_ALERT_DELAY 2935 | - PT_LONG 2936 | "818a": 2937 | - PR_EMS_AB_CONTROL_MSG_RULES 2938 | - PT_BINARY 2939 | "8c1c": 2940 | - PR_EMS_AB_MIME_TYPES 2941 | - PT_BINARY 2942 | "8c54": 2943 | - PR_EMS_AB_HOUSE_IDENTIFIER 2944 | - PT_TSTRING 2945 | "3f80": 2946 | - PR_DID 2947 | - PT_I8 2948 | "8092": 2949 | - PR_EMS_AB_DXA_PREV_TEMPLATE_OPTIONS 2950 | - PT_LONG 2951 | "80dd": 2952 | - PR_EMS_AB_MONITORING_ALERT_UNITS 2953 | - PT_LONG 2954 | "818b": 2955 | - PR_EMS_AB_AVAILABLE_DISTRIBUTIONS 2956 | - PT_TSTRING 2957 | "8c1d": 2958 | - PR_EMS_AB_LDAP_SEARCH_CFG 2959 | - PT_LONG 2960 | "8c55": 2961 | - PR_EMS_AB_SUPPORTED_ALGORITHMS 2962 | - PT_BINARY 2963 | "3f81": 2964 | - PR_SEQID 2965 | - PT_I8 2966 | "805a": 2967 | - PR_EMS_AB_CAN_CREATE_PF_DL 2968 | - PT_OBJECT|PT_MV_TSTRING 2969 | "8093": 2970 | - PR_EMS_AB_DXA_PREV_TYPES 2971 | - PT_LONG 2972 | "80de": 2973 | - PR_EMS_AB_MONITORING_AVAILABILITY_STYLE 2974 | - PT_LONG 2975 | "8c1e": 2976 | - PR_EMS_AB_INBOUND_DN 2977 | - PT_OBJECT|PT_MV_TSTRING 2978 | "8c56": 2979 | - PR_EMS_AB_DMD_NAME 2980 | - PT_TSTRING 2981 | "3f82": 2982 | - PR_DRAFTID 2983 | - PT_I8 2984 | "805b": 2985 | - PR_EMS_AB_CAN_CREATE_PF_DL_BL 2986 | - PT_OBJECT|PT_MV_TSTRING 2987 | "3710": 2988 | - PR_ATTACH_MIME_SEQUENCE 2989 | - PT_LONG 2990 | "0e10": 2991 | - PR_SPOOLER_STATUS 2992 | - PT_LONG 2993 | "8094": 2994 | - PR_EMS_AB_DXA_RECIPIENT_CP 2995 | - PT_TSTRING 2996 | "80df": 2997 | - PR_EMS_AB_MONITORING_AVAILABILITY_WINDOW 2998 | - PT_BINARY 2999 | "818d": 3000 | - PR_EMS_AB_OUTBOUND_HOST 3001 | - PT_BINARY 3002 | "8c57": 3003 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_11 3004 | - PT_TSTRING 3005 | "3f83": 3006 | - PR_CHECK_IN_TIME 3007 | - PT_SYSTIME 3008 | "805c": 3009 | - PR_EMS_AB_CAN_NOT_CREATE_PF 3010 | - PT_OBJECT|PT_MV_TSTRING 3011 | "0e11": 3012 | - PR_TRANSPORT_STATUS 3013 | - PT_LONG 3014 | "8095": 3015 | - PR_EMS_AB_DXA_REMOTE_CLIENT 3016 | - PT_OBJECT|PT_MV_TSTRING 3017 | "818e": 3018 | - PR_EMS_AB_INBOUND_HOST 3019 | - PT_MV_TSTRING 3020 | "8c1f": 3021 | - PR_EMS_AB_INBOUND_NEWSFEED_TYPE 3022 | - PT_BOOLEAN 3023 | "8c58": 3024 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_12 3025 | - PT_TSTRING 3026 | "3f84": 3027 | - PR_CHECK_IN_COMMENT 3028 | - PT_UNICODE 3029 | "805d": 3030 | - PR_EMS_AB_CAN_NOT_CREATE_PF_BL 3031 | - PT_OBJECT|PT_MV_TSTRING 3032 | "3712": 3033 | - PR_ATTACH_CONTENT_ID 3034 | - PT_TSTRING 3035 | "0e12": 3036 | - PR_MESSAGE_RECIPIENTS 3037 | - PT_OBJECT 3038 | "8096": 3039 | - PR_EMS_AB_DXA_REQ_SEQ 3040 | - PT_TSTRING 3041 | "818f": 3042 | - PR_EMS_AB_OUTGOING_MSG_SIZE_LIMIT 3043 | - PT_LONG 3044 | "8c59": 3045 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_13 3046 | - PT_TSTRING 3047 | "3d21": 3048 | - PR_ADMIN_SECURITY_DESCRIPTOR 3049 | - PT_BINARY 3050 | "3f85": 3051 | - PR_VERSION_OP_CODE 3052 | - PT_LONG 3053 | "805e": 3054 | - PR_EMS_AB_CAN_NOT_CREATE_PF_DL 3055 | - PT_OBJECT|PT_MV_TSTRING 3056 | "3713": 3057 | - PR_ATTACH_CONTENT_LOCATION 3058 | - PT_TSTRING 3059 | "0e13": 3060 | - PR_MESSAGE_ATTACHMENTS 3061 | - PT_OBJECT 3062 | "8097": 3063 | - PR_EMS_AB_DXA_REQ_SEQ_TIME 3064 | - PT_SYSTIME 3065 | "3f86": 3066 | - PR_VERSION_OP_DATA 3067 | - PT_BINARY 3068 | "805f": 3069 | - PR_EMS_AB_CAN_NOT_CREATE_PF_DL_BL 3070 | - PT_OBJECT|PT_MV_TSTRING 3071 | "3714": 3072 | - PR_ATTACH_FLAGS 3073 | - PT_LONG 3074 | "0e14": 3075 | - PR_SUBMIT_FLAGS 3076 | - PT_LONG 3077 | "8098": 3078 | - PR_EMS_AB_DXA_REQ_SEQ_USN 3079 | - PT_LONG 3080 | "3f87": 3081 | - PR_VERSION_SEQUENCE_NUMBER 3082 | - PT_LONG 3083 | "0e15": 3084 | - PR_RECIPIENT_STATUS 3085 | - PT_LONG 3086 | "8099": 3087 | - PR_EMS_AB_DXA_REQNAME 3088 | - PT_TSTRING 3089 | "8c60": 3090 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_14 3091 | - PT_TSTRING 3092 | "3f88": 3093 | - PR_ATTACH_ID 3094 | - PT_I8 3095 | "6001": 3096 | - PR_DOTSTUFF_STATE 3097 | - PT_LONG 3098 | "0e16": 3099 | - PR_TRANSPORT_KEY 3100 | - PT_LONG 3101 | "8c61": 3102 | - PR_EMS_AB_EXTENSION_ATTRIBUTE_15 3103 | - PT_TSTRING 3104 | "3716": 3105 | - PR_ATTACH_CONTENT_DISPOSITION 3106 | - PT_UNICODE 3107 | "0e17": 3108 | - PR_MSG_STATUS 3109 | - PT_LONG 3110 | "80ea": 3111 | - PR_EMS_AB_MONITORING_RECIPIENTS_NDR 3112 | - PT_OBJECT|PT_MV_TSTRING 3113 | "8c62": 3114 | - PR_EMS_AB_REPLICATED_OBJECT_VERSION 3115 | - PT_LONG 3116 | "3fda": 3117 | - PR_ABSTRACT 3118 | - PT_TSTRING 3119 | "0e18": 3120 | - PR_MESSAGE_DOWNLOAD_TIME 3121 | - PT_LONG 3122 | "80eb": 3123 | - PR_EMS_AB_MONITORING_RPC_UPDATE_INTERVAL 3124 | - PT_LONG 3125 | "8c63": 3126 | - PR_EMS_AB_MAIL_DROP 3127 | - PT_TSTRING 3128 | "3fdb": 3129 | - PR_DL_REPORT_FLAGS 3130 | - PT_LONG 3131 | "0e19": 3132 | - PR_CREATION_VERSION 3133 | - PT_I8 3134 | "80ec": 3135 | - PR_EMS_AB_MONITORING_RPC_UPDATE_UNITS 3136 | - PT_LONG 3137 | "819a": 3138 | - PR_EMS_AB_AUTHENTICATION_TO_USE 3139 | - PT_TSTRING 3140 | "8c64": 3141 | - PR_EMS_AB_FORWARDING_ADDRESS 3142 | - PT_TSTRING 3143 | "3f90": 3144 | - PR_VERSIONING_FLAGS 3145 | - PT_SHORT 3146 | "3fdc": 3147 | - PR_BILATERAL_INFO 3148 | - PT_BINARY 3149 | "80ed": 3150 | - PR_EMS_AB_MONITORING_WARNING_DELAY 3151 | - PT_LONG 3152 | "819b": 3153 | - PR_EMS_AB_HTTP_PUB_GAL 3154 | - PT_BOOLEAN 3155 | "8c65": 3156 | - PR_EMS_AB_FORM_DATA 3157 | - PT_BINARY 3158 | "3f91": 3159 | - PR_PKM_LAST_UNAPPROVED_VID 3160 | - PT_BINARY 3161 | "3fdd": 3162 | - PR_MSG_BODY_ID 3163 | - PT_LONG 3164 | "806a": 3165 | - PR_EMS_AB_DELIV_CONT_LENGTH 3166 | - PT_LONG 3167 | "80ee": 3168 | - PR_EMS_AB_MONITORING_WARNING_UNITS 3169 | - PT_LONG 3170 | "819c": 3171 | - PR_EMS_AB_HTTP_PUB_GAL_LIMIT 3172 | - PT_LONG 3173 | "8c66": 3174 | - PR_EMS_AB_OWA_SERVER 3175 | - PT_TSTRING 3176 | "3f92": 3177 | - PR_MV_PKM_VERSION_LABELS 3178 | - PT_MV_UNICODE 3179 | "0e20": 3180 | - PR_ATTACH_SIZE 3181 | - PT_LONG 3182 | "3fde": 3183 | - PR_INTERNET_CPID 3184 | - PT_LONG 3185 | "806b": 3186 | - PR_EMS_AB_DELIV_EITS 3187 | - PT_MV_BINARY 3188 | "80ef": 3189 | - PR_EMS_AB_MTA_LOCAL_CRED 3190 | - PT_TSTRING 3191 | "8c67": 3192 | - PR_EMS_AB_EMPLOYEE_NUMBER 3193 | - PT_TSTRING 3194 | "3f93": 3195 | - PR_MV_PKM_VERSION_STATUS 3196 | - PT_MV_UNICODE 3197 | "0e21": 3198 | - PR_ATTACH_NUM 3199 | - PT_LONG 3200 | "3fdf": 3201 | - PR_AUTO_RESPONSE_SUPPRESS 3202 | - PT_LONG 3203 | "806c": 3204 | - PR_EMS_AB_DELIV_EXT_CONT_TYPES 3205 | - PT_MV_BINARY 3206 | "819e": 3207 | - PR_EMS_AB_HTTP_PUB_PF 3208 | - PT_MV_BINARY 3209 | "8c68": 3210 | - PR_EMS_AB_TELEPHONE_PERSONAL_PAGER 3211 | - PT_TSTRING 3212 | "3f94": 3213 | - PR_PKM_INTERNAL_DATA 3214 | - PT_BINARY 3215 | "0e22": 3216 | - PR_PREPROCESS 3217 | - PT_BOOLEAN 3218 | "806d": 3219 | - PR_EMS_AB_DELIVER_AND_REDIRECT 3220 | - PT_BOOLEAN 3221 | "8c69": 3222 | - PR_EMS_AB_EMPLOYEE_TYPE 3223 | - PT_TSTRING 3224 | "806e": 3225 | - PR_EMS_AB_DELIVERY_MECHANISM 3226 | - PT_LONG 3227 | "0e23": 3228 | - PR_INTERNET_ARTICLE_NUMBER 3229 | - PT_LONG 3230 | "806f": 3231 | - PR_EMS_AB_DESCRIPTION 3232 | - PT_MV_TSTRING 3233 | "0e24": 3234 | - PR_NEWSGROUP_NAME 3235 | - PT_TSTRING 3236 | "0e25": 3237 | - PR_ORIGINATING_MTA_CERTIFICATE 3238 | - PT_BINARY 3239 | "0e26": 3240 | - PR_PROOF_OF_SUBMISSION 3241 | - PT_BINARY 3242 | "80fa": 3243 | - PR_EMS_AB_OFF_LINE_AB_SERVER 3244 | - PT_OBJECT|PT_MV_TSTRING 3245 | "8c3a": 3246 | - PR_EMS_AB_DO_OAB_VERSION 3247 | - PT_LONG 3248 | "0e27": 3249 | - PR_NT_SECURITY_DESCRIPTOR 3250 | - PT_BINARY 3251 | "3fea": 3252 | - PR_HAS_DAMS 3253 | - PT_BOOLEAN 3254 | "80fb": 3255 | - PR_EMS_AB_OFF_LINE_AB_STYLE 3256 | - PT_LONG 3257 | "8c3b": 3258 | - PR_EMS_AB_VOICE_MAIL_SYSTEM_GUID 3259 | - PT_BINARY 3260 | "0001": 3261 | - PR_ACKNOWLEDGEMENT_MODE 3262 | - PT_LONG 3263 | "300a": 3264 | - PR_PROVIDER_DLL_NAME 3265 | - PT_TSTRING 3266 | "3feb": 3267 | - PR_DEFERRED_SEND_NUMBER 3268 | - PT_LONG 3269 | "80fc": 3270 | - PR_EMS_AB_OID_TYPE 3271 | - PT_LONG 3272 | "8c3c": 3273 | - PR_EMS_AB_VOICE_MAIL_USER_ID 3274 | - PT_TSTRING 3275 | "0002": 3276 | - PR_ALTERNATE_RECIPIENT_ALLOWED 3277 | - PT_BOOLEAN 3278 | "300b": 3279 | - PR_SEARCH_KEY 3280 | - PT_BINARY 3281 | "3fec": 3282 | - PR_DEFERRED_SEND_UNITS 3283 | - PT_LONG 3284 | "80fd": 3285 | - PR_EMS_AB_OM_OBJECT_CLASS 3286 | - PT_BINARY 3287 | "8c3d": 3288 | - PR_EMS_AB_VOICE_MAIL_PASSWORD 3289 | - PT_TSTRING 3290 | "0003": 3291 | - PR_AUTHORIZING_USERS 3292 | - PT_BINARY 3293 | "807a": 3294 | - PR_EMS_AB_DXA_ADMIN_UPDATE 3295 | - PT_LONG 3296 | "6701": 3297 | - PR_PST_REMEMBER_PW 3298 | - PT_BOOLEAN 3299 | "300c": 3300 | - PR_PROVIDER_UID 3301 | - PT_BINARY 3302 | "3fed": 3303 | - PR_EXPIRY_NUMBER 3304 | - PT_LONG 3305 | "80fe": 3306 | - PR_EMS_AB_OM_SYNTAX 3307 | - PT_LONG 3308 | "8c3e": 3309 | - PR_EMS_AB_VOICE_MAIL_RECORDED_NAME 3310 | - PT_BINARY 3311 | "0004": 3312 | - PR_AUTO_FORWARD_COMMENT 3313 | - PT_TSTRING 3314 | "807b": 3315 | - PR_EMS_AB_DXA_APPEND_REQCN 3316 | - PT_BOOLEAN 3317 | "300d": 3318 | - PR_PROVIDER_ORDINAL 3319 | - PT_LONG 3320 | "3fee": 3321 | - PR_EXPIRY_UNITS 3322 | - PT_LONG 3323 | "80ff": 3324 | - PR_EMS_AB_OOF_REPLY_TO_ORIGINATOR 3325 | - PT_BOOLEAN 3326 | "8c3f": 3327 | - PR_EMS_AB_VOICE_MAIL_GREETINGS 3328 | - PT_MV_TSTRING 3329 | "6702": 3330 | - PR_OST_ENCRYPTION 3331 | - PT_LONG 3332 | "3fef": 3333 | - PR_DEFERRED_SEND_TIME 3334 | - PT_SYSTIME 3335 | "0005": 3336 | - PR_AUTO_FORWARDED 3337 | - PT_BOOLEAN 3338 | "807c": 3339 | - PR_EMS_AB_DXA_CONF_CONTAINER_LIST 3340 | - PT_OBJECT|PT_MV_TSTRING 3341 | "6703": 3342 | - PR_PST_PW_SZ_OLD 3343 | - PT_TSTRING 3344 | "0006": 3345 | - PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID 3346 | - PT_BINARY 3347 | "807d": 3348 | - PR_EMS_AB_DXA_CONF_REQ_TIME 3349 | - PT_SYSTIME 3350 | "6704": 3351 | - PR_PST_PW_SZ_NEW 3352 | - PT_TSTRING 3353 | "3600": 3354 | - PR_CONTAINER_FLAGS 3355 | - PT_LONG 3356 | "0007": 3357 | - PR_CONTENT_CORRELATOR 3358 | - PT_BINARY 3359 | "807e": 3360 | - PR_EMS_AB_DXA_CONF_SEQ 3361 | - PT_TSTRING 3362 | "6705": 3363 | - PR_SORT_LOCALE_ID 3364 | - PT_LONG 3365 | "3601": 3366 | - PR_FOLDER_TYPE 3367 | - PT_LONG 3368 | "0008": 3369 | - PR_CONTENT_IDENTIFIER 3370 | - PT_TSTRING 3371 | "3d0a": 3372 | - PR_SERVICE_DLL_NAME 3373 | - PT_TSTRING 3374 | "807f": 3375 | - PR_EMS_AB_DXA_CONF_SEQ_USN 3376 | - PT_LONG 3377 | "3602": 3378 | - PR_CONTENT_COUNT 3379 | - PT_LONG 3380 | "0009": 3381 | - PR_CONTENT_LENGTH 3382 | - PT_LONG 3383 | "3d0b": 3384 | - PR_SERVICE_ENTRY_NAME 3385 | - PT_TSTRING 3386 | "3603": 3387 | - PR_CONTENT_UNREAD 3388 | - PT_LONG 3389 | "6707": 3390 | - PR_URL_NAME 3391 | - PT_UNICODE 3392 | "3d0c": 3393 | - PR_SERVICE_UID 3394 | - PT_BINARY 3395 | "3604": 3396 | - PR_CREATE_TEMPLATES 3397 | - PT_OBJECT 3398 | "3d0d": 3399 | - PR_SERVICE_EXTRA_UIDS 3400 | - PT_BINARY 3401 | "0010": 3402 | - PR_DELIVER_TIME 3403 | - PT_SYSTIME 3404 | "3605": 3405 | - PR_DETAILS_TABLE 3406 | - PT_OBJECT 3407 | "6709": 3408 | - PR_LOCAL_COMMIT_TIME 3409 | - PT_SYSTIME 3410 | "3d0e": 3411 | - PR_SERVICES 3412 | - PT_BINARY 3413 | "3ffa": 3414 | - PR_LAST_MODIFIER_NAME 3415 | - PT_TSTRING 3416 | "f000": 3417 | - PR_EMS_AB_OTHER_RECIPS 3418 | - PT_OBJECT 3419 | "3d0f": 3420 | - PR_SERVICE_SUPPORT_FILES 3421 | - PT_MV_TSTRING 3422 | "3ffb": 3423 | - PR_LAST_MODIFIER_ENTRYID 3424 | - PT_BINARY 3425 | "0011": 3426 | - PR_DISCARD_REASON 3427 | - PT_LONG 3428 | "3607": 3429 | - PR_SEARCH 3430 | - PT_OBJECT 3431 | "3ffc": 3432 | - PR_REPLY_RECIPIENT_SMTP_PROXIES 3433 | - PT_TSTRING 3434 | "0012": 3435 | - PR_DISCLOSURE_OF_RECIPIENTS 3436 | - PT_BOOLEAN 3437 | "6710": 3438 | - PR_URL_COMP_NAME_HASH 3439 | - PT_LONG 3440 | "3ffd": 3441 | - PR_MESSAGE_CODEPAGE 3442 | - PT_LONG 3443 | "0013": 3444 | - PR_DL_EXPANSION_HISTORY 3445 | - PT_BINARY 3446 | "3609": 3447 | - PR_SELECTABLE 3448 | - PT_BOOLEAN 3449 | "808a": 3450 | - PR_EMS_AB_DXA_NATIVE_ADDRESS_TYPE 3451 | - PT_TSTRING 3452 | "0ff4": 3453 | - PR_ACCESS 3454 | - PT_LONG 3455 | "6711": 3456 | - PR_MSG_FOLDER_TEMPLATE_RES_2 3457 | - PT_LONG 3458 | "3ffe": 3459 | - PR_EXTENDED_ACL_DATA 3460 | - PT_BINARY 3461 | "0014": 3462 | - PR_DL_EXPANSION_PROHIBITED 3463 | - PT_BOOLEAN 3464 | "808b": 3465 | - PR_EMS_AB_DXA_OUT_TEMPLATE_MAP 3466 | - PT_MV_TSTRING 3467 | "0ff5": 3468 | - PR_ROW_TYPE 3469 | - PT_LONG 3470 | "6712": 3471 | - PR_RANK 3472 | - PT_LONG 3473 | "6844": 3474 | - PR_DELEGATES_DISPLAY_NAMES 3475 | - PT_MV_UNICODE 3476 | "0015": 3477 | - PR_EXPIRY_TIME 3478 | - PT_SYSTIME 3479 | "808c": 3480 | - PR_EMS_AB_DXA_PASSWORD 3481 | - PT_TSTRING 3482 | "0ff6": 3483 | - PR_INSTANCE_KEY 3484 | - PT_BINARY 3485 | "3fff": 3486 | - PR_FROM_I_HAVE 3487 | - PT_BOOLEAN 3488 | "6713": 3489 | - PR_MSG_FOLDER_TEMPLATE_RES_4 3490 | - PT_BOOLEAN 3491 | "6845": 3492 | - PR_DELEGATES_ENTRYIDS 3493 | - PT_MV_BINARY 3494 | "0016": 3495 | - PR_IMPLICIT_CONVERSION_PROHIBITED 3496 | - PT_BOOLEAN 3497 | "370a": 3498 | - PR_ATTACH_TAG 3499 | - PT_BINARY 3500 | "808d": 3501 | - PR_EMS_AB_DXA_PREV_EXCHANGE_OPTIONS 3502 | - PT_LONG 3503 | "3610": 3504 | - PR_FOLDER_ASSOCIATED_CONTENTS 3505 | - PT_OBJECT 3506 | "0ff7": 3507 | - PR_ACCESS_LEVEL 3508 | - PT_LONG 3509 | "6714": 3510 | - PR_MSG_FOLDER_TEMPLATE_RES_5 3511 | - PT_BOOLEAN 3512 | "0017": 3513 | - PR_IMPORTANCE 3514 | - PT_LONG 3515 | "370b": 3516 | - PR_RENDERING_POSITION 3517 | - PT_LONG 3518 | "808e": 3519 | - PR_EMS_AB_DXA_PREV_EXPORT_NATIVE_ONLY 3520 | - PT_BOOLEAN 3521 | "0e0a": 3522 | - PR_SENTMAIL_ENTRYID 3523 | - PT_BINARY 3524 | "3611": 3525 | - PR_DEF_CREATE_DL 3526 | - PT_BINARY 3527 | "0ff8": 3528 | - PR_MAPPING_SIGNATURE 3529 | - PT_BINARY 3530 | "6715": 3531 | - PR_MSG_FOLDER_TEMPLATE_RES_6 3532 | - PT_BOOLEAN 3533 | "6847": 3534 | - PR_FREEBUSY_START_RANGE 3535 | - PT_LONG 3536 | "0018": 3537 | - PR_IPM_ID 3538 | - PT_BINARY 3539 | "370c": 3540 | - PR_ATTACH_TRANSPORT_NAME 3541 | - PT_TSTRING 3542 | "808f": 3543 | - PR_EMS_AB_DXA_PREV_IN_EXCHANGE_SENSITIVITY 3544 | - PT_LONG 3545 | "3612": 3546 | - PR_DEF_CREATE_MAILUSER 3547 | - PT_BINARY 3548 | "0ff9": 3549 | - PR_RECORD_KEY 3550 | - PT_BINARY 3551 | "6716": 3552 | - PR_MSG_FOLDER_TEMPLATE_RES_7 3553 | - PT_BINARY 3554 | "6848": 3555 | - PR_FREEBUSY_END_RANGE 3556 | - PT_LONG 3557 | "0019": 3558 | - PR_LATEST_DELIVERY_TIME 3559 | - PT_SYSTIME 3560 | "370d": 3561 | - PR_ATTACH_LONG_PATHNAME 3562 | - PT_TSTRING 3563 | "0e0c": 3564 | - PR_CORRELATE 3565 | - PT_BOOLEAN 3566 | "3613": 3567 | - PR_CONTAINER_CLASS 3568 | - PT_TSTRING 3569 | "6717": 3570 | - PR_MSG_FOLDER_TEMPLATE_RES_8 3571 | - PT_BINARY 3572 | "6849": 3573 | - PR_FREEBUSY_EMAIL_ADDRESS 3574 | - PT_UNICODE 3575 | "370e": 3576 | - PR_ATTACH_MIME_TAG 3577 | - PT_TSTRING 3578 | "0e0d": 3579 | - PR_CORRELATE_MTSID 3580 | - PT_BINARY 3581 | "3614": 3582 | - PR_CONTAINER_MODIFY_VERSION 3583 | - PT_I8 3584 | "6718": 3585 | - PR_MSG_FOLDER_TEMPLATE_RES_9 3586 | - PT_BINARY 3587 | "370f": 3588 | - PR_ATTACH_ADDITIONAL_INFO 3589 | - PT_BINARY 3590 | "0e0e": 3591 | - PR_DISCRETE_VALUES 3592 | - PT_BOOLEAN 3593 | "0020": 3594 | - PR_ORIGINALLY_INTENDED_RECIPIENT_NAME 3595 | - PT_BINARY 3596 | "3615": 3597 | - PR_AB_PROVIDER_ID 3598 | - PT_BINARY 3599 | "6719": 3600 | - PR_MSG_FOLDER_TEMPLATE_RES_10 3601 | - PT_UNICODE 3602 | "6850": 3603 | - PR_FREEBUSY_ALL_EVENTS 3604 | - PT_MV_BINARY 3605 | "0e0f": 3606 | - PR_RESPONSIBILITY 3607 | - PT_BOOLEAN 3608 | "0021": 3609 | - PR_ORIGINAL_EITS 3610 | - PT_BINARY 3611 | "3616": 3612 | - PR_DEFAULT_VIEW_ENTRYID 3613 | - PT_BINARY 3614 | "6851": 3615 | - PR_FREEBUSY_TENTATIVE_MONTHS 3616 | - PT_MV_LONG 3617 | "3617": 3618 | - PR_ASSOC_CONTENT_COUNT 3619 | - PT_LONG 3620 | "3880": 3621 | - PR_SYNCEVENT_SUPPRESS_GUID 3622 | - PT_BINARY 3623 | "6720": 3624 | - PR_INTERNET_FREE_DOC_INFO 3625 | - PT_BINARY 3626 | "6852": 3627 | - PR_FREEBUSY_TENTATIVE_EVENTS 3628 | - PT_MV_BINARY 3629 | "0022": 3630 | - PR_ORIGINATOR_CERTIFICATE 3631 | - PT_BINARY 3632 | "0023": 3633 | - PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED 3634 | - PT_BOOLEAN 3635 | "809a": 3636 | - PR_EMS_AB_DXA_SVR_SEQ 3637 | - PT_TSTRING 3638 | "39fe": 3639 | - PR_SMTP_ADDRESS 3640 | - PT_UNICODE 3641 | "6721": 3642 | - PR_PF_OVER_HARD_QUOTA_LIMIT 3643 | - PT_LONG 3644 | "6853": 3645 | - PR_FREEBUSY_BUSY_MONTHS 3646 | - PT_MV_LONG 3647 | "0024": 3648 | - PR_ORIGINATOR_RETURN_ADDRESS 3649 | - PT_BINARY 3650 | "809b": 3651 | - PR_EMS_AB_DXA_SVR_SEQ_TIME 3652 | - PT_SYSTIME 3653 | "6722": 3654 | - PR_PF_MSG_SIZE_LIMIT 3655 | - PT_LONG 3656 | "6854": 3657 | - PR_FREEBUSY_BUSY_EVENTS 3658 | - PT_MV_BINARY 3659 | "39ff": 3660 | - PR_7BIT_DISPLAY_NAME 3661 | - PT_TSTRING 3662 | "0025": 3663 | - PR_PARENT_KEY 3664 | - PT_BINARY 3665 | "809c": 3666 | - PR_EMS_AB_DXA_SVR_SEQ_USN 3667 | - PT_LONG 3668 | "6855": 3669 | - PR_FREEBUSY_OOF_MONTHS 3670 | - PT_MV_LONG 3671 | "0026": 3672 | - PR_PRIORITY 3673 | - PT_LONG 3674 | "809d": 3675 | - PR_EMS_AB_DXA_TASK 3676 | - PT_LONG 3677 | "3f8d": 3678 | - PR_PKM_DOC_STATUS 3679 | - PT_UNICODE 3680 | "6856": 3681 | - PR_FREEBUSY_OOF_EVENTS 3682 | - PT_MV_BINARY 3683 | "0e1a": 3684 | - PR_MODIFY_VERSION 3685 | - PT_I8 3686 | "0027": 3687 | - PR_ORIGIN_CHECK 3688 | - PT_BINARY 3689 | "809e": 3690 | - PR_EMS_AB_DXA_TEMPLATE_OPTIONS 3691 | - PT_LONG 3692 | "fff8": 3693 | - PR_EMS_AB_CHILD_RDNS 3694 | - PT_MV_TSTRING 3695 | "0e1b": 3696 | - PR_HASATTACH 3697 | - PT_BOOLEAN 3698 | "0028": 3699 | - PR_PROOF_OF_SUBMISSION_REQUESTED 3700 | - PT_BOOLEAN 3701 | "809f": 3702 | - PR_EMS_AB_DXA_TEMPLATE_TIMESTAMP 3703 | - PT_SYSTIME 3704 | "fff9": 3705 | - PR_EMS_AB_HIERARCHY_PATH 3706 | - PT_TSTRING 3707 | "3f8e": 3708 | - PR_MV_PKM_OPERATION_REQ 3709 | - PT_MV_UNICODE 3710 | "0e1c": 3711 | - PR_BODY_CRC 3712 | - PT_LONG 3713 | "0029": 3714 | - PR_READ_RECEIPT_REQUESTED 3715 | - PT_BOOLEAN 3716 | "3f8f": 3717 | - PR_PKM_DOC_INTERNAL_STATE 3718 | - PT_UNICODE 3719 | "0e1d": 3720 | - PR_NORMALIZED_SUBJECT 3721 | - PT_TSTRING 3722 | "0030": 3723 | - PR_REPLY_TIME 3724 | - PT_SYSTIME 3725 | "8c6a": 3726 | - PR_EMS_AB_TAGGED_X509_CERT 3727 | - PT_MV_BINARY 3728 | "0e1f": 3729 | - PR_RTF_IN_SYNC 3730 | - PT_BOOLEAN 3731 | "0031": 3732 | - PR_REPORT_TAG 3733 | - PT_BINARY 3734 | "8c6b": 3735 | - PR_EMS_AB_PERSONAL_TITLE 3736 | - PT_TSTRING 3737 | "0e58": 3738 | - PR_CREATOR_SID 3739 | - PT_BINARY 3740 | "0032": 3741 | - PR_REPORT_TIME 3742 | - PT_SYSTIME 3743 | "8c6c": 3744 | - PR_EMS_AB_LANGUAGE_ISO639 3745 | - PT_TSTRING 3746 | "0e59": 3747 | - PR_LAST_MODIFIER_SID 3748 | - PT_BINARY 3749 | "0033": 3750 | - PR_RETURNED_IPM 3751 | - PT_BOOLEAN 3752 | "0034": 3753 | - PR_SECURITY 3754 | - PT_LONG 3755 | "0035": 3756 | - PR_INCOMPLETE_COPY 3757 | - PT_BOOLEAN 3758 | "0e61": 3759 | - PR_URL_COMP_NAME_POSTFIX 3760 | - PT_LONG 3761 | "0036": 3762 | - PR_SENSITIVITY 3763 | - PT_LONG 3764 | "6602": 3765 | - PR_PROFILE_HOME_SERVER 3766 | - PT_TSTRING 3767 | "0e62": 3768 | - PR_URL_COMP_NAME_SET 3769 | - PT_BOOLEAN 3770 | "0037": 3771 | - PR_SUBJECT 3772 | - PT_TSTRING 3773 | "0e63": 3774 | - PR_SUBFOLDER_CT 3775 | - PT_LONG 3776 | "0038": 3777 | - PR_SUBJECT_IPM 3778 | - PT_BINARY 3779 | "0c00": 3780 | - PR_CONTENT_INTEGRITY_CHECK 3781 | - PT_BINARY 3782 | "0e64": 3783 | - PR_DELETED_SUBFOLDER_CT 3784 | - PT_LONG 3785 | "6868": 3786 | - PR_FREEBUSY_LAST_MODIFIED 3787 | - PT_SYSTIME 3788 | "0039": 3789 | - PR_CLIENT_SUBMIT_TIME 3790 | - PT_SYSTIME 3791 | "0c01": 3792 | - PR_EXPLICIT_CONVERSION 3793 | - PT_LONG 3794 | "6869": 3795 | - PR_FREEBUSY_NUM_MONTHS 3796 | - PT_LONG 3797 | "0c02": 3798 | - PR_IPM_RETURN_REQUESTED 3799 | - PT_BOOLEAN 3800 | "0e66": 3801 | - PR_DELETE_TIME 3802 | - PT_SYSTIME 3803 | "0040": 3804 | - PR_RECEIVED_BY_NAME 3805 | - PT_TSTRING 3806 | "6607": 3807 | - PR_PROFILE_UNRESOLVED_NAME 3808 | - PT_TSTRING 3809 | "0c03": 3810 | - PR_MESSAGE_TOKEN 3811 | - PT_BINARY 3812 | "0e67": 3813 | - PR_AGE_LIMIT 3814 | - PT_BINARY 3815 | "0041": 3816 | - PR_SENT_REPRESENTING_ENTRYID 3817 | - PT_BINARY 3818 | "6608": 3819 | - PR_PROFILE_UNRESOLVED_SERVER 3820 | - PT_TSTRING 3821 | "0c04": 3822 | - PR_NDR_REASON_CODE 3823 | - PT_LONG 3824 | "0042": 3825 | - PR_SENT_REPRESENTING_NAME 3826 | - PT_TSTRING 3827 | "0c05": 3828 | - PR_NDR_DIAG_CODE 3829 | - PT_LONG 3830 | "000a": 3831 | - PR_CONTENT_RETURN_REQUESTED 3832 | - PT_BOOLEAN 3833 | "0043": 3834 | - PR_RCVD_REPRESENTING_ENTRYID 3835 | - PT_BINARY 3836 | "0c06": 3837 | - PR_NON_RECEIPT_NOTIFICATION_REQUESTED 3838 | - PT_BOOLEAN 3839 | "6610": 3840 | - PR_PROFILE_OFFLINE_STORE_PATH 3841 | - PT_TSTRING 3842 | "000b": 3843 | - PR_CONVERSATION_KEY 3844 | - PT_BINARY 3845 | "0c07": 3846 | - PR_DELIVERY_POINT 3847 | - PT_LONG 3848 | "000c": 3849 | - PR_CONVERSION_EITS 3850 | - PT_BINARY 3851 | "0044": 3852 | - PR_RCVD_REPRESENTING_NAME 3853 | - PT_TSTRING 3854 | "0c08": 3855 | - PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED 3856 | - PT_BOOLEAN 3857 | "670a": 3858 | - PR_LOCAL_COMMIT_TIME_MAX 3859 | - PT_SYSTIME 3860 | "6611": 3861 | - PR_PROFILE_OFFLINE_INFO 3862 | - PT_BINARY 3863 | "000d": 3864 | - PR_CONVERSION_WITH_LOSS_PROHIBITED 3865 | - PT_BOOLEAN 3866 | "0045": 3867 | - PR_REPORT_ENTRYID 3868 | - PT_BINARY 3869 | "0c09": 3870 | - PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT 3871 | - PT_BINARY 3872 | "670b": 3873 | - PR_DELETED_COUNT_TOTAL 3874 | - PT_LONG 3875 | "6743": 3876 | - PR_CONNECTION_MODULUS 3877 | - PT_LONG 3878 | "6612": 3879 | - PR_PROFILE_HOME_SERVER_DN 3880 | - PT_TSTRING 3881 | "000e": 3882 | - PR_CONVERTED_EITS 3883 | - PT_BINARY 3884 | "0046": 3885 | - PR_READ_RECEIPT_ENTRYID 3886 | - PT_BINARY 3887 | "670c": 3888 | - PR_AUTO_RESET 3889 | - PT_CLSID 3890 | "6744": 3891 | - PR_DELIVER_TO_DN 3892 | - PT_UNICODE 3893 | "6613": 3894 | - PR_PROFILE_HOME_SERVER_ADDRS 3895 | - PT_MV_TSTRING 3896 | "000f": 3897 | - PR_DEFERRED_DELIVERY_TIME 3898 | - PT_SYSTIME 3899 | "0047": 3900 | - PR_MESSAGE_SUBMISSION_ID 3901 | - PT_BINARY 3902 | "6614": 3903 | - PR_PROFILE_SERVER_DN 3904 | - PT_TSTRING 3905 | "0c10": 3906 | - PR_PHYSICAL_RENDITION_ATTRIBUTES 3907 | - PT_BINARY 3908 | "0048": 3909 | - PR_PROVIDER_SUBMIT_TIME 3910 | - PT_SYSTIME 3911 | "360a": 3912 | - PR_SUBFOLDERS 3913 | - PT_BOOLEAN 3914 | "6746": 3915 | - PR_MIME_SIZE 3916 | - PT_LONG 3917 | "6615": 3918 | - PR_PROFILE_FAVFLD_COMMENT 3919 | - PT_TSTRING 3920 | "0c11": 3921 | - PR_PROOF_OF_DELIVERY 3922 | - PT_BINARY 3923 | "0049": 3924 | - PR_ORIGINAL_SUBJECT 3925 | - PT_TSTRING 3926 | "360b": 3927 | - PR_STATUS 3928 | - PT_LONG 3929 | "6747": 3930 | - PR_FILE_SIZE 3931 | - PT_I8 3932 | "6616": 3933 | - PR_PROFILE_ALLPUB_DISPLAY_NAME 3934 | - PT_TSTRING 3935 | "0c12": 3936 | - PR_PROOF_OF_DELIVERY_REQUESTED 3937 | - PT_BOOLEAN 3938 | "360c": 3939 | - PR_ANR 3940 | - PT_TSTRING 3941 | "6748": 3942 | - PR_FID 3943 | - PT_I8 3944 | "0050": 3945 | - PR_REPLY_RECIPIENT_NAMES 3946 | - PT_TSTRING 3947 | "6617": 3948 | - PR_PROFILE_ALLPUB_COMMENT 3949 | - PT_TSTRING 3950 | "0c13": 3951 | - PR_RECIPIENT_CERTIFICATE 3952 | - PT_BINARY 3953 | "360d": 3954 | - PR_CONTENTS_SORT_ORDER 3955 | - PT_MV_LONG 3956 | "6749": 3957 | - PR_PARENT_FID 3958 | - PT_I8 3959 | "0051": 3960 | - PR_RECEIVED_BY_SEARCH_KEY 3961 | - PT_BINARY 3962 | "0c14": 3963 | - PR_RECIPIENT_NUMBER_FOR_ADVICE 3964 | - PT_TSTRING 3965 | "66a0": 3966 | - PR_NT_USER_NAME 3967 | - PT_TSTRING 3968 | "360e": 3969 | - PR_CONTAINER_HIERARCHY 3970 | - PT_OBJECT 3971 | "0052": 3972 | - PR_RCVD_REPRESENTING_SEARCH_KEY 3973 | - PT_BINARY 3974 | "0ffa": 3975 | - PR_STORE_RECORD_KEY 3976 | - PT_BINARY 3977 | "0c15": 3978 | - PR_RECIPIENT_TYPE 3979 | - PT_LONG 3980 | "66a1": 3981 | - PR_LOCALE_ID 3982 | - PT_LONG 3983 | "360f": 3984 | - PR_CONTAINER_CONTENTS 3985 | - PT_OBJECT 3986 | "0e79": 3987 | - PR_TRUST_SENDER 3988 | - PT_LONG 3989 | "6750": 3990 | - PR_ICS_NOTIF 3991 | - PT_LONG 3992 | "0053": 3993 | - PR_READ_RECEIPT_SEARCH_KEY 3994 | - PT_BINARY 3995 | "0ffb": 3996 | - PR_STORE_ENTRYID 3997 | - PT_BINARY 3998 | "0c16": 3999 | - PR_REGISTERED_MAIL_TYPE 4000 | - PT_LONG 4001 | "66a2": 4002 | - PR_LAST_LOGON_TIME 4003 | - PT_SYSTIME 4004 | "1100": 4005 | - PR_P1_CONTENT 4006 | - PT_BINARY 4007 | "001a": 4008 | - PR_MESSAGE_CLASS 4009 | - PT_TSTRING 4010 | "36d0": 4011 | - PR_IPM_APPOINTMENT_ENTRYID 4012 | - PT_BINARY 4013 | "6751": 4014 | - PR_ARTICLE_NUM_NEXT 4015 | - PT_LONG 4016 | "0054": 4017 | - PR_REPORT_SEARCH_KEY 4018 | - PT_BINARY 4019 | "0ffc": 4020 | - PR_MINI_ICON 4021 | - PT_BINARY 4022 | "0c17": 4023 | - PR_REPLY_REQUESTED 4024 | - PT_BOOLEAN 4025 | "66a3": 4026 | - PR_LAST_LOGOFF_TIME 4027 | - PT_SYSTIME 4028 | "1101": 4029 | - PR_P1_CONTENT_TYPE 4030 | - PT_BINARY 4031 | "001b": 4032 | - PR_MESSAGE_DELIVERY_ID 4033 | - PT_BINARY 4034 | "36d1": 4035 | - PR_IPM_CONTACT_ENTRYID 4036 | - PT_BINARY 4037 | "6752": 4038 | - PR_IMAP_LAST_ARTICLE_ID 4039 | - PT_LONG 4040 | "0ffd": 4041 | - PR_ICON 4042 | - PT_BINARY 4043 | "0c18": 4044 | - PR_REQUESTED_DELIVERY_METHOD 4045 | - PT_LONG 4046 | "66a4": 4047 | - PR_STORAGE_LIMIT_INFORMATION 4048 | - PT_LONG 4049 | "36d2": 4050 | - PR_IPM_JOURNAL_ENTRYID 4051 | - PT_BINARY 4052 | "671a": 4053 | - PR_MSG_FOLDER_TEMPLATE_RES_11 4054 | - PT_UNICODE 4055 | "6753": 4056 | - PR_NOT_822_RENDERABLE 4057 | - PT_BOOLEAN 4058 | "0055": 4059 | - PR_ORIGINAL_DELIVERY_TIME 4060 | - PT_SYSTIME 4061 | "0ffe": 4062 | - PR_OBJECT_TYPE 4063 | - PT_LONG 4064 | "0c19": 4065 | - PR_SENDER_ENTRYID 4066 | - PT_BINARY 4067 | "66a5": 4068 | - PR_NEWSGROUP_COMPONENT 4069 | - PT_TSTRING 4070 | "36d3": 4071 | - PR_IPM_NOTE_ENTRYID 4072 | - PT_BINARY 4073 | "671b": 4074 | - PR_MSG_FOLDER_TEMPLATE_RES_12 4075 | - PT_UNICODE 4076 | "0056": 4077 | - PR_ORIGINAL_AUTHOR_SEARCH_KEY 4078 | - PT_BINARY 4079 | "66a6": 4080 | - PR_NEWSFEED_INFO 4081 | - PT_BINARY 4082 | "1000": 4083 | - PR_BODY 4084 | - PT_TSTRING 4085 | "001e": 4086 | - PR_MESSAGE_SECURITY_LABEL 4087 | - PT_BINARY 4088 | "36d4": 4089 | - PR_IPM_TASK_ENTRYID 4090 | - PT_BINARY 4091 | "0fff": 4092 | - PR_ENTRYID 4093 | - PT_BINARY 4094 | "0057": 4095 | - PR_MESSAGE_TO_ME 4096 | - PT_BOOLEAN 4097 | "66a7": 4098 | - PR_INTERNET_NEWSGROUP_NAME 4099 | - PT_TSTRING 4100 | "001f": 4101 | - PR_OBSOLETED_IPMS 4102 | - PT_BINARY 4103 | "36d5": 4104 | - PR_REMINDERS_ONLINE_ENTRYID 4105 | - PT_BINARY 4106 | "684f": 4107 | - PR_FREEBUSY_ALL_MONTHS 4108 | - PT_MV_LONG 4109 | "0058": 4110 | - PR_MESSAGE_CC_ME 4111 | - PT_BOOLEAN 4112 | "66a8": 4113 | - PR_FOLDER_FLAGS 4114 | - PT_LONG 4115 | "1001": 4116 | - PR_REPORT_TEXT 4117 | - PT_TSTRING 4118 | "36d6": 4119 | - PR_REMINDERS_OFFLINE_ENTRYID 4120 | - PT_BINARY 4121 | "671e": 4122 | - PR_PF_PLATINUM_HOME_MDB 4123 | - PT_BOOLEAN 4124 | "0059": 4125 | - PR_MESSAGE_RECIP_ME 4126 | - PT_BOOLEAN 4127 | "66a9": 4128 | - PR_LAST_ACCESS_TIME 4129 | - PT_SYSTIME 4130 | "1002": 4131 | - PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY 4132 | - PT_BINARY 4133 | "36d7": 4134 | - PR_IPM_DRAFTS_ENTRYID 4135 | - PT_BINARY 4136 | "671f": 4137 | - PR_PF_PROXY_REQUIRED 4138 | - PT_BOOLEAN 4139 | "6626": 4140 | - PR_ADDRBOOK_FOR_LOCAL_SITE_ENTRYID 4141 | - PT_BINARY 4142 | "1003": 4143 | - PR_REPORTING_DL_NAME 4144 | - PT_BINARY 4145 | "361c": 4146 | - PR_PACKED_NAME_PROPS 4147 | - PT_BINARY 4148 | "36d8": 4149 | - PR_OUTLOOK_2003_ENTRYIDS 4150 | - PT_MV_BINARY 4151 | "6758": 4152 | - PR_LTID 4153 | - PT_BINARY 4154 | "0060": 4155 | - PR_START_DATE 4156 | - PT_SYSTIME 4157 | "6627": 4158 | - PR_OFFLINE_MESSAGE_ENTRYID 4159 | - PT_BINARY 4160 | "3a00": 4161 | - PR_ACCOUNT 4162 | - PT_TSTRING 4163 | "1004": 4164 | - PR_REPORTING_MTA_CERTIFICATE 4165 | - PT_BINARY 4166 | "6759": 4167 | - PR_CN_EXPORT 4168 | - PT_BINARY 4169 | "5d01": 4170 | - PR_Sender_Smtp_Address 4171 | - PT_STRING 4172 | "5d02": 4173 | - PR_Sent_Representing_Smtp_Address 4174 | - PT_STRING 4175 | # http://codegists.com/search/outlook%20disable%20autodiscover%20applescript/10 4176 | -------------------------------------------------------------------------------- /src/MAPI/Schema/MapiFieldsOther.yaml: -------------------------------------------------------------------------------- 1 | # this file provides for the mapping of the keys of named properties 2 | # to symbolic names (as opposed to mapitags.yaml, which is currently 3 | # in a different format, has a different source, and is only fixed 4 | # code properties) 5 | # 6 | # essentially the symbols are slightly munged versions of the names 7 | # given to these properties by CDO, or Outlook's object model. 8 | # it was parsed out of cdo10.htm, and neatened up a bit. 9 | # 10 | # interestingly, despite having separate guids, the codes are picked not to 11 | # clash. further the names themselves have only 3 clashes in all the below. 12 | --- 13 | "PSETID_Address": 14 | 0x8005: file_under 15 | 0x8017: last_name_and_first_name 16 | 0x8018: company_and_full_name 17 | 0x8019: full_name_and_company 18 | 0x801a: home_address 19 | 0x801b: business_address 20 | 0x801c: other_address 21 | 0x8022: selected_address 22 | 0x802b: web_page 23 | 0x802c: yomi_first_name 24 | 0x802d: yomi_last_name 25 | 0x802e: yomi_company_name 26 | 0x8030: last_first_no_space 27 | 0x8031: last_first_space_only 28 | 0x8032: company_last_first_no_space 29 | 0x8033: company_last_first_space_only 30 | 0x8034: last_first_no_space_company 31 | 0x8035: last_first_space_only_company 32 | 0x8036: last_first_and_suffix 33 | 0x8045: business_address_street 34 | 0x8046: business_address_city 35 | 0x8047: business_address_state 36 | 0x8048: business_address_postal_code 37 | 0x8049: business_address_country 38 | 0x804a: business_address_post_office_box 39 | 0x804f: user_field1 40 | 0x8050: user_field2 41 | 0x8051: user_field3 42 | 0x8052: user_field4 43 | 0x8062: imaddress 44 | 0x8082: email_addr_type 45 | 0x8083: email_email_address 46 | 0x8084: email_original_display_name 47 | 0x8085: email_original_entry_id 48 | 0x8092: email2_addr_type 49 | 0x8093: email2_email_address 50 | 0x8094: email2_original_display_name 51 | 0x8095: email2_original_entry_id 52 | 0x80a2: email3_addr_type 53 | 0x80a3: email3_email_address 54 | 0x80a4: email3_original_display_name 55 | 0x80a5: email3_original_entry_id 56 | 0x80d8: internet_free_busy_address 57 | "PSETID_Task": 58 | 0x8101: status 59 | 0x8102: percent_complete 60 | 0x8103: team_task 61 | 0x8104: start_date 62 | 0x8105: due_date 63 | 0x8106: duration 64 | 0x810f: date_completed 65 | 0x8110: actual_work 66 | 0x8111: total_work 67 | 0x811c: complete 68 | 0x811f: owner 69 | 0x8126: is_recurring 70 | "PSETID_Appointment": 71 | 0x8205: busy_status 72 | 0x8208: location 73 | 0x820d: start_date 74 | 0x820e: end_date 75 | 0x8213: duration 76 | 0x8214: colors 77 | 0x8216: recurrence_state 78 | 0x8218: response_status 79 | 0x8222: reply_time 80 | 0x8223: is_recurring 81 | 0x822e: organizer 82 | 0x8231: recurrence_type 83 | 0x8232: recurrence_pattern 84 | "PSETID_Common": 85 | # also had CdoPR_FLAG_DUE_BY when applied to messages. i don't currently 86 | # use message class specific names 87 | 0x8502: reminder_time 88 | 0x8503: reminder_set 89 | 0x8516: common_start 90 | 0x8517: common_end 91 | 0x851c: reminder_override 92 | 0x851e: reminder_sound 93 | 0x851f: reminder_file 94 | # this one only listed as CdoPR_FLAG_TEXT. maybe should be 95 | # reminder_text 96 | 0x8530: flag_text 97 | 0x8534: mileage 98 | 0x8535: billing_information 99 | 0x8539: companies 100 | 0x853a: contact_names 101 | # had CdoPR_FLAG_DUE_BY_NEXT for this one also 102 | 0x8560: reminder_next_time 103 | "PSETID_Log": 104 | 0x8700: entry 105 | 0x8704: start_date 106 | 0x8705: start_time 107 | 0x8706: start 108 | 0x8707: duration 109 | 0x8708: end 110 | 0x870e: doc_printed 111 | 0x870f: doc_saved 112 | 0x8710: doc_routed 113 | 0x8711: doc_posted 114 | 0x8712: entry_type 115 | "PSETID_Note": 116 | 0x8b00: color 117 | 0x8b02: width 118 | 0x8b03: height 119 | "PS_PUBLIC_STRINGS": 120 | Keywords: categories 121 | -------------------------------------------------------------------------------- /tests/MAPI/MapiMessageFactoryTest.php: -------------------------------------------------------------------------------- 1 | createFromFile(__DIR__.'/../_files/sample.msg'); 17 | 18 | $message = $messageFactory->parseMessage($ole); 19 | 20 | $this->assertEquals('Testing Manuel Lemos\' MIME E-mail composing and sending PHP class: HTML message',$message->properties['subject']); 21 | $this->assertEquals( 22 | "Testing Manuel Lemos' MIME E-mail composing and sending PHP class: HTML message\r\n________________________________\r\n\r\nHello Manuel,\r\n\r\nThis message is just to let you know that the MIME E-mail message composing and sending PHP class is working as expected.\r\n\r\nHere is an image embedded in a message as a separate part:\r\n[cid:ae0357e57f04b8347f7621662cb63855.gif]\r\nThank you,\r\nmlemos\r\n\r\n", 23 | $message->getBody() 24 | ); 25 | $this->assertEquals('<20050430192829.0489.mlemos@acm.org>',$message->getInternetMessageId()); 26 | 27 | $attachments = $message->getAttachments(); 28 | $this->assertCount(3,$attachments); 29 | 30 | $this->assertEquals('attachment.txt',$attachments[0]->getFilename()); 31 | $this->assertNull($attachments[0]->getContentId()); 32 | $this->assertEquals('This is just a plain text attachment file named attachment.txt .',$attachments[0]->getData()); 33 | 34 | $this->assertEquals('logo.gif',$attachments[1]->getFilename()); 35 | $this->assertEquals('ae0357e57f04b8347f7621662cb63855.gif',$attachments[1]->getContentId()); 36 | 37 | $this->assertEquals('background.gif',$attachments[2]->getFilename()); 38 | $this->assertEquals('4c837ed463ad29c820668e835a270e8a.gif',$attachments[2]->getContentId()); 39 | 40 | $this->assertEquals(new \DateTime('2005-04-30 22:28:29', new \DateTimeZone('UTC')), $message->getSendTime()); 41 | } 42 | 43 | public function testParseMessage2() 44 | { 45 | $documentFactory = new DocumentFactory(); 46 | $messageFactory = new MapiMessageFactory(); 47 | 48 | $ole = $documentFactory->createFromFile(__DIR__.'/../_files/Swetlana.msg'); 49 | 50 | $message = $messageFactory->parseMessage($ole); 51 | 52 | $this->assertEquals(new \DateTime('2006-03-07 13:25:19', new \DateTimeZone('UTC')), $message->getSendTime()); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /tests/MAPI/OLE/Time/OleTimeTest.php: -------------------------------------------------------------------------------- 1 | assertEquals($expected,$actual, sprintf('Failed test %d',$number)); 18 | } 19 | 20 | public function getTimeFromOleTimeProvider() 21 | { 22 | return [ 23 | [1, hex2bin('4012a294ea41c601'), 1141737919], 24 | ]; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tests/_files/Swetlana.msg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hfig/MAPI/f5aa9e2bd0034b9ef220cd3f62feb048733c45ce/tests/_files/Swetlana.msg -------------------------------------------------------------------------------- /tests/_files/sample.msg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hfig/MAPI/f5aa9e2bd0034b9ef220cd3f62feb048733c45ce/tests/_files/sample.msg --------------------------------------------------------------------------------