kcc

package module
v5.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 2, 2019 License: Apache-2.0 Imports: 22 Imported by: 2

README

Kopano Core client for Go

This implements a minimal client interfacing with a couple of SOAP methods of a Kopano server.

Quickstart

Make sure you have Go 1.13 or later installed. This project uses Go modules.

mkdir -p ~/go/src/stash.kopano.io/kgol
cd ~/go/src/stash.kopano.io/kgol
git clone <THIS-PROJECT> kcc-go
cd kcc-go

All the rest of this document assumes you have installed like above and pwd is the kcc-go directory.

Environment variables

Environment variable Description
KOPANO_SERVER_DEFAULT_URI URI used to connect to Kopano server
TEST_USERNAME Kopano username used in unit tests
TEST_PASSWORD Kopano username's password used in unit tests

Testing

Running the unit tests requires a Kopano Server with accessible SOAP service. Make sure to set the environment variables as listed above to match your Kopano server details.

Testing requires a running Kopano Groupware Storage server.

go test -v

Benchmark

For testing there is also a benchmark test.

go test -v -bench=. -run BenchmarkLogon -benchmem
BenchmarkLogon-8            2000            591907 ns/op           20509 B/op       217 allocs/op
PASS
ok      stash.kopano.io/kc/kcc-go       1.255s

Test server

For example usage, a simple test HTTP server kuserd is included. Run it like this:

glide install
go install -v ./cmd/kuserd && KOPANO_USERNAME=system KOPANO_PASSWORD= kuserd serve
INFO[0000] serve started

Make sure to specify KOPANO_USERNAME and KOPANO_PASSWORD according to your setup. It must be a valid existing user. If not give, the server defaults to the SYSTEM user with empty password.

Endpoints

The kuserd test server exposes a bunch of endpoints for easy testing with curl or similar.

/logon
curl -v "http://user1:pass@127.0.0.1:8769/logon"
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8769 (#0)
* Server auth using Basic with user 'user1'
> GET /logon HTTP/1.1
> Host: 127.0.0.1:8769
> Authorization: Basic dXNlcjE6cGFzcw==
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 07 Nov 2017 18:16:07 GMT
< Content-Length: 0
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host 127.0.0.1 left intact
/logoff?id=${sessionID}
curl -v "http://127.0.0.1:8769/logoff?id=17227711350321618063"
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8769 (#0)
> GET /logoff?id=17227711350321618063 HTTP/1.1
> Host: 127.0.0.1:8769
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 07 Nov 2017 19:16:25 GMT
< Content-Length: 0
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host 127.0.0.1 left intact
/userinfo?username=${username}
curl -v "http://127.0.0.1:8769/userinfo?username=system"
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8769 (#0)
> GET /userinfo?username=system HTTP/1.1
> Host: 127.0.0.1:8769
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json
< Date: Tue, 07 Nov 2017 18:16:28 GMT
< Content-Length: 226
<
{
  "ulUserID": 2,
  "lpszUsername": "SYSTEM",
  "lpszMailAddress": "postmaster@localhost",
  "lpszFullName": "SYSTEM",
  "ulIsAdmin": 2,
  "ulIsNonActive": 0,
  "sUserId": "AAAAAKwhqVBA0+5Isxn7p1MwRCUAAAAABgAAAAIAAAAAAAAA"
}
* Connection #0 to host 127.0.0.1 left intact
/error?er=${error_code}

Converts Kopano Core error codes to a meaningful string.

curl "http://127.0.0.1:8769/error?er=0x80000002"
KCERR_NOT_FOUND: (Not Found) (KC:0x80000002)
/errors

Lists all known Errors with integer and hex representation codes.

Benchmark / load tests

Use hey to test it.

hey -n 10000 -c 200 -a user1:pass http://127.0.0.1:8769/logon
Summary:
  Total:        1.9587 secs
  Slowest:      0.3196 secs
  Fastest:      0.0006 secs
  Average:      0.0376 secs
  Requests/sec: 5105.3052

Response time histogram:
  0.001 [1]     |
  0.032 [2035]  |∎∎∎∎∎∎∎∎∎∎
  0.064 [7774]  |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.096 [120]   |∎
  0.128 [50]    |
  0.160 [16]    |
  0.192 [1]     |
  0.224 [0]     |
  0.256 [1]     |
  0.288 [0]     |
  0.320 [2]     |

Latency distribution:
  10% in 0.0289 secs
  25% in 0.0333 secs
  50% in 0.0364 secs
  75% in 0.0402 secs
  90% in 0.0460 secs
  95% in 0.0537 secs
  99% in 0.0850 secs

Details (average, fastest, slowest):
  DNS+dialup:    0.0003 secs, 0.0000 secs, 0.0880 secs
  DNS-lookup:    0.0000 secs, 0.0000 secs, 0.0000 secs
  req write:     0.0000 secs, 0.0000 secs, 0.0936 secs
  resp wait:     0.0367 secs, 0.0005 secs, 0.2742 secs
  resp read:     0.0004 secs, 0.0000 secs, 0.0458 secs

Status code distribution:
  [200] 10000 responses
hey -n 10000 -c 200 "http://127.0.0.1:8769/userinfo?username=system"
Summary:
  Total:        2.3543 secs
  Slowest:      1.0623 secs
  Fastest:      0.0004 secs
  Average:      0.0445 secs
  Requests/sec: 4247.5039
  Total data:   2260000 bytes
  Size/request: 226 bytes

Response time histogram:
  0.000 [1]     |
  0.107 [9928]  |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.213 [46]    |
  0.319 [23]    |
  0.425 [0]     |
  0.531 [0]     |
  0.638 [0]     |
  0.744 [0]     |
  0.850 [0]     |
  0.956 [0]     |
  1.062 [2]     |

Latency distribution:
  10% in 0.0265 secs
  25% in 0.0339 secs
  50% in 0.0418 secs
  75% in 0.0522 secs
  90% in 0.0649 secs
  95% in 0.0737 secs
  99% in 0.0965 secs

Details (average, fastest, slowest):
  DNS+dialup:    0.0003 secs, 0.0000 secs, 0.0872 secs
  DNS-lookup:    0.0000 secs, 0.0000 secs, 0.0000 secs
  req write:     0.0000 secs, 0.0000 secs, 0.0270 secs
  resp wait:     0.0441 secs, 0.0004 secs, 1.0623 secs
  resp read:     0.0001 secs, 0.0000 secs, 0.0120 secs

Status code distribution:
  [200] 10000 responses

Documentation

Index

Constants

View Source
const (
	MV_FLAG = 0x1000

	PT_UNSPECIFIED uint64 = 0x0000
	PT_NULL        uint64 = 0x0001
	PT_SHORT       uint64 = 0x0002
	PT_LONG        uint64 = 0x0003
	PT_FLOAT       uint64 = 0x0004
	PT_DOUBLE      uint64 = 0x0005
	PT_CURRENCY    uint64 = 0x0006
	PT_APPTIME     uint64 = 0x0007
	PT_ERROR       uint64 = 0x000A
	PT_BOOLEAN     uint64 = 0x000B
	PT_OBJECT      uint64 = 0x000D
	PT_LONGLONG    uint64 = 0x0014
	PT_STRING8     uint64 = 0x001E
	PT_UNICODE     uint64 = 0x001F
	PT_SYSTIME     uint64 = 0x0040
	PT_CLSID       uint64 = 0x0048
	PT_BINARY      uint64 = 0x0102

	PT_MV_SHORT    = (MV_FLAG | PT_SHORT)
	PT_MV_LONG     = (MV_FLAG | PT_LONG)
	PT_MV_FLOAT    = (MV_FLAG | PT_FLOAT)
	PT_MV_DOUBLE   = (MV_FLAG | PT_DOUBLE)
	PT_MV_CURRENCY = (MV_FLAG | PT_CURRENCY)
	PT_MV_APPTIME  = (MV_FLAG | PT_APPTIME)
	PT_MV_SYSTIME  = (MV_FLAG | PT_SYSTIME)
	PT_MV_STRING8  = (MV_FLAG | PT_STRING8)
	PT_MV_BINARY   = (MV_FLAG | PT_BINARY)
	PT_MV_UNICODE  = (MV_FLAG | PT_UNICODE)
	PT_MV_CLSID    = (MV_FLAG | PT_CLSID)
	PT_MV_LONGLONG = (MV_FLAG | PT_LONGLONG)

	PT_TSTRING    = PT_UNICODE
	PT_MV_TSTRING = (MV_FLAG | PT_UNICODE)

	PROP_TYPE_MASK uint64 = 0x0000FFFF

	/* Alternate property type names for ease of use */
	PT_I2 = PT_SHORT
	PT_I4 = PT_LONG
	PT_R4 = PT_FLOAT
	PT_R8 = PT_DOUBLE
	PT_I8 = PT_LONGLONG
)

Property value types as defined in mapi4linux/include/mapitags.h and mapi4linux/include/mapidefs.h. This defines all property types independently from kcc-go support.

View Source
const (
	ABEIDV1VersionNumber = 1
)

Version numbers as used by Kopano ABEID implementations.

View Source
const KCSuccess = KCERR_NONE

KCSuccess defines success response as returned by Kopano core.

Variables

View Source
var (
	// DefaultURI is the default Kopano server URI to be used when no URI is
	// given when constructing a KCC or SOAP instance.
	DefaultURI = "http://127.0.0.1:236"
	// DefaultAppName is the default client app name as sent to the server.
	DefaultAppName = "kcc-go"
	// Version specifies the version string of this client implementation.
	Version = "0.0.0-dev"
	// ClientVersion specifies the version of this clients API implementation,
	ClientVersion = 8
)
View Source
var (
	PR_ACKNOWLEDGEMENT_MODE                       = propTag(PT_LONG, 0x0001)
	PR_ALTERNATE_RECIPIENT_ALLOWED                = propTag(PT_BOOLEAN, 0x0002)
	PR_AUTHORIZING_USERS                          = propTag(PT_BINARY, 0x0003)
	PR_AUTO_FORWARD_COMMENT                       = propTag(PT_TSTRING, 0x0004)
	PR_AUTO_FORWARD_COMMENT_W                     = propTag(PT_UNICODE, 0x0004)
	PR_AUTO_FORWARD_COMMENT_A                     = propTag(PT_STRING8, 0x0004)
	PR_AUTO_FORWARDED                             = propTag(PT_BOOLEAN, 0x0005)
	PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID       = propTag(PT_BINARY, 0x0006)
	PR_CONTENT_CORRELATOR                         = propTag(PT_BINARY, 0x0007)
	PR_CONTENT_IDENTIFIER                         = propTag(PT_TSTRING, 0x0008)
	PR_CONTENT_IDENTIFIER_W                       = propTag(PT_UNICODE, 0x0008)
	PR_CONTENT_IDENTIFIER_A                       = propTag(PT_STRING8, 0x0008)
	PR_CONTENT_LENGTH                             = propTag(PT_LONG, 0x0009)
	PR_CONTENT_RETURN_REQUESTED                   = propTag(PT_BOOLEAN, 0x000A)
	PR_CONVERSATION_KEY                           = propTag(PT_BINARY, 0x000B)
	PR_CONVERSION_EITS                            = propTag(PT_BINARY, 0x000C)
	PR_CONVERSION_WITH_LOSS_PROHIBITED            = propTag(PT_BOOLEAN, 0x000D)
	PR_CONVERTED_EITS                             = propTag(PT_BINARY, 0x000E)
	PR_DEFERRED_DELIVERY_TIME                     = propTag(PT_SYSTIME, 0x000F)
	PR_DELIVER_TIME                               = propTag(PT_SYSTIME, 0x0010)
	PR_DISCARD_REASON                             = propTag(PT_LONG, 0x0011)
	PR_DISCLOSURE_OF_RECIPIENTS                   = propTag(PT_BOOLEAN, 0x0012)
	PR_DL_EXPANSION_HISTORY                       = propTag(PT_BINARY, 0x0013)
	PR_DL_EXPANSION_PROHIBITED                    = propTag(PT_BOOLEAN, 0x0014)
	PR_EXPIRY_TIME                                = propTag(PT_SYSTIME, 0x0015)
	PR_IMPLICIT_CONVERSION_PROHIBITED             = propTag(PT_BOOLEAN, 0x0016)
	PR_IMPORTANCE                                 = propTag(PT_LONG, 0x0017)
	PR_IPM_ID                                     = propTag(PT_BINARY, 0x0018)
	PR_LATEST_DELIVERY_TIME                       = propTag(PT_SYSTIME, 0x0019)
	PR_MESSAGE_CLASS                              = propTag(PT_TSTRING, 0x001A)
	PR_MESSAGE_CLASS_W                            = propTag(PT_UNICODE, 0x001A)
	PR_MESSAGE_CLASS_A                            = propTag(PT_STRING8, 0x001A)
	PR_MESSAGE_DELIVERY_ID                        = propTag(PT_BINARY, 0x001B)
	PR_MESSAGE_SECURITY_LABEL                     = propTag(PT_BINARY, 0x001E)
	PR_OBSOLETED_IPMS                             = propTag(PT_BINARY, 0x001F)
	PR_ORIGINALLY_INTENDED_RECIPIENT_NAME         = propTag(PT_BINARY, 0x0020)
	PR_ORIGINAL_EITS                              = propTag(PT_BINARY, 0x0021)
	PR_ORIGINATOR_CERTIFICATE                     = propTag(PT_BINARY, 0x0022)
	PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED       = propTag(PT_BOOLEAN, 0x0023)
	PR_ORIGINATOR_RETURN_ADDRESS                  = propTag(PT_BINARY, 0x0024)
	PR_PARENT_KEY                                 = propTag(PT_BINARY, 0x0025)
	PR_PRIORITY                                   = propTag(PT_LONG, 0x0026)
	PR_ORIGIN_CHECK                               = propTag(PT_BINARY, 0x0027)
	PR_PROOF_OF_SUBMISSION_REQUESTED              = propTag(PT_BOOLEAN, 0x0028)
	PR_READ_RECEIPT_REQUESTED                     = propTag(PT_BOOLEAN, 0x0029)
	PR_RECEIPT_TIME                               = propTag(PT_SYSTIME, 0x002A)
	PR_RECIPIENT_REASSIGNMENT_PROHIBITED          = propTag(PT_BOOLEAN, 0x002B)
	PR_REDIRECTION_HISTORY                        = propTag(PT_BINARY, 0x002C)
	PR_RELATED_IPMS                               = propTag(PT_BINARY, 0x002D)
	PR_ORIGINAL_SENSITIVITY                       = propTag(PT_LONG, 0x002E)
	PR_LANGUAGES                                  = propTag(PT_TSTRING, 0x002F)
	PR_LANGUAGES_W                                = propTag(PT_UNICODE, 0x002F)
	PR_LANGUAGES_A                                = propTag(PT_STRING8, 0x002F)
	PR_REPLY_TIME                                 = propTag(PT_SYSTIME, 0x0030)
	PR_REPORT_TAG                                 = propTag(PT_BINARY, 0x0031)
	PR_REPORT_TIME                                = propTag(PT_SYSTIME, 0x0032)
	PR_RETURNED_IPM                               = propTag(PT_BOOLEAN, 0x0033)
	PR_SECURITY                                   = propTag(PT_LONG, 0x0034)
	PR_INCOMPLETE_COPY                            = propTag(PT_BOOLEAN, 0x0035)
	PR_SENSITIVITY                                = propTag(PT_LONG, 0x0036)
	PR_SUBJECT                                    = propTag(PT_TSTRING, 0x0037)
	PR_SUBJECT_W                                  = propTag(PT_UNICODE, 0x0037)
	PR_SUBJECT_A                                  = propTag(PT_STRING8, 0x0037)
	PR_SUBJECT_IPM                                = propTag(PT_BINARY, 0x0038)
	PR_CLIENT_SUBMIT_TIME                         = propTag(PT_SYSTIME, 0x0039)
	PR_REPORT_NAME                                = propTag(PT_TSTRING, 0x003A)
	PR_REPORT_NAME_W                              = propTag(PT_UNICODE, 0x003A)
	PR_REPORT_NAME_A                              = propTag(PT_STRING8, 0x003A)
	PR_SENT_REPRESENTING_SEARCH_KEY               = propTag(PT_BINARY, 0x003B)
	PR_X400_CONTENT_TYPE                          = propTag(PT_BINARY, 0x003C)
	PR_SUBJECT_PREFIX                             = propTag(PT_TSTRING, 0x003D)
	PR_SUBJECT_PREFIX_W                           = propTag(PT_UNICODE, 0x003D)
	PR_SUBJECT_PREFIX_A                           = propTag(PT_STRING8, 0x003D)
	PR_NON_RECEIPT_REASON                         = propTag(PT_LONG, 0x003E)
	PR_RECEIVED_BY_ENTRYID                        = propTag(PT_BINARY, 0x003F)
	PR_RECEIVED_BY_NAME                           = propTag(PT_TSTRING, 0x0040)
	PR_RECEIVED_BY_NAME_W                         = propTag(PT_UNICODE, 0x0040)
	PR_RECEIVED_BY_NAME_A                         = propTag(PT_STRING8, 0x0040)
	PR_SENT_REPRESENTING_ENTRYID                  = propTag(PT_BINARY, 0x0041)
	PR_SENT_REPRESENTING_NAME                     = propTag(PT_TSTRING, 0x0042)
	PR_SENT_REPRESENTING_NAME_W                   = propTag(PT_UNICODE, 0x0042)
	PR_SENT_REPRESENTING_NAME_A                   = propTag(PT_STRING8, 0x0042)
	PR_RCVD_REPRESENTING_ENTRYID                  = propTag(PT_BINARY, 0x0043)
	PR_RCVD_REPRESENTING_NAME                     = propTag(PT_TSTRING, 0x0044)
	PR_RCVD_REPRESENTING_NAME_W                   = propTag(PT_UNICODE, 0x0044)
	PR_RCVD_REPRESENTING_NAME_A                   = propTag(PT_STRING8, 0x0044)
	PR_REPORT_ENTRYID                             = propTag(PT_BINARY, 0x0045)
	PR_READ_RECEIPT_ENTRYID                       = propTag(PT_BINARY, 0x0046)
	PR_MESSAGE_SUBMISSION_ID                      = propTag(PT_BINARY, 0x0047)
	PR_PROVIDER_SUBMIT_TIME                       = propTag(PT_SYSTIME, 0x0048)
	PR_ORIGINAL_SUBJECT                           = propTag(PT_TSTRING, 0x0049)
	PR_ORIGINAL_SUBJECT_W                         = propTag(PT_UNICODE, 0x0049)
	PR_ORIGINAL_SUBJECT_A                         = propTag(PT_STRING8, 0x0049)
	PR_DISC_VAL                                   = propTag(PT_BOOLEAN, 0x004A)
	PR_ORIG_MESSAGE_CLASS                         = propTag(PT_TSTRING, 0x004B)
	PR_ORIG_MESSAGE_CLASS_W                       = propTag(PT_UNICODE, 0x004B)
	PR_ORIG_MESSAGE_CLASS_A                       = propTag(PT_STRING8, 0x004B)
	PR_ORIGINAL_AUTHOR_ENTRYID                    = propTag(PT_BINARY, 0x004C)
	PR_ORIGINAL_AUTHOR_NAME                       = propTag(PT_TSTRING, 0x004D)
	PR_ORIGINAL_AUTHOR_NAME_W                     = propTag(PT_UNICODE, 0x004D)
	PR_ORIGINAL_AUTHOR_NAME_A                     = propTag(PT_STRING8, 0x004D)
	PR_ORIGINAL_SUBMIT_TIME                       = propTag(PT_SYSTIME, 0x004E)
	PR_REPLY_RECIPIENT_ENTRIES                    = propTag(PT_BINARY, 0x004F)
	PR_REPLY_RECIPIENT_NAMES                      = propTag(PT_TSTRING, 0x0050)
	PR_REPLY_RECIPIENT_NAMES_W                    = propTag(PT_UNICODE, 0x0050)
	PR_REPLY_RECIPIENT_NAMES_A                    = propTag(PT_STRING8, 0x0050)
	PR_RECEIVED_BY_SEARCH_KEY                     = propTag(PT_BINARY, 0x0051)
	PR_RCVD_REPRESENTING_SEARCH_KEY               = propTag(PT_BINARY, 0x0052)
	PR_READ_RECEIPT_SEARCH_KEY                    = propTag(PT_BINARY, 0x0053)
	PR_REPORT_SEARCH_KEY                          = propTag(PT_BINARY, 0x0054)
	PR_ORIGINAL_DELIVERY_TIME                     = propTag(PT_SYSTIME, 0x0055)
	PR_ORIGINAL_AUTHOR_SEARCH_KEY                 = propTag(PT_BINARY, 0x0056)
	PR_MESSAGE_TO_ME                              = propTag(PT_BOOLEAN, 0x0057)
	PR_MESSAGE_CC_ME                              = propTag(PT_BOOLEAN, 0x0058)
	PR_MESSAGE_RECIP_ME                           = propTag(PT_BOOLEAN, 0x0059)
	PR_ORIGINAL_SENDER_NAME                       = propTag(PT_TSTRING, 0x005A)
	PR_ORIGINAL_SENDER_NAME_W                     = propTag(PT_UNICODE, 0x005A)
	PR_ORIGINAL_SENDER_NAME_A                     = propTag(PT_STRING8, 0x005A)
	PR_ORIGINAL_SENDER_ENTRYID                    = propTag(PT_BINARY, 0x005B)
	PR_ORIGINAL_SENDER_SEARCH_KEY                 = propTag(PT_BINARY, 0x005C)
	PR_ORIGINAL_SENT_REPRESENTING_NAME            = propTag(PT_TSTRING, 0x005D)
	PR_ORIGINAL_SENT_REPRESENTING_NAME_W          = propTag(PT_UNICODE, 0x005D)
	PR_ORIGINAL_SENT_REPRESENTING_NAME_A          = propTag(PT_STRING8, 0x005D)
	PR_ORIGINAL_SENT_REPRESENTING_ENTRYID         = propTag(PT_BINARY, 0x005E)
	PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY      = propTag(PT_BINARY, 0x005F)
	PR_START_DATE                                 = propTag(PT_SYSTIME, 0x0060)
	PR_END_DATE                                   = propTag(PT_SYSTIME, 0x0061)
	PR_OWNER_APPT_ID                              = propTag(PT_LONG, 0x0062)
	PR_RESPONSE_REQUESTED                         = propTag(PT_BOOLEAN, 0x0063)
	PR_SENT_REPRESENTING_ADDRTYPE                 = propTag(PT_TSTRING, 0x0064)
	PR_SENT_REPRESENTING_ADDRTYPE_W               = propTag(PT_UNICODE, 0x0064)
	PR_SENT_REPRESENTING_ADDRTYPE_A               = propTag(PT_STRING8, 0x0064)
	PR_SENT_REPRESENTING_EMAIL_ADDRESS            = propTag(PT_TSTRING, 0x0065)
	PR_SENT_REPRESENTING_EMAIL_ADDRESS_W          = propTag(PT_UNICODE, 0x0065)
	PR_SENT_REPRESENTING_EMAIL_ADDRESS_A          = propTag(PT_STRING8, 0x0065)
	PR_ORIGINAL_SENDER_ADDRTYPE                   = propTag(PT_TSTRING, 0x0066)
	PR_ORIGINAL_SENDER_ADDRTYPE_W                 = propTag(PT_UNICODE, 0x0066)
	PR_ORIGINAL_SENDER_ADDRTYPE_A                 = propTag(PT_STRING8, 0x0066)
	PR_ORIGINAL_SENDER_EMAIL_ADDRESS              = propTag(PT_TSTRING, 0x0067)
	PR_ORIGINAL_SENDER_EMAIL_ADDRESS_W            = propTag(PT_UNICODE, 0x0067)
	PR_ORIGINAL_SENDER_EMAIL_ADDRESS_A            = propTag(PT_STRING8, 0x0067)
	PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE        = propTag(PT_TSTRING, 0x0068)
	PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_W      = propTag(PT_UNICODE, 0x0068)
	PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_A      = propTag(PT_STRING8, 0x0068)
	PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS   = propTag(PT_TSTRING, 0x0069)
	PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_W = propTag(PT_UNICODE, 0x0069)
	PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_A = propTag(PT_STRING8, 0x0069)
	PR_CONVERSATION_TOPIC                         = propTag(PT_TSTRING, 0x0070)
	PR_CONVERSATION_TOPIC_W                       = propTag(PT_UNICODE, 0x0070)
	PR_CONVERSATION_TOPIC_A                       = propTag(PT_STRING8, 0x0070)
	PR_CONVERSATION_INDEX                         = propTag(PT_BINARY, 0x0071)
	PR_ORIGINAL_DISPLAY_BCC                       = propTag(PT_TSTRING, 0x0072)
	PR_ORIGINAL_DISPLAY_BCC_W                     = propTag(PT_UNICODE, 0x0072)
	PR_ORIGINAL_DISPLAY_BCC_A                     = propTag(PT_STRING8, 0x0072)
	PR_ORIGINAL_DISPLAY_CC                        = propTag(PT_TSTRING, 0x0073)
	PR_ORIGINAL_DISPLAY_CC_W                      = propTag(PT_UNICODE, 0x0073)
	PR_ORIGINAL_DISPLAY_CC_A                      = propTag(PT_STRING8, 0x0073)
	PR_ORIGINAL_DISPLAY_TO                        = propTag(PT_TSTRING, 0x0074)
	PR_ORIGINAL_DISPLAY_TO_W                      = propTag(PT_UNICODE, 0x0074)
	PR_ORIGINAL_DISPLAY_TO_A                      = propTag(PT_STRING8, 0x0074)
	PR_RECEIVED_BY_ADDRTYPE                       = propTag(PT_TSTRING, 0x0075)
	PR_RECEIVED_BY_ADDRTYPE_W                     = propTag(PT_UNICODE, 0x0075)
	PR_RECEIVED_BY_ADDRTYPE_A                     = propTag(PT_STRING8, 0x0075)
	PR_RECEIVED_BY_EMAIL_ADDRESS                  = propTag(PT_TSTRING, 0x0076)
	PR_RECEIVED_BY_EMAIL_ADDRESS_W                = propTag(PT_UNICODE, 0x0076)
	PR_RECEIVED_BY_EMAIL_ADDRESS_A                = propTag(PT_STRING8, 0x0076)
	PR_RCVD_REPRESENTING_ADDRTYPE                 = propTag(PT_TSTRING, 0x0077)
	PR_RCVD_REPRESENTING_ADDRTYPE_W               = propTag(PT_UNICODE, 0x0077)
	PR_RCVD_REPRESENTING_ADDRTYPE_A               = propTag(PT_STRING8, 0x0077)
	PR_RCVD_REPRESENTING_EMAIL_ADDRESS            = propTag(PT_TSTRING, 0x0078)
	PR_RCVD_REPRESENTING_EMAIL_ADDRESS_W          = propTag(PT_UNICODE, 0x0078)
	PR_RCVD_REPRESENTING_EMAIL_ADDRESS_A          = propTag(PT_STRING8, 0x0078)
	PR_ORIGINAL_AUTHOR_ADDRTYPE                   = propTag(PT_TSTRING, 0x0079)
	PR_ORIGINAL_AUTHOR_ADDRTYPE_W                 = propTag(PT_UNICODE, 0x0079)
	PR_ORIGINAL_AUTHOR_ADDRTYPE_A                 = propTag(PT_STRING8, 0x0079)
	PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS              = propTag(PT_TSTRING, 0x007A)
	PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_W            = propTag(PT_UNICODE, 0x007A)
	PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_A            = propTag(PT_STRING8, 0x007A)
	PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE         = propTag(PT_TSTRING, 0x007B)
	PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_W       = propTag(PT_UNICODE, 0x007B)
	PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_A       = propTag(PT_STRING8, 0x007B)
	PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS    = propTag(PT_TSTRING, 0x007C)
	PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_W  = propTag(PT_UNICODE, 0x007C)
	PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_A  = propTag(PT_STRING8, 0x007C)
	PR_TRANSPORT_MESSAGE_HEADERS                  = propTag(PT_TSTRING, 0x007D)
	PR_TRANSPORT_MESSAGE_HEADERS_W                = propTag(PT_UNICODE, 0x007D)
	PR_TRANSPORT_MESSAGE_HEADERS_A                = propTag(PT_STRING8, 0x007D)
	PR_DELEGATION                                 = propTag(PT_BINARY, 0x007E)
	PR_TNEF_CORRELATION_KEY                       = propTag(PT_BINARY, 0x007F)
	PR_BODY                                       = propTag(PT_TSTRING, 0x1000)
	PR_BODY_W                                     = propTag(PT_UNICODE, 0x1000)
	PR_BODY_A                                     = propTag(PT_STRING8, 0x1000)
	PR_REPORT_TEXT                                = propTag(PT_TSTRING, 0x1001)
	PR_REPORT_TEXT_W                              = propTag(PT_UNICODE, 0x1001)
	PR_REPORT_TEXT_A                              = propTag(PT_STRING8, 0x1001)
	PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY        = propTag(PT_BINARY, 0x1002)
	PR_REPORTING_DL_NAME                          = propTag(PT_BINARY, 0x1003)
	PR_REPORTING_MTA_CERTIFICATE                  = propTag(PT_BINARY, 0x1004)
	PR_RTF_SYNC_BODY_CRC                          = propTag(PT_LONG, 0x1006)
	PR_RTF_SYNC_BODY_COUNT                        = propTag(PT_LONG, 0x1007)
	PR_RTF_SYNC_BODY_TAG                          = propTag(PT_TSTRING, 0x1008)
	PR_RTF_SYNC_BODY_TAG_W                        = propTag(PT_UNICODE, 0x1008)
	PR_RTF_SYNC_BODY_TAG_A                        = propTag(PT_STRING8, 0x1008)
	PR_RTF_COMPRESSED                             = propTag(PT_BINARY, 0x1009)
	PR_RTF_SYNC_PREFIX_COUNT                      = propTag(PT_LONG, 0x1010)
	PR_RTF_SYNC_TRAILING_COUNT                    = propTag(PT_LONG, 0x1011)
	PR_ORIGINALLY_INTENDED_RECIP_ENTRYID          = propTag(PT_BINARY, 0x1012)
	PR_BLOCK_STATUS                               = propTag(PT_LONG, 0x1096)
	PR_CONTENT_INTEGRITY_CHECK                    = propTag(PT_BINARY, 0x0C00)
	PR_EXPLICIT_CONVERSION                        = propTag(PT_LONG, 0x0C01)
	PR_IPM_RETURN_REQUESTED                       = propTag(PT_BOOLEAN, 0x0C02)
	PR_MESSAGE_TOKEN                              = propTag(PT_BINARY, 0x0C03)
	PR_NDR_REASON_CODE                            = propTag(PT_LONG, 0x0C04)
	PR_NDR_DIAG_CODE                              = propTag(PT_LONG, 0x0C05)
	PR_NON_RECEIPT_NOTIFICATION_REQUESTED         = propTag(PT_BOOLEAN, 0x0C06)
	PR_DELIVERY_POINT                             = propTag(PT_LONG, 0x0C07)
	PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED   = propTag(PT_BOOLEAN, 0x0C08)
	PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT   = propTag(PT_BINARY, 0x0C09)
	PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY      = propTag(PT_BOOLEAN, 0x0C0A)
	PR_PHYSICAL_DELIVERY_MODE                     = propTag(PT_LONG, 0x0C0B)
	PR_PHYSICAL_DELIVERY_REPORT_REQUEST           = propTag(PT_LONG, 0x0C0C)
	PR_PHYSICAL_FORWARDING_ADDRESS                = propTag(PT_BINARY, 0x0C0D)
	PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED      = propTag(PT_BOOLEAN, 0x0C0E)
	PR_PHYSICAL_FORWARDING_PROHIBITED             = propTag(PT_BOOLEAN, 0x0C0F)
	PR_PHYSICAL_RENDITION_ATTRIBUTES              = propTag(PT_BINARY, 0x0C10)
	PR_PROOF_OF_DELIVERY                          = propTag(PT_BINARY, 0x0C11)
	PR_PROOF_OF_DELIVERY_REQUESTED                = propTag(PT_BOOLEAN, 0x0C12)
	PR_RECIPIENT_CERTIFICATE                      = propTag(PT_BINARY, 0x0C13)
	PR_RECIPIENT_NUMBER_FOR_ADVICE                = propTag(PT_TSTRING, 0x0C14)
	PR_RECIPIENT_NUMBER_FOR_ADVICE_W              = propTag(PT_UNICODE, 0x0C14)
	PR_RECIPIENT_NUMBER_FOR_ADVICE_A              = propTag(PT_STRING8, 0x0C14)
	PR_RECIPIENT_TYPE                             = propTag(PT_LONG, 0x0C15)
	PR_REGISTERED_MAIL_TYPE                       = propTag(PT_LONG, 0x0C16)
	PR_REPLY_REQUESTED                            = propTag(PT_BOOLEAN, 0x0C17)
	PR_REQUESTED_DELIVERY_METHOD                  = propTag(PT_LONG, 0x0C18)
	PR_SENDER_ENTRYID                             = propTag(PT_BINARY, 0x0C19)
	PR_SENDER_NAME                                = propTag(PT_TSTRING, 0x0C1A)
	PR_SENDER_NAME_W                              = propTag(PT_UNICODE, 0x0C1A)
	PR_SENDER_NAME_A                              = propTag(PT_STRING8, 0x0C1A)
	PR_SUPPLEMENTARY_INFO                         = propTag(PT_TSTRING, 0x0C1B)
	PR_SUPPLEMENTARY_INFO_W                       = propTag(PT_UNICODE, 0x0C1B)
	PR_SUPPLEMENTARY_INFO_A                       = propTag(PT_STRING8, 0x0C1B)
	PR_TYPE_OF_MTS_USER                           = propTag(PT_LONG, 0x0C1C)
	PR_SENDER_SEARCH_KEY                          = propTag(PT_BINARY, 0x0C1D)
	PR_SENDER_ADDRTYPE                            = propTag(PT_TSTRING, 0x0C1E)
	PR_SENDER_ADDRTYPE_W                          = propTag(PT_UNICODE, 0x0C1E)
	PR_SENDER_ADDRTYPE_A                          = propTag(PT_STRING8, 0x0C1E)
	PR_SENDER_EMAIL_ADDRESS                       = propTag(PT_TSTRING, 0x0C1F)
	PR_SENDER_EMAIL_ADDRESS_W                     = propTag(PT_UNICODE, 0x0C1F)
	PR_SENDER_EMAIL_ADDRESS_A                     = propTag(PT_STRING8, 0x0C1F)
	PR_CURRENT_VERSION                            = propTag(PT_I8, 0x0E00)
	PR_DELETE_AFTER_SUBMIT                        = propTag(PT_BOOLEAN, 0x0E01)
	PR_DISPLAY_BCC                                = propTag(PT_TSTRING, 0x0E02)
	PR_DISPLAY_BCC_W                              = propTag(PT_UNICODE, 0x0E02)
	PR_DISPLAY_BCC_A                              = propTag(PT_STRING8, 0x0E02)
	PR_DISPLAY_CC                                 = propTag(PT_TSTRING, 0x0E03)
	PR_DISPLAY_CC_W                               = propTag(PT_UNICODE, 0x0E03)
	PR_DISPLAY_CC_A                               = propTag(PT_STRING8, 0x0E03)
	PR_DISPLAY_TO                                 = propTag(PT_TSTRING, 0x0E04)
	PR_DISPLAY_TO_W                               = propTag(PT_UNICODE, 0x0E04)
	PR_DISPLAY_TO_A                               = propTag(PT_STRING8, 0x0E04)
	PR_PARENT_DISPLAY                             = propTag(PT_TSTRING, 0x0E05)
	PR_PARENT_DISPLAY_W                           = propTag(PT_UNICODE, 0x0E05)
	PR_PARENT_DISPLAY_A                           = propTag(PT_STRING8, 0x0E05)
	PR_MESSAGE_DELIVERY_TIME                      = propTag(PT_SYSTIME, 0x0E06)
	PR_MESSAGE_FLAGS                              = propTag(PT_LONG, 0x0E07)
	PR_MESSAGE_SIZE                               = propTag(PT_LONG, 0x0E08)
	PR_PARENT_ENTRYID                             = propTag(PT_BINARY, 0x0E09)
	PR_SENTMAIL_ENTRYID                           = propTag(PT_BINARY, 0x0E0A)
	PR_CORRELATE                                  = propTag(PT_BOOLEAN, 0x0E0C)
	PR_CORRELATE_MTSID                            = propTag(PT_BINARY, 0x0E0D)
	PR_DISCRETE_VALUES                            = propTag(PT_BOOLEAN, 0x0E0E)
	PR_RESPONSIBILITY                             = propTag(PT_BOOLEAN, 0x0E0F)
	PR_SPOOLER_STATUS                             = propTag(PT_LONG, 0x0E10)
	PR_TRANSPORT_STATUS                           = propTag(PT_LONG, 0x0E11)
	PR_MESSAGE_RECIPIENTS                         = propTag(PT_OBJECT, 0x0E12)
	PR_MESSAGE_ATTACHMENTS                        = propTag(PT_OBJECT, 0x0E13)
	PR_SUBMIT_FLAGS                               = propTag(PT_LONG, 0x0E14)
	PR_RECIPIENT_STATUS                           = propTag(PT_LONG, 0x0E15)
	PR_TRANSPORT_KEY                              = propTag(PT_LONG, 0x0E16)
	PR_MSG_STATUS                                 = propTag(PT_LONG, 0x0E17)
	PR_MESSAGE_DOWNLOAD_TIME                      = propTag(PT_LONG, 0x0E18)
	PR_CREATION_VERSION                           = propTag(PT_I8, 0x0E19)
	PR_MODIFY_VERSION                             = propTag(PT_I8, 0x0E1A)
	PR_HASATTACH                                  = propTag(PT_BOOLEAN, 0x0E1B)
	PR_BODY_CRC                                   = propTag(PT_LONG, 0x0E1C)
	PR_NORMALIZED_SUBJECT                         = propTag(PT_TSTRING, 0x0E1D)
	PR_NORMALIZED_SUBJECT_W                       = propTag(PT_UNICODE, 0x0E1D)
	PR_NORMALIZED_SUBJECT_A                       = propTag(PT_STRING8, 0x0E1D)
	PR_RTF_IN_SYNC                                = propTag(PT_BOOLEAN, 0x0E1F)
	PR_ATTACH_SIZE                                = propTag(PT_LONG, 0x0E20)
	PR_ATTACH_NUM                                 = propTag(PT_LONG, 0x0E21)
	PR_PREPROCESS                                 = propTag(PT_BOOLEAN, 0x0E22)
	PR_ORIGINATING_MTA_CERTIFICATE                = propTag(PT_BINARY, 0x0E25)
	PR_PROOF_OF_SUBMISSION                        = propTag(PT_BINARY, 0x0E26)
	PR_ENTRYID                                    = propTag(PT_BINARY, 0x0FFF)
	PR_OBJECT_TYPE                                = propTag(PT_LONG, 0x0FFE)
	PR_ICON                                       = propTag(PT_BINARY, 0x0FFD)
	PR_MINI_ICON                                  = propTag(PT_BINARY, 0x0FFC)
	PR_STORE_ENTRYID                              = propTag(PT_BINARY, 0x0FFB)
	PR_STORE_RECORD_KEY                           = propTag(PT_BINARY, 0x0FFA)
	PR_RECORD_KEY                                 = propTag(PT_BINARY, 0x0FF9)
	PR_MAPPING_SIGNATURE                          = propTag(PT_BINARY, 0x0FF8)
	PR_ACCESS_LEVEL                               = propTag(PT_LONG, 0x0FF7)
	PR_INSTANCE_KEY                               = propTag(PT_BINARY, 0x0FF6)
	PR_ROW_TYPE                                   = propTag(PT_LONG, 0x0FF5)
	PR_ACCESS                                     = propTag(PT_LONG, 0x0FF4)
	PR_ROWID                                      = propTag(PT_LONG, 0x3000)
	PR_DISPLAY_NAME                               = propTag(PT_TSTRING, 0x3001)
	PR_DISPLAY_NAME_W                             = propTag(PT_UNICODE, 0x3001)
	PR_DISPLAY_NAME_A                             = propTag(PT_STRING8, 0x3001)
	PR_ADDRTYPE                                   = propTag(PT_TSTRING, 0x3002)
	PR_ADDRTYPE_W                                 = propTag(PT_UNICODE, 0x3002)
	PR_ADDRTYPE_A                                 = propTag(PT_STRING8, 0x3002)
	PR_EMAIL_ADDRESS                              = propTag(PT_TSTRING, 0x3003)
	PR_EMAIL_ADDRESS_W                            = propTag(PT_UNICODE, 0x3003)
	PR_EMAIL_ADDRESS_A                            = propTag(PT_STRING8, 0x3003)
	PR_COMMENT                                    = propTag(PT_TSTRING, 0x3004)
	PR_COMMENT_W                                  = propTag(PT_UNICODE, 0x3004)
	PR_COMMENT_A                                  = propTag(PT_STRING8, 0x3004)
	PR_DEPTH                                      = propTag(PT_LONG, 0x3005)
	PR_PROVIDER_DISPLAY                           = propTag(PT_TSTRING, 0x3006)
	PR_PROVIDER_DISPLAY_W                         = propTag(PT_UNICODE, 0x3006)
	PR_PROVIDER_DISPLAY_A                         = propTag(PT_STRING8, 0x3006)
	PR_CREATION_TIME                              = propTag(PT_SYSTIME, 0x3007)
	PR_LAST_MODIFICATION_TIME                     = propTag(PT_SYSTIME, 0x3008)
	PR_RESOURCE_FLAGS                             = propTag(PT_LONG, 0x3009)
	PR_PROVIDER_DLL_NAME                          = propTag(PT_TSTRING, 0x300A)
	PR_PROVIDER_DLL_NAME_W                        = propTag(PT_UNICODE, 0x300A)
	PR_PROVIDER_DLL_NAME_A                        = propTag(PT_STRING8, 0x300A)
	PR_SEARCH_KEY                                 = propTag(PT_BINARY, 0x300B)
	PR_PROVIDER_UID                               = propTag(PT_BINARY, 0x300C)
	PR_PROVIDER_ORDINAL                           = propTag(PT_LONG, 0x300D)
	PR_SORT_POSITION                              = propTag(PT_BINARY, 0x3020)
	PR_SORT_PARENTID                              = propTag(PT_BINARY, 0x3021)
	PR_FORM_VERSION                               = propTag(PT_TSTRING, 0x3301)
	PR_FORM_VERSION_W                             = propTag(PT_UNICODE, 0x3301)
	PR_FORM_VERSION_A                             = propTag(PT_STRING8, 0x3301)
	PR_FORM_CLSID                                 = propTag(PT_CLSID, 0x3302)
	PR_FORM_CONTACT_NAME                          = propTag(PT_TSTRING, 0x3303)
	PR_FORM_CONTACT_NAME_W                        = propTag(PT_UNICODE, 0x3303)
	PR_FORM_CONTACT_NAME_A                        = propTag(PT_STRING8, 0x3303)
	PR_FORM_CATEGORY                              = propTag(PT_TSTRING, 0x3304)
	PR_FORM_CATEGORY_W                            = propTag(PT_UNICODE, 0x3304)
	PR_FORM_CATEGORY_A                            = propTag(PT_STRING8, 0x3304)
	PR_FORM_CATEGORY_SUB                          = propTag(PT_TSTRING, 0x3305)
	PR_FORM_CATEGORY_SUB_W                        = propTag(PT_UNICODE, 0x3305)
	PR_FORM_CATEGORY_SUB_A                        = propTag(PT_STRING8, 0x3305)
	PR_FORM_HOST_MAP                              = propTag(PT_MV_LONG, 0x3306)
	PR_FORM_HIDDEN                                = propTag(PT_BOOLEAN, 0x3307)
	PR_FORM_DESIGNER_NAME                         = propTag(PT_TSTRING, 0x3308)
	PR_FORM_DESIGNER_NAME_W                       = propTag(PT_UNICODE, 0x3308)
	PR_FORM_DESIGNER_NAME_A                       = propTag(PT_STRING8, 0x3308)
	PR_FORM_DESIGNER_GUID                         = propTag(PT_CLSID, 0x3309)
	PR_FORM_MESSAGE_BEHAVIOR                      = propTag(PT_LONG, 0x330A)
	PR_DEFAULT_STORE                              = propTag(PT_BOOLEAN, 0x3400)
	PR_STORE_SUPPORT_MASK                         = propTag(PT_LONG, 0x340D)
	PR_STORE_STATE                                = propTag(PT_LONG, 0x340E)
	PR_IPM_SUBTREE_SEARCH_KEY                     = propTag(PT_BINARY, 0x3410)
	PR_IPM_OUTBOX_SEARCH_KEY                      = propTag(PT_BINARY, 0x3411)
	PR_IPM_WASTEBASKET_SEARCH_KEY                 = propTag(PT_BINARY, 0x3412)
	PR_IPM_SENTMAIL_SEARCH_KEY                    = propTag(PT_BINARY, 0x3413)
	PR_MDB_PROVIDER                               = propTag(PT_BINARY, 0x3414)
	PR_RECEIVE_FOLDER_SETTINGS                    = propTag(PT_OBJECT, 0x3415)
	PR_VALID_FOLDER_MASK                          = propTag(PT_LONG, 0x35DF)
	PR_IPM_SUBTREE_ENTRYID                        = propTag(PT_BINARY, 0x35E0)
	PR_IPM_OUTBOX_ENTRYID                         = propTag(PT_BINARY, 0x35E2)
	PR_IPM_WASTEBASKET_ENTRYID                    = propTag(PT_BINARY, 0x35E3)
	PR_IPM_SENTMAIL_ENTRYID                       = propTag(PT_BINARY, 0x35E4)
	PR_VIEWS_ENTRYID                              = propTag(PT_BINARY, 0x35E5)
	PR_COMMON_VIEWS_ENTRYID                       = propTag(PT_BINARY, 0x35E6)
	PR_FINDER_ENTRYID                             = propTag(PT_BINARY, 0x35E7)
	PR_CONTAINER_FLAGS                            = propTag(PT_LONG, 0x3600)
	PR_FOLDER_TYPE                                = propTag(PT_LONG, 0x3601)
	PR_CONTENT_COUNT                              = propTag(PT_LONG, 0x3602)
	PR_CONTENT_UNREAD                             = propTag(PT_LONG, 0x3603)
	PR_CREATE_TEMPLATES                           = propTag(PT_OBJECT, 0x3604)
	PR_DETAILS_TABLE                              = propTag(PT_OBJECT, 0x3605)
	PR_SEARCH                                     = propTag(PT_OBJECT, 0x3607)
	PR_SELECTABLE                                 = propTag(PT_BOOLEAN, 0x3609)
	PR_SUBFOLDERS                                 = propTag(PT_BOOLEAN, 0x360A)
	PR_STATUS                                     = propTag(PT_LONG, 0x360B)
	PR_ANR                                        = propTag(PT_TSTRING, 0x360C)
	PR_ANR_W                                      = propTag(PT_UNICODE, 0x360C)
	PR_ANR_A                                      = propTag(PT_STRING8, 0x360C)
	PR_CONTENTS_SORT_ORDER                        = propTag(PT_MV_LONG, 0x360D)
	PR_CONTAINER_HIERARCHY                        = propTag(PT_OBJECT, 0x360E)
	PR_CONTAINER_CONTENTS                         = propTag(PT_OBJECT, 0x360F)
	PR_FOLDER_ASSOCIATED_CONTENTS                 = propTag(PT_OBJECT, 0x3610)
	PR_DEF_CREATE_DL                              = propTag(PT_BINARY, 0x3611)
	PR_DEF_CREATE_MAILUSER                        = propTag(PT_BINARY, 0x3612)
	PR_CONTAINER_CLASS                            = propTag(PT_TSTRING, 0x3613)
	PR_CONTAINER_CLASS_W                          = propTag(PT_UNICODE, 0x3613)
	PR_CONTAINER_CLASS_A                          = propTag(PT_STRING8, 0x3613)
	PR_CONTAINER_MODIFY_VERSION                   = propTag(PT_I8, 0x3614)
	PR_AB_PROVIDER_ID                             = propTag(PT_BINARY, 0x3615)
	PR_DEFAULT_VIEW_ENTRYID                       = propTag(PT_BINARY, 0x3616)
	PR_ASSOC_CONTENT_COUNT                        = propTag(PT_LONG, 0x3617)
	PR_ATTACHMENT_X400_PARAMETERS                 = propTag(PT_BINARY, 0x3700)
	PR_ATTACH_DATA_OBJ                            = propTag(PT_OBJECT, 0x3701)
	PR_ATTACH_DATA_BIN                            = propTag(PT_BINARY, 0x3701)
	PR_ATTACH_ENCODING                            = propTag(PT_BINARY, 0x3702)
	PR_ATTACH_EXTENSION                           = propTag(PT_TSTRING, 0x3703)
	PR_ATTACH_EXTENSION_W                         = propTag(PT_UNICODE, 0x3703)
	PR_ATTACH_EXTENSION_A                         = propTag(PT_STRING8, 0x3703)
	PR_ATTACH_FILENAME                            = propTag(PT_TSTRING, 0x3704)
	PR_ATTACH_FILENAME_W                          = propTag(PT_UNICODE, 0x3704)
	PR_ATTACH_FILENAME_A                          = propTag(PT_STRING8, 0x3704)
	PR_ATTACH_METHOD                              = propTag(PT_LONG, 0x3705)
	PR_ATTACH_LONG_FILENAME                       = propTag(PT_TSTRING, 0x3707)
	PR_ATTACH_LONG_FILENAME_W                     = propTag(PT_UNICODE, 0x3707)
	PR_ATTACH_LONG_FILENAME_A                     = propTag(PT_STRING8, 0x3707)
	PR_ATTACH_PATHNAME                            = propTag(PT_TSTRING, 0x3708)
	PR_ATTACH_PATHNAME_W                          = propTag(PT_UNICODE, 0x3708)
	PR_ATTACH_PATHNAME_A                          = propTag(PT_STRING8, 0x3708)
	PR_ATTACH_RENDERING                           = propTag(PT_BINARY, 0x3709)
	PR_ATTACH_TAG                                 = propTag(PT_BINARY, 0x370A)
	PR_RENDERING_POSITION                         = propTag(PT_LONG, 0x370B)
	PR_ATTACH_TRANSPORT_NAME                      = propTag(PT_TSTRING, 0x370C)
	PR_ATTACH_TRANSPORT_NAME_W                    = propTag(PT_UNICODE, 0x370C)
	PR_ATTACH_TRANSPORT_NAME_A                    = propTag(PT_STRING8, 0x370C)
	PR_ATTACH_LONG_PATHNAME                       = propTag(PT_TSTRING, 0x370D)
	PR_ATTACH_LONG_PATHNAME_W                     = propTag(PT_UNICODE, 0x370D)
	PR_ATTACH_LONG_PATHNAME_A                     = propTag(PT_STRING8, 0x370D)
	PR_ATTACH_MIME_TAG                            = propTag(PT_TSTRING, 0x370E)
	PR_ATTACH_MIME_TAG_W                          = propTag(PT_UNICODE, 0x370E)
	PR_ATTACH_MIME_TAG_A                          = propTag(PT_STRING8, 0x370E)
	PR_ATTACH_ADDITIONAL_INFO                     = propTag(PT_BINARY, 0x370F)
	PR_DISPLAY_TYPE                               = propTag(PT_LONG, 0x3900)
	PR_TEMPLATEID                                 = propTag(PT_BINARY, 0x3902)
	PR_PRIMARY_CAPABILITY                         = propTag(PT_BINARY, 0x3904)
	PR_7BIT_DISPLAY_NAME                          = propTag(PT_STRING8, 0x39FF)
	PR_ACCOUNT                                    = propTag(PT_TSTRING, 0x3A00)
	PR_ACCOUNT_W                                  = propTag(PT_UNICODE, 0x3A00)
	PR_ACCOUNT_A                                  = propTag(PT_STRING8, 0x3A00)
	PR_ALTERNATE_RECIPIENT                        = propTag(PT_BINARY, 0x3A01)
	PR_CALLBACK_TELEPHONE_NUMBER                  = propTag(PT_TSTRING, 0x3A02)
	PR_CALLBACK_TELEPHONE_NUMBER_W                = propTag(PT_UNICODE, 0x3A02)
	PR_CALLBACK_TELEPHONE_NUMBER_A                = propTag(PT_STRING8, 0x3A02)
	PR_CONVERSION_PROHIBITED                      = propTag(PT_BOOLEAN, 0x3A03)
	PR_DISCLOSE_RECIPIENTS                        = propTag(PT_BOOLEAN, 0x3A04)
	PR_GENERATION                                 = propTag(PT_TSTRING, 0x3A05)
	PR_GENERATION_W                               = propTag(PT_UNICODE, 0x3A05)
	PR_GENERATION_A                               = propTag(PT_STRING8, 0x3A05)
	PR_GIVEN_NAME                                 = propTag(PT_TSTRING, 0x3A06)
	PR_GIVEN_NAME_W                               = propTag(PT_UNICODE, 0x3A06)
	PR_GIVEN_NAME_A                               = propTag(PT_STRING8, 0x3A06)
	PR_GOVERNMENT_ID_NUMBER                       = propTag(PT_TSTRING, 0x3A07)
	PR_GOVERNMENT_ID_NUMBER_W                     = propTag(PT_UNICODE, 0x3A07)
	PR_GOVERNMENT_ID_NUMBER_A                     = propTag(PT_STRING8, 0x3A07)
	PR_BUSINESS_TELEPHONE_NUMBER                  = propTag(PT_TSTRING, 0x3A08)
	PR_BUSINESS_TELEPHONE_NUMBER_W                = propTag(PT_UNICODE, 0x3A08)
	PR_BUSINESS_TELEPHONE_NUMBER_A                = propTag(PT_STRING8, 0x3A08)
	PR_HOME_TELEPHONE_NUMBER                      = propTag(PT_TSTRING, 0x3A09)
	PR_HOME_TELEPHONE_NUMBER_W                    = propTag(PT_UNICODE, 0x3A09)
	PR_HOME_TELEPHONE_NUMBER_A                    = propTag(PT_STRING8, 0x3A09)
	PR_INITIALS                                   = propTag(PT_TSTRING, 0x3A0A)
	PR_INITIALS_W                                 = propTag(PT_UNICODE, 0x3A0A)
	PR_INITIALS_A                                 = propTag(PT_STRING8, 0x3A0A)
	PR_KEYWORD                                    = propTag(PT_TSTRING, 0x3A0B)
	PR_KEYWORD_W                                  = propTag(PT_UNICODE, 0x3A0B)
	PR_KEYWORD_A                                  = propTag(PT_STRING8, 0x3A0B)
	PR_LANGUAGE                                   = propTag(PT_TSTRING, 0x3A0C)
	PR_LANGUAGE_W                                 = propTag(PT_UNICODE, 0x3A0C)
	PR_LANGUAGE_A                                 = propTag(PT_STRING8, 0x3A0C)
	PR_LOCATION                                   = propTag(PT_TSTRING, 0x3A0D)
	PR_LOCATION_W                                 = propTag(PT_UNICODE, 0x3A0D)
	PR_LOCATION_A                                 = propTag(PT_STRING8, 0x3A0D)
	PR_MAIL_PERMISSION                            = propTag(PT_BOOLEAN, 0x3A0E)
	PR_MHS_COMMON_NAME                            = propTag(PT_TSTRING, 0x3A0F)
	PR_MHS_COMMON_NAME_W                          = propTag(PT_UNICODE, 0x3A0F)
	PR_MHS_COMMON_NAME_A                          = propTag(PT_STRING8, 0x3A0F)
	PR_ORGANIZATIONAL_ID_NUMBER                   = propTag(PT_TSTRING, 0x3A10)
	PR_ORGANIZATIONAL_ID_NUMBER_W                 = propTag(PT_UNICODE, 0x3A10)
	PR_ORGANIZATIONAL_ID_NUMBER_A                 = propTag(PT_STRING8, 0x3A10)
	PR_SURNAME                                    = propTag(PT_TSTRING, 0x3A11)
	PR_SURNAME_W                                  = propTag(PT_UNICODE, 0x3A11)
	PR_SURNAME_A                                  = propTag(PT_STRING8, 0x3A11)
	PR_ORIGINAL_ENTRYID                           = propTag(PT_BINARY, 0x3A12)
	PR_ORIGINAL_DISPLAY_NAME                      = propTag(PT_TSTRING, 0x3A13)
	PR_ORIGINAL_DISPLAY_NAME_W                    = propTag(PT_UNICODE, 0x3A13)
	PR_ORIGINAL_DISPLAY_NAME_A                    = propTag(PT_STRING8, 0x3A13)
	PR_ORIGINAL_SEARCH_KEY                        = propTag(PT_BINARY, 0x3A14)
	PR_POSTAL_ADDRESS                             = propTag(PT_TSTRING, 0x3A15)
	PR_POSTAL_ADDRESS_W                           = propTag(PT_UNICODE, 0x3A15)
	PR_POSTAL_ADDRESS_A                           = propTag(PT_STRING8, 0x3A15)
	PR_COMPANY_NAME                               = propTag(PT_TSTRING, 0x3A16)
	PR_COMPANY_NAME_W                             = propTag(PT_UNICODE, 0x3A16)
	PR_COMPANY_NAME_A                             = propTag(PT_STRING8, 0x3A16)
	PR_TITLE                                      = propTag(PT_TSTRING, 0x3A17)
	PR_TITLE_W                                    = propTag(PT_UNICODE, 0x3A17)
	PR_TITLE_A                                    = propTag(PT_STRING8, 0x3A17)
	PR_DEPARTMENT_NAME                            = propTag(PT_TSTRING, 0x3A18)
	PR_DEPARTMENT_NAME_W                          = propTag(PT_UNICODE, 0x3A18)
	PR_DEPARTMENT_NAME_A                          = propTag(PT_STRING8, 0x3A18)
	PR_OFFICE_LOCATION                            = propTag(PT_TSTRING, 0x3A19)
	PR_OFFICE_LOCATION_W                          = propTag(PT_UNICODE, 0x3A19)
	PR_OFFICE_LOCATION_A                          = propTag(PT_STRING8, 0x3A19)
	PR_PRIMARY_TELEPHONE_NUMBER                   = propTag(PT_TSTRING, 0x3A1A)
	PR_PRIMARY_TELEPHONE_NUMBER_W                 = propTag(PT_UNICODE, 0x3A1A)
	PR_PRIMARY_TELEPHONE_NUMBER_A                 = propTag(PT_STRING8, 0x3A1A)
	PR_BUSINESS2_TELEPHONE_NUMBER                 = propTag(PT_TSTRING, 0x3A1B)
	PR_BUSINESS2_TELEPHONE_NUMBER_W               = propTag(PT_UNICODE, 0x3A1B)
	PR_BUSINESS2_TELEPHONE_NUMBER_A               = propTag(PT_STRING8, 0x3A1B)
	PR_MOBILE_TELEPHONE_NUMBER                    = propTag(PT_TSTRING, 0x3A1C)
	PR_MOBILE_TELEPHONE_NUMBER_W                  = propTag(PT_UNICODE, 0x3A1C)
	PR_MOBILE_TELEPHONE_NUMBER_A                  = propTag(PT_STRING8, 0x3A1C)
	PR_RADIO_TELEPHONE_NUMBER                     = propTag(PT_TSTRING, 0x3A1D)
	PR_RADIO_TELEPHONE_NUMBER_W                   = propTag(PT_UNICODE, 0x3A1D)
	PR_RADIO_TELEPHONE_NUMBER_A                   = propTag(PT_STRING8, 0x3A1D)
	PR_CAR_TELEPHONE_NUMBER                       = propTag(PT_TSTRING, 0x3A1E)
	PR_CAR_TELEPHONE_NUMBER_W                     = propTag(PT_UNICODE, 0x3A1E)
	PR_CAR_TELEPHONE_NUMBER_A                     = propTag(PT_STRING8, 0x3A1E)
	PR_OTHER_TELEPHONE_NUMBER                     = propTag(PT_TSTRING, 0x3A1F)
	PR_OTHER_TELEPHONE_NUMBER_W                   = propTag(PT_UNICODE, 0x3A1F)
	PR_OTHER_TELEPHONE_NUMBER_A                   = propTag(PT_STRING8, 0x3A1F)
	PR_TRANSMITABLE_DISPLAY_NAME                  = propTag(PT_TSTRING, 0x3A20)
	PR_TRANSMITABLE_DISPLAY_NAME_W                = propTag(PT_UNICODE, 0x3A20)
	PR_TRANSMITABLE_DISPLAY_NAME_A                = propTag(PT_STRING8, 0x3A20)
	PR_PAGER_TELEPHONE_NUMBER                     = propTag(PT_TSTRING, 0x3A21)
	PR_PAGER_TELEPHONE_NUMBER_W                   = propTag(PT_UNICODE, 0x3A21)
	PR_PAGER_TELEPHONE_NUMBER_A                   = propTag(PT_STRING8, 0x3A21)
	PR_USER_CERTIFICATE                           = propTag(PT_BINARY, 0x3A22)
	PR_PRIMARY_FAX_NUMBER                         = propTag(PT_TSTRING, 0x3A23)
	PR_PRIMARY_FAX_NUMBER_W                       = propTag(PT_UNICODE, 0x3A23)
	PR_PRIMARY_FAX_NUMBER_A                       = propTag(PT_STRING8, 0x3A23)
	PR_BUSINESS_FAX_NUMBER                        = propTag(PT_TSTRING, 0x3A24)
	PR_BUSINESS_FAX_NUMBER_W                      = propTag(PT_UNICODE, 0x3A24)
	PR_BUSINESS_FAX_NUMBER_A                      = propTag(PT_STRING8, 0x3A24)
	PR_HOME_FAX_NUMBER                            = propTag(PT_TSTRING, 0x3A25)
	PR_HOME_FAX_NUMBER_W                          = propTag(PT_UNICODE, 0x3A25)
	PR_HOME_FAX_NUMBER_A                          = propTag(PT_STRING8, 0x3A25)
	PR_COUNTRY                                    = propTag(PT_TSTRING, 0x3A26)
	PR_COUNTRY_W                                  = propTag(PT_UNICODE, 0x3A26)
	PR_COUNTRY_A                                  = propTag(PT_STRING8, 0x3A26)
	PR_LOCALITY                                   = propTag(PT_TSTRING, 0x3A27)
	PR_LOCALITY_W                                 = propTag(PT_UNICODE, 0x3A27)
	PR_LOCALITY_A                                 = propTag(PT_STRING8, 0x3A27)
	PR_STATE_OR_PROVINCE                          = propTag(PT_TSTRING, 0x3A28)
	PR_STATE_OR_PROVINCE_W                        = propTag(PT_UNICODE, 0x3A28)
	PR_STATE_OR_PROVINCE_A                        = propTag(PT_STRING8, 0x3A28)
	PR_STREET_ADDRESS                             = propTag(PT_TSTRING, 0x3A29)
	PR_STREET_ADDRESS_W                           = propTag(PT_UNICODE, 0x3A29)
	PR_STREET_ADDRESS_A                           = propTag(PT_STRING8, 0x3A29)
	PR_POSTAL_CODE                                = propTag(PT_TSTRING, 0x3A2A)
	PR_POSTAL_CODE_W                              = propTag(PT_UNICODE, 0x3A2A)
	PR_POSTAL_CODE_A                              = propTag(PT_STRING8, 0x3A2A)
	PR_POST_OFFICE_BOX                            = propTag(PT_TSTRING, 0x3A2B)
	PR_POST_OFFICE_BOX_W                          = propTag(PT_UNICODE, 0x3A2B)
	PR_POST_OFFICE_BOX_A                          = propTag(PT_STRING8, 0x3A2B)
	PR_TELEX_NUMBER                               = propTag(PT_TSTRING, 0x3A2C)
	PR_TELEX_NUMBER_W                             = propTag(PT_UNICODE, 0x3A2C)
	PR_TELEX_NUMBER_A                             = propTag(PT_STRING8, 0x3A2C)
	PR_ISDN_NUMBER                                = propTag(PT_TSTRING, 0x3A2D)
	PR_ISDN_NUMBER_W                              = propTag(PT_UNICODE, 0x3A2D)
	PR_ISDN_NUMBER_A                              = propTag(PT_STRING8, 0x3A2D)
	PR_ASSISTANT_TELEPHONE_NUMBER                 = propTag(PT_TSTRING, 0x3A2E)
	PR_ASSISTANT_TELEPHONE_NUMBER_W               = propTag(PT_UNICODE, 0x3A2E)
	PR_ASSISTANT_TELEPHONE_NUMBER_A               = propTag(PT_STRING8, 0x3A2E)
	PR_HOME2_TELEPHONE_NUMBER                     = propTag(PT_TSTRING, 0x3A2F)
	PR_HOME2_TELEPHONE_NUMBER_W                   = propTag(PT_UNICODE, 0x3A2F)
	PR_HOME2_TELEPHONE_NUMBER_A                   = propTag(PT_STRING8, 0x3A2F)
	PR_ASSISTANT                                  = propTag(PT_TSTRING, 0x3A30)
	PR_ASSISTANT_W                                = propTag(PT_UNICODE, 0x3A30)
	PR_ASSISTANT_A                                = propTag(PT_STRING8, 0x3A30)
	PR_SEND_RICH_INFO                             = propTag(PT_BOOLEAN, 0x3A40)
	PR_WEDDING_ANNIVERSARY                        = propTag(PT_SYSTIME, 0x3A41)
	PR_BIRTHDAY                                   = propTag(PT_SYSTIME, 0x3A42)
	PR_HOBBIES                                    = propTag(PT_TSTRING, 0x3A43)
	PR_HOBBIES_W                                  = propTag(PT_UNICODE, 0x3A43)
	PR_HOBBIES_A                                  = propTag(PT_STRING8, 0x3A43)
	PR_MIDDLE_NAME                                = propTag(PT_TSTRING, 0x3A44)
	PR_MIDDLE_NAME_W                              = propTag(PT_UNICODE, 0x3A44)
	PR_MIDDLE_NAME_A                              = propTag(PT_STRING8, 0x3A44)
	PR_DISPLAY_NAME_PREFIX                        = propTag(PT_TSTRING, 0x3A45)
	PR_DISPLAY_NAME_PREFIX_W                      = propTag(PT_UNICODE, 0x3A45)
	PR_DISPLAY_NAME_PREFIX_A                      = propTag(PT_STRING8, 0x3A45)
	PR_PROFESSION                                 = propTag(PT_TSTRING, 0x3A46)
	PR_PROFESSION_W                               = propTag(PT_UNICODE, 0x3A46)
	PR_PROFESSION_A                               = propTag(PT_STRING8, 0x3A46)
	PR_PREFERRED_BY_NAME                          = propTag(PT_TSTRING, 0x3A47)
	PR_PREFERRED_BY_NAME_W                        = propTag(PT_UNICODE, 0x3A47)
	PR_PREFERRED_BY_NAME_A                        = propTag(PT_STRING8, 0x3A47)
	PR_SPOUSE_NAME                                = propTag(PT_TSTRING, 0x3A48)
	PR_SPOUSE_NAME_W                              = propTag(PT_UNICODE, 0x3A48)
	PR_SPOUSE_NAME_A                              = propTag(PT_STRING8, 0x3A48)
	PR_COMPUTER_NETWORK_NAME                      = propTag(PT_TSTRING, 0x3A49)
	PR_COMPUTER_NETWORK_NAME_W                    = propTag(PT_UNICODE, 0x3A49)
	PR_COMPUTER_NETWORK_NAME_A                    = propTag(PT_STRING8, 0x3A49)
	PR_CUSTOMER_ID                                = propTag(PT_TSTRING, 0x3A4A)
	PR_CUSTOMER_ID_W                              = propTag(PT_UNICODE, 0x3A4A)
	PR_CUSTOMER_ID_A                              = propTag(PT_STRING8, 0x3A4A)
	PR_TTYTDD_PHONE_NUMBER                        = propTag(PT_TSTRING, 0x3A4B)
	PR_TTYTDD_PHONE_NUMBER_W                      = propTag(PT_UNICODE, 0x3A4B)
	PR_TTYTDD_PHONE_NUMBER_A                      = propTag(PT_STRING8, 0x3A4B)
	PR_FTP_SITE                                   = propTag(PT_TSTRING, 0x3A4C)
	PR_FTP_SITE_W                                 = propTag(PT_UNICODE, 0x3A4C)
	PR_FTP_SITE_A                                 = propTag(PT_STRING8, 0x3A4C)
	PR_GENDER                                     = propTag(PT_SHORT, 0x3A4D)
	PR_MANAGER_NAME                               = propTag(PT_TSTRING, 0x3A4E)
	PR_MANAGER_NAME_W                             = propTag(PT_UNICODE, 0x3A4E)
	PR_MANAGER_NAME_A                             = propTag(PT_STRING8, 0x3A4E)
	PR_NICKNAME                                   = propTag(PT_TSTRING, 0x3A4F)
	PR_NICKNAME_W                                 = propTag(PT_UNICODE, 0x3A4F)
	PR_NICKNAME_A                                 = propTag(PT_STRING8, 0x3A4F)
	PR_PERSONAL_HOME_PAGE                         = propTag(PT_TSTRING, 0x3A50)
	PR_PERSONAL_HOME_PAGE_W                       = propTag(PT_UNICODE, 0x3A50)
	PR_PERSONAL_HOME_PAGE_A                       = propTag(PT_STRING8, 0x3A50)
	PR_BUSINESS_HOME_PAGE                         = propTag(PT_TSTRING, 0x3A51)
	PR_BUSINESS_HOME_PAGE_W                       = propTag(PT_UNICODE, 0x3A51)
	PR_BUSINESS_HOME_PAGE_A                       = propTag(PT_STRING8, 0x3A51)
	PR_CONTACT_VERSION                            = propTag(PT_CLSID, 0x3A52)
	PR_CONTACT_ENTRYIDS                           = propTag(PT_MV_BINARY, 0x3A53)
	PR_CONTACT_ADDRTYPES                          = propTag(PT_MV_TSTRING, 0x3A54)
	PR_CONTACT_ADDRTYPES_W                        = propTag(PT_MV_UNICODE, 0x3A54)
	PR_CONTACT_ADDRTYPES_A                        = propTag(PT_MV_STRING8, 0x3A54)
	PR_CONTACT_DEFAULT_ADDRESS_INDEX              = propTag(PT_LONG, 0x3A55)
	PR_CONTACT_EMAIL_ADDRESSES                    = propTag(PT_MV_TSTRING, 0x3A56)
	PR_CONTACT_EMAIL_ADDRESSES_W                  = propTag(PT_MV_UNICODE, 0x3A56)
	PR_CONTACT_EMAIL_ADDRESSES_A                  = propTag(PT_MV_STRING8, 0x3A56)
	PR_COMPANY_MAIN_PHONE_NUMBER                  = propTag(PT_TSTRING, 0x3A57)
	PR_COMPANY_MAIN_PHONE_NUMBER_W                = propTag(PT_UNICODE, 0x3A57)
	PR_COMPANY_MAIN_PHONE_NUMBER_A                = propTag(PT_STRING8, 0x3A57)
	PR_CHILDRENS_NAMES                            = propTag(PT_MV_TSTRING, 0x3A58)
	PR_CHILDRENS_NAMES_W                          = propTag(PT_MV_UNICODE, 0x3A58)
	PR_CHILDRENS_NAMES_A                          = propTag(PT_MV_STRING8, 0x3A58)
	PR_HOME_ADDRESS_CITY                          = propTag(PT_TSTRING, 0x3A59)
	PR_HOME_ADDRESS_CITY_W                        = propTag(PT_UNICODE, 0x3A59)
	PR_HOME_ADDRESS_CITY_A                        = propTag(PT_STRING8, 0x3A59)
	PR_HOME_ADDRESS_COUNTRY                       = propTag(PT_TSTRING, 0x3A5A)
	PR_HOME_ADDRESS_COUNTRY_W                     = propTag(PT_UNICODE, 0x3A5A)
	PR_HOME_ADDRESS_COUNTRY_A                     = propTag(PT_STRING8, 0x3A5A)
	PR_HOME_ADDRESS_POSTAL_CODE                   = propTag(PT_TSTRING, 0x3A5B)
	PR_HOME_ADDRESS_POSTAL_CODE_W                 = propTag(PT_UNICODE, 0x3A5B)
	PR_HOME_ADDRESS_POSTAL_CODE_A                 = propTag(PT_STRING8, 0x3A5B)
	PR_HOME_ADDRESS_STATE_OR_PROVINCE             = propTag(PT_TSTRING, 0x3A5C)
	PR_HOME_ADDRESS_STATE_OR_PROVINCE_W           = propTag(PT_UNICODE, 0x3A5C)
	PR_HOME_ADDRESS_STATE_OR_PROVINCE_A           = propTag(PT_STRING8, 0x3A5C)
	PR_HOME_ADDRESS_STREET                        = propTag(PT_TSTRING, 0x3A5D)
	PR_HOME_ADDRESS_STREET_W                      = propTag(PT_UNICODE, 0x3A5D)
	PR_HOME_ADDRESS_STREET_A                      = propTag(PT_STRING8, 0x3A5D)
	PR_HOME_ADDRESS_POST_OFFICE_BOX               = propTag(PT_TSTRING, 0x3A5E)
	PR_HOME_ADDRESS_POST_OFFICE_BOX_W             = propTag(PT_UNICODE, 0x3A5E)
	PR_HOME_ADDRESS_POST_OFFICE_BOX_A             = propTag(PT_STRING8, 0x3A5E)
	PR_OTHER_ADDRESS_CITY                         = propTag(PT_TSTRING, 0x3A5F)
	PR_OTHER_ADDRESS_CITY_W                       = propTag(PT_UNICODE, 0x3A5F)
	PR_OTHER_ADDRESS_CITY_A                       = propTag(PT_STRING8, 0x3A5F)
	PR_OTHER_ADDRESS_COUNTRY                      = propTag(PT_TSTRING, 0x3A60)
	PR_OTHER_ADDRESS_COUNTRY_W                    = propTag(PT_UNICODE, 0x3A60)
	PR_OTHER_ADDRESS_COUNTRY_A                    = propTag(PT_STRING8, 0x3A60)
	PR_OTHER_ADDRESS_POSTAL_CODE                  = propTag(PT_TSTRING, 0x3A61)
	PR_OTHER_ADDRESS_POSTAL_CODE_W                = propTag(PT_UNICODE, 0x3A61)
	PR_OTHER_ADDRESS_POSTAL_CODE_A                = propTag(PT_STRING8, 0x3A61)
	PR_OTHER_ADDRESS_STATE_OR_PROVINCE            = propTag(PT_TSTRING, 0x3A62)
	PR_OTHER_ADDRESS_STATE_OR_PROVINCE_W          = propTag(PT_UNICODE, 0x3A62)
	PR_OTHER_ADDRESS_STATE_OR_PROVINCE_A          = propTag(PT_STRING8, 0x3A62)
	PR_OTHER_ADDRESS_STREET                       = propTag(PT_TSTRING, 0x3A63)
	PR_OTHER_ADDRESS_STREET_W                     = propTag(PT_UNICODE, 0x3A63)
	PR_OTHER_ADDRESS_STREET_A                     = propTag(PT_STRING8, 0x3A63)
	PR_OTHER_ADDRESS_POST_OFFICE_BOX              = propTag(PT_TSTRING, 0x3A64)
	PR_OTHER_ADDRESS_POST_OFFICE_BOX_W            = propTag(PT_UNICODE, 0x3A64)
	PR_OTHER_ADDRESS_POST_OFFICE_BOX_A            = propTag(PT_STRING8, 0x3A64)
	PR_STORE_PROVIDERS                            = propTag(PT_BINARY, 0x3D00)
	PR_AB_PROVIDERS                               = propTag(PT_BINARY, 0x3D01)
	PR_TRANSPORT_PROVIDERS                        = propTag(PT_BINARY, 0x3D02)
	PR_DEFAULT_PROFILE                            = propTag(PT_BOOLEAN, 0x3D04)
	PR_AB_SEARCH_PATH                             = propTag(PT_MV_BINARY, 0x3D05)
	PR_AB_DEFAULT_DIR                             = propTag(PT_BINARY, 0x3D06)
	PR_AB_DEFAULT_PAB                             = propTag(PT_BINARY, 0x3D07)
	PR_FILTERING_HOOKS                            = propTag(PT_BINARY, 0x3D08)
	PR_SERVICE_NAME                               = propTag(PT_TSTRING, 0x3D09)
	PR_SERVICE_NAME_W                             = propTag(PT_UNICODE, 0x3D09)
	PR_SERVICE_NAME_A                             = propTag(PT_STRING8, 0x3D09)
	PR_SERVICE_DLL_NAME                           = propTag(PT_TSTRING, 0x3D0A)
	PR_SERVICE_DLL_NAME_W                         = propTag(PT_UNICODE, 0x3D0A)
	PR_SERVICE_DLL_NAME_A                         = propTag(PT_STRING8, 0x3D0A)
	PR_SERVICE_ENTRY_NAME                         = propTag(PT_STRING8, 0x3D0B)
	PR_SERVICE_UID                                = propTag(PT_BINARY, 0x3D0C)
	PR_SERVICE_EXTRA_UIDS                         = propTag(PT_BINARY, 0x3D0D)
	PR_SERVICES                                   = propTag(PT_BINARY, 0x3D0E)
	PR_SERVICE_SUPPORT_FILES                      = propTag(PT_MV_TSTRING, 0x3D0F)
	PR_SERVICE_SUPPORT_FILES_W                    = propTag(PT_MV_UNICODE, 0x3D0F)
	PR_SERVICE_SUPPORT_FILES_A                    = propTag(PT_MV_STRING8, 0x3D0F)
	PR_SERVICE_DELETE_FILES                       = propTag(PT_MV_TSTRING, 0x3D10)
	PR_SERVICE_DELETE_FILES_W                     = propTag(PT_MV_UNICODE, 0x3D10)
	PR_SERVICE_DELETE_FILES_A                     = propTag(PT_MV_STRING8, 0x3D10)
	PR_AB_SEARCH_PATH_UPDATE                      = propTag(PT_BINARY, 0x3D11)
	PR_PROFILE_NAME                               = propTag(PT_TSTRING, 0x3D12)
	PR_PROFILE_NAME_A                             = propTag(PT_STRING8, 0x3D12)
	PR_PROFILE_NAME_W                             = propTag(PT_UNICODE, 0x3D12)
	PR_IDENTITY_DISPLAY                           = propTag(PT_TSTRING, 0x3E00)
	PR_IDENTITY_DISPLAY_W                         = propTag(PT_UNICODE, 0x3E00)
	PR_IDENTITY_DISPLAY_A                         = propTag(PT_STRING8, 0x3E00)
	PR_IDENTITY_ENTRYID                           = propTag(PT_BINARY, 0x3E01)
	PR_RESOURCE_METHODS                           = propTag(PT_LONG, 0x3E02)
	PR_RESOURCE_TYPE                              = propTag(PT_LONG, 0x3E03)
	PR_STATUS_CODE                                = propTag(PT_LONG, 0x3E04)
	PR_IDENTITY_SEARCH_KEY                        = propTag(PT_BINARY, 0x3E05)
	PR_OWN_STORE_ENTRYID                          = propTag(PT_BINARY, 0x3E06)
	PR_RESOURCE_PATH                              = propTag(PT_TSTRING, 0x3E07)
	PR_RESOURCE_PATH_W                            = propTag(PT_UNICODE, 0x3E07)
	PR_RESOURCE_PATH_A                            = propTag(PT_STRING8, 0x3E07)
	PR_STATUS_STRING                              = propTag(PT_TSTRING, 0x3E08)
	PR_STATUS_STRING_W                            = propTag(PT_UNICODE, 0x3E08)
	PR_STATUS_STRING_A                            = propTag(PT_STRING8, 0x3E08)
	PR_X400_DEFERRED_DELIVERY_CANCEL              = propTag(PT_BOOLEAN, 0x3E09)
	PR_HEADER_FOLDER_ENTRYID                      = propTag(PT_BINARY, 0x3E0A)
	PR_REMOTE_PROGRESS                            = propTag(PT_LONG, 0x3E0B)
	PR_REMOTE_PROGRESS_TEXT                       = propTag(PT_TSTRING, 0x3E0C)
	PR_REMOTE_PROGRESS_TEXT_W                     = propTag(PT_UNICODE, 0x3E0C)
	PR_REMOTE_PROGRESS_TEXT_A                     = propTag(PT_STRING8, 0x3E0C)
	PR_REMOTE_VALIDATE_OK                         = propTag(PT_BOOLEAN, 0x3E0D)
	PR_CONTROL_FLAGS                              = propTag(PT_LONG, 0x3F00)
	PR_CONTROL_STRUCTURE                          = propTag(PT_BINARY, 0x3F01)
	PR_CONTROL_TYPE                               = propTag(PT_LONG, 0x3F02)
	PR_DELTAX                                     = propTag(PT_LONG, 0x3F03)
	PR_DELTAY                                     = propTag(PT_LONG, 0x3F04)
	PR_XPOS                                       = propTag(PT_LONG, 0x3F05)
	PR_YPOS                                       = propTag(PT_LONG, 0x3F06)
	PR_CONTROL_ID                                 = propTag(PT_BINARY, 0x3F07)
	PR_INITIAL_DETAILS_PANE                       = propTag(PT_LONG, 0x3F08)
)

Property names as defined in mapi4linux/include/mapitags.h. This defines all property names independently from kcc-go support.

View Source
var (
	PR_ATTACH_CONTENT_ID                    = (propTag(PT_TSTRING, 0x3712))
	PR_ATTACH_CONTENT_ID_A                  = (propTag(PT_STRING8, 0x3712))
	PR_ATTACH_CONTENT_ID_W                  = (propTag(PT_UNICODE, 0x3712))
	PR_ATTACH_CONTENT_LOCATION              = (propTag(PT_TSTRING, 0x3713))
	PR_ATTACH_CONTENT_LOCATION_A            = (propTag(PT_STRING8, 0x3713))
	PR_ATTACH_CONTENT_LOCATION_W            = (propTag(PT_UNICODE, 0x3713))
	PR_USER_X509_CERTIFICATE                = (propTag(PT_MV_BINARY, 0x3a70))
	PR_EMS_AB_X509_CERT                     = propTag(PT_MV_BINARY, 0x8c6a)
	PR_NT_SECURITY_DESCRIPTOR               = (propTag(PT_BINARY, 0x0E27))
	PR_BODY_HTML                            = (propTag(PT_TSTRING, 0x1013))
	PR_INTERNET_MESSAGE_ID                  = propTag(PT_TSTRING, 0x1035)
	PR_INTERNET_MESSAGE_ID_A                = propTag(PT_STRING8, 0x1035)
	PR_INTERNET_MESSAGE_ID_W                = propTag(PT_UNICODE, 0x1035)
	PR_SMTP_ADDRESS                         = propTag(PT_TSTRING, 0x39FE)
	PR_SMTP_ADDRESS_A                       = propTag(PT_STRING8, 0x39FE)
	PR_SMTP_ADDRESS_W                       = propTag(PT_UNICODE, 0x39FE)
	PR_DEF_POST_MSGCLASS                    = propTag(PT_TSTRING, 0x36E5)
	PR_DEF_POST_MSGCLASS_A                  = propTag(PT_STRING8, 0x36E5)
	PR_DEF_POST_MSGCLASS_W                  = propTag(PT_UNICODE, 0x36E5)
	PR_DEF_POST_DISPLAYNAME                 = propTag(PT_TSTRING, 0x36E6)
	PR_DEF_POST_DISPLAYNAME_A               = propTag(PT_STRING8, 0x36E6)
	PR_DEF_POST_DISPLAYNAME_W               = propTag(PT_UNICODE, 0x36E6)
	PR_INTERNET_ARTICLE_NUMBER              = propTag(PT_LONG, 0x0E23)
	PR_FREEBUSY_ENTRYIDS                    = propTag(PT_MV_BINARY, 0x36E4)
	PR_SEND_INTERNET_ENCODING               = propTag(PT_LONG, 0x3A71)
	PR_RECIPIENT_TRACKSTATUS                = propTag(PT_LONG, 0x5FFF)
	PR_RECIPIENT_FLAGS                      = propTag(PT_LONG, 0x5FFD)
	PR_RECIPIENT_ENTRYID                    = propTag(PT_BINARY, 0x5FF7)
	PR_RECIPIENT_DISPLAY_NAME               = propTag(PT_TSTRING, 0x5FF6)
	PR_RECIPIENT_DISPLAY_NAME_A             = propTag(PT_STRING8, 0x5FF6)
	PR_RECIPIENT_DISPLAY_NAME_W             = propTag(PT_UNICODE, 0x5FF6)
	PR_ICON_INDEX                           = propTag(PT_LONG, 0x1080)
	PR_OST_OSTID                            = propTag(PT_BINARY, 0x7c04)
	PR_OFFLINE_FOLDER                       = propTag(PT_BINARY, 0x7c05)
	PR_FAV_DISPLAY_NAME                     = propTag(PT_TSTRING, 0x7C00)
	PR_FAV_DISPLAY_NAME_A                   = propTag(PT_STRING8, 0x7C00)
	PR_FAV_DISPLAY_NAME_W                   = propTag(PT_UNICODE, 0x7C00)
	PR_FAV_DISPLAY_ALIAS                    = propTag(PT_TSTRING, 0x7C01)
	PR_FAV_DISPLAY_ALIAS_A                  = propTag(PT_STRING8, 0x7C01)
	PR_FAV_DISPLAY_ALIAS_W                  = propTag(PT_UNICODE, 0x7C01)
	PR_FAV_PUBLIC_SOURCE_KEY                = propTag(PT_BINARY, 0x7C02)
	PR_FAV_AUTOSUBFOLDERS                   = propTag(PT_LONG, 0x7d01)
	PR_FAV_PARENT_SOURCE_KEY                = propTag(PT_BINARY, 0x7d02)
	PR_FAV_LEVEL_MASK                       = propTag(PT_LONG, 0x7D03)
	PR_FAV_KNOWN_SUBS                       = propTag(PT_BINARY, 0x7D04)
	PR_FAV_GUID_MAP                         = propTag(PT_BINARY, 0x7D05)
	PR_FAV_KNOWN_DELS_OLD                   = propTag(PT_BINARY, 0x7D06)
	PR_FAV_INHERIT_AUTO                     = propTag(PT_LONG, 0x7d07)
	PR_FAV_DEL_SUBS                         = propTag(PT_BINARY, 0x7D08)
	PR_FAV_CONTAINER_CLASS                  = propTag(PT_TSTRING, 0x7D09)
	PR_FAV_CONTAINER_CLASS_A                = propTag(PT_STRING8, 0x7D09)
	PR_FAV_CONTAINER_CLASS_W                = propTag(PT_UNICODE, 0x7D09)
	PR_IN_REPLY_TO_ID                       = propTag(PT_TSTRING, 0x1042)
	PR_IN_REPLY_TO_ID_A                     = propTag(PT_STRING8, 0x1042)
	PR_IN_REPLY_TO_ID_W                     = propTag(PT_UNICODE, 0x1042)
	PR_ATTACH_FLAGS                         = propTag(PT_LONG, 0x3714)
	PR_ATTACHMENT_LINKID                    = propTag(PT_LONG, 0x7FFA)
	PR_EXCEPTION_STARTTIME                  = propTag(PT_SYSTIME, 0x7FFB)
	PR_EXCEPTION_ENDTIME                    = propTag(PT_SYSTIME, 0x7FFC)
	PR_EXCEPTION_REPLACETIME                = propTag(PT_SYSTIME, 0x7FF9)
	PR_ATTACHMENT_FLAGS                     = propTag(PT_LONG, 0x7FFD)
	PR_ATTACHMENT_HIDDEN                    = propTag(PT_BOOLEAN, 0x7FFE)
	PR_ATTACHMENT_CONTACTPHOTO              = propTag(PT_BOOLEAN, 0x7FFF)
	PR_CONFLICT_ITEMS                       = propTag(PT_MV_BINARY, 0x1098)
	PR_INTERNET_APPROVED                    = propTag(PT_TSTRING, 0x1030)
	PR_INTERNET_APPROVED_A                  = propTag(PT_STRING8, 0x1030)
	PR_INTERNET_APPROVED_W                  = propTag(PT_UNICODE, 0x1030)
	PR_INTERNET_CONTROL                     = propTag(PT_TSTRING, 0x1031)
	PR_INTERNET_CONTROL_A                   = propTag(PT_STRING8, 0x1031)
	PR_INTERNET_CONTROL_W                   = propTag(PT_UNICODE, 0x1031)
	PR_INTERNET_DISTRIBUTION                = propTag(PT_TSTRING, 0x1032)
	PR_INTERNET_DISTRIBUTION_A              = propTag(PT_STRING8, 0x1032)
	PR_INTERNET_DISTRIBUTION_W              = propTag(PT_UNICODE, 0x1032)
	PR_INTERNET_FOLLOWUP_TO                 = propTag(PT_TSTRING, 0x1033)
	PR_INTERNET_FOLLOWUP_TO_A               = propTag(PT_STRING8, 0x1033)
	PR_INTERNET_FOLLOWUP_TO_W               = propTag(PT_UNICODE, 0x1033)
	PR_INTERNET_LINES                       = propTag(PT_LONG, 0x1034)
	PR_INTERNET_NEWSGROUPS                  = propTag(PT_TSTRING, 0x1036)
	PR_INTERNET_NEWSGROUPS_A                = propTag(PT_STRING8, 0x1036)
	PR_INTERNET_NEWSGROUPS_W                = propTag(PT_UNICODE, 0x1036)
	PR_INTERNET_NNTP_PATH                   = propTag(PT_TSTRING, 0x1038)
	PR_INTERNET_NNTP_PATH_A                 = propTag(PT_STRING8, 0x1038)
	PR_INTERNET_NNTP_PATH_W                 = propTag(PT_UNICODE, 0x1038)
	PR_INTERNET_ORGANIZATION                = propTag(PT_TSTRING, 0x1037)
	PR_INTERNET_ORGANIZATION_A              = propTag(PT_STRING8, 0x1037)
	PR_INTERNET_ORGANIZATION_W              = propTag(PT_UNICODE, 0x1037)
	PR_INTERNET_PRECEDENCE                  = propTag(PT_TSTRING, 0x1041)
	PR_INTERNET_PRECEDENCE_A                = propTag(PT_STRING8, 0x1041)
	PR_INTERNET_PRECEDENCE_W                = propTag(PT_UNICODE, 0x1041)
	PR_INTERNET_REFERENCES                  = propTag(PT_TSTRING, 0x1039)
	PR_INTERNET_REFERENCES_A                = propTag(PT_STRING8, 0x1039)
	PR_INTERNET_REFERENCES_W                = propTag(PT_UNICODE, 0x1039)
	PR_NEWSGROUP_NAME                       = propTag(PT_TSTRING, 0x0E24)
	PR_NNTP_XREF                            = propTag(PT_TSTRING, 0x1040)
	PR_NNTP_XREF_A                          = propTag(PT_STRING8, 0x1040)
	PR_NNTP_XREF_W                          = propTag(PT_UNICODE, 0x1040)
	PR_POST_FOLDER_ENTRIES                  = propTag(PT_BINARY, 0x103B)
	PR_POST_FOLDER_NAMES                    = propTag(PT_TSTRING, 0x103C)
	PR_POST_FOLDER_NAMES_A                  = propTag(PT_STRING8, 0x103C)
	PR_POST_FOLDER_NAMES_W                  = propTag(PT_UNICODE, 0x103C)
	PR_POST_REPLY_DENIED                    = propTag(PT_BINARY, 0x103F)
	PR_POST_REPLY_FOLDER_ENTRIES            = propTag(PT_BINARY, 0x103D)
	PR_POST_REPLY_FOLDER_NAMES              = propTag(PT_TSTRING, 0x103E)
	PR_POST_REPLY_FOLDER_NAMES_A            = propTag(PT_STRING8, 0x103E)
	PR_POST_REPLY_FOLDER_NAMES_W            = propTag(PT_UNICODE, 0x103E)
	PR_SUPERSEDES                           = propTag(PT_TSTRING, 0x103A)
	PR_SUPERSEDES_A                         = propTag(PT_STRING8, 0x103A)
	PR_SUPERSEDES_W                         = propTag(PT_UNICODE, 0x103A)
	PR_ASSOCIATED                           = propTag(PT_BOOLEAN, 0x67AA)
	PR_PROCESSED                            = propTag(PT_BOOLEAN, 0x7D01)
	PR_IPM_APPOINTMENT_ENTRYID              = propTag(PT_BINARY, 0x36D0)
	PR_IPM_CONTACT_ENTRYID                  = propTag(PT_BINARY, 0x36D1)
	PR_IPM_JOURNAL_ENTRYID                  = propTag(PT_BINARY, 0x36D2)
	PR_IPM_NOTE_ENTRYID                     = propTag(PT_BINARY, 0x36D3)
	PR_IPM_TASK_ENTRYID                     = propTag(PT_BINARY, 0x36D4)
	PR_REM_ONLINE_ENTRYID                   = propTag(PT_BINARY, 0x36D5)
	PR_REM_OFFLINE_ENTRYID                  = propTag(PT_BINARY, 0x36D6)
	PR_IPM_DRAFTS_ENTRYID                   = propTag(PT_BINARY, 0x36D7)
	PR_IPM_OL2007_ENTRYIDS                  = propTag(PT_BINARY, 0x36D9)
	PR_ADDITIONAL_REN_ENTRYIDS              = propTag(PT_MV_BINARY, 0x36D8)
	PR_MDN_DISPOSITION_TYPE                 = propTag(PT_STRING8, 0x0080)
	PR_MDN_DISPOSITION_SENDINGMODE          = propTag(PT_STRING8, 0x0081)
	PR_LAST_VERB_EXECUTED                   = propTag(PT_LONG, 0x1081)
	PR_LAST_VERB_EXECUTION_TIME             = propTag(PT_SYSTIME, 0x1082)
	PR_SEARCH_ATTACHMENTS                   = propTag(PT_TSTRING, 0x0EA5)
	PR_SEARCH_ATTACHMENTS_A                 = propTag(PT_STRING8, 0x0EA5)
	PR_SEARCH_ATTACHMENTS_W                 = propTag(PT_UNICODE, 0x0EA5)
	PR_SEARCH_RECIP_EMAIL_TO                = propTag(PT_TSTRING, 0x0EA6)
	PR_SEARCH_RECIP_EMAIL_TO_A              = propTag(PT_STRING8, 0x0EA6)
	PR_SEARCH_RECIP_EMAIL_TO_W              = propTag(PT_UNICODE, 0x0EA6)
	PR_SEARCH_RECIP_EMAIL_CC                = propTag(PT_TSTRING, 0x0EA7)
	PR_SEARCH_RECIP_EMAIL_CC_A              = propTag(PT_STRING8, 0x0EA7)
	PR_SEARCH_RECIP_EMAIL_CC_W              = propTag(PT_UNICODE, 0x0EA7)
	PR_SEARCH_RECIP_EMAIL_BCC               = propTag(PT_TSTRING, 0x0EA8)
	PR_SEARCH_RECIP_EMAIL_BCC_A             = propTag(PT_STRING8, 0x0EA8)
	PR_SEARCH_RECIP_EMAIL_BCC_W             = propTag(PT_UNICODE, 0x0EA8)
	PR_FOLDER_XVIEWINFO_E                   = propTag(PT_BINARY, 0x36E0)
	PR_FOLDER_DISPLAY_FLAGS                 = propTag(PT_BINARY, 0x36DA)
	PR_NET_FOLDER_FLAGS                     = propTag(PT_LONG, 0x36DE)
	PR_FOLDER_WEBVIEWINFO                   = propTag(PT_BINARY, 0x36DF)
	PR_FOLDER_VIEWS_ONLY                    = propTag(PT_LONG, 0x36E1)
	PR_MANAGED_FOLDER_INFORMATION           = propTag(PT_LONG, 0x672D)
	PR_MANAGED_FOLDER_STORAGE_QUOTA         = propTag(PT_LONG, 0x6731)
	PR_SCHDINFO_DELEGATE_NAMES              = propTag(PT_MV_TSTRING, 0x6844)
	PR_SCHDINFO_DELEGATE_ENTRYIDS           = propTag(PT_MV_BINARY, 0x6845)
	PR_DELEGATE_FLAGS                       = propTag(PT_MV_LONG, 0x686B)
	PR_TODO_ITEM_FLAGS                      = propTag(PT_LONG, 0x0E2B)
	PR_FOLLOWUP_ICON                        = propTag(PT_LONG, 0x1095)
	PR_FLAG_STATUS                          = propTag(PT_LONG, 0x1090)
	PR_FLAG_COMPLETE_TIME                   = propTag(PT_SYSTIME, 0x1091)
	PR_INETMAIL_OVERRIDE_FORMAT             = propTag(PT_LONG, 0x5902)
	PR_DISPLAY_TYPE_EX                      = propTag(PT_LONG, 0x3905)
	PR_EMS_AB_ROOM_CAPACITY                 = propTag(PT_LONG, 0x0807)
	PR_EMS_AB_ROOM_DESCRIPTION              = propTag(PT_STRING8, 0x0809)
	PR_ASSOCIATED_SHARING_PROVIDER          = propTag(PT_CLSID, 0x0ea0)
	PR_EMSMDB_SECTION_UID                   = propTag(PT_BINARY, 0x3d15)
	PR_EMSMDB_LEGACY                        = propTag(PT_BOOLEAN, 0x3D18)
	PR_EMSABP_USER_UID                      = propTag(PT_BINARY, 0x3D1A)
	PR_ARCHIVE_TAG                          = propTag(PT_BINARY, 0x3018)
	PR_ARCHIVE_PERIOD                       = propTag(PT_LONG, 0x301e)
	PR_ARCHIVE_DATE                         = propTag(PT_SYSTIME, 0x301f)
	PR_RETENTION_FLAGS                      = propTag(PT_LONG, 0x301d)
	PR_RETENTION_DATE                       = propTag(PT_SYSTIME, 0x301c)
	PR_POLICY_TAG                           = propTag(PT_BINARY, 0x3019)
	PR_ROAMING_DATATYPES                    = propTag(PT_LONG, 0x7c06)
	PR_ITEM_TMPFLAGS                        = propTag(PT_LONG, 0x1097)
	PR_SECURE_SUBMIT_FLAGS                  = propTag(PT_LONG, 0x65C6)
	PR_SECURITY_FLAGS                       = propTag(PT_LONG, 0x6E01)
	PR_CONVERSATION_ID                      = propTag(PT_BINARY, 0x3013)
	PR_AB_CHOOSE_DIRECTORY_AUTOMATICALLY    = propTag(PT_BOOLEAN, 0x3D1C)
	PR_STORE_UNICODE_MASK                   = propTag(PT_LONG, 0x340f)
	PR_PROCESS_MEETING_REQUESTS             = propTag(PT_BOOLEAN, 0x686d)
	PR_DECLINE_CONFLICTING_MEETING_REQUESTS = propTag(PT_BOOLEAN, 0x686f)
	PR_DECLINE_RECURRING_MEETING_REQUESTS   = propTag(PT_BOOLEAN, 0x686e)
	PR_SCHDINFO_RESOURCE_TYPE               = propTag(PT_LONG, 0x6841)
	PR_SCHDINFO_BOSS_WANTS_COPY             = propTag(PT_BOOLEAN, 0x6842)
	PR_SCHDINFO_DONT_MAIL_DELEGATES         = propTag(PT_BOOLEAN, 0x6843)
	PR_SCHDINFO_BOSS_WANTS_INFO             = propTag(PT_BOOLEAN, 0x684B)
	PR_PROFILE_MDB_DN                       = propTag(PT_STRING8, 0x7CFF)
	PR_FORCE_USE_ENTRYID_SERVER             = propTag(PT_BOOLEAN, 0x7CFE)
)

Property names as defined in m4lcommon/include/kopano/mapiext.h. This defines all property names independently from kcc-go support.

View Source
var (
	PR_EC_PATH                                     = propTag(PT_STRING8, 0x6700)
	PR_EC_USERNAME                                 = propTag(PT_TSTRING, 0x6701)
	PR_EC_USERNAME_A                               = propTag(PT_STRING8, 0x6701)
	PR_EC_USERNAME_W                               = propTag(PT_UNICODE, 0x6701)
	PR_EC_USERPASSWORD                             = propTag(PT_TSTRING, 0x6702)
	PR_EC_USERPASSWORD_A                           = propTag(PT_STRING8, 0x6702)
	PR_EC_USERPASSWORD_W                           = propTag(PT_UNICODE, 0x6702)
	PR_EC_PORT                                     = propTag(PT_STRING8, 0x6703)
	PR_EC_FLAGS                                    = propTag(PT_LONG, 0x6704)
	PR_EC_SSLKEY_FILE                              = propTag(PT_STRING8, 0x6705)
	PR_EC_SSLKEY_PASS                              = propTag(PT_STRING8, 0x6706)
	PR_EC_LAST_CONNECTIONTYPE                      = propTag(PT_LONG, 0x6709)
	PR_EC_CONNECTION_TIMEOUT                       = propTag(PT_LONG, 0x670A)
	PR_EC_SERVER_VERSION                           = propTag(PT_TSTRING, 0x6716)
	PR_EC_PROXY_HOST                               = propTag(PT_STRING8, 0x670B)
	PR_EC_PROXY_PORT                               = propTag(PT_LONG, 0x670C)
	PR_EC_PROXY_USERNAME                           = propTag(PT_STRING8, 0x670D)
	PR_EC_PROXY_PASSWORD                           = propTag(PT_STRING8, 0x670E)
	PR_EC_PROXY_FLAGS                              = propTag(PT_LONG, 0x670F)
	PR_EC_SERVERNAME                               = propTag(PT_TSTRING, 0x6711)
	PR_EC_SERVERNAME_A                             = propTag(PT_STRING8, 0x6711)
	PR_EC_SERVERNAME_W                             = propTag(PT_UNICODE, 0x6711)
	PR_EC_IMPERSONATEUSER                          = propTag(PT_TSTRING, 0x6712)
	PR_EC_IMPERSONATEUSER_A                        = propTag(PT_STRING8, 0x6712)
	PR_EC_IMPERSONATEUSER_W                        = propTag(PT_UNICODE, 0x6712)
	PR_ZC_CONTACT_STORE_ENTRYIDS                   = propTag(PT_MV_BINARY, 0x6711)
	PR_ZC_CONTACT_FOLDER_ENTRYIDS                  = propTag(PT_MV_BINARY, 0x6712)
	PR_ZC_CONTACT_FOLDER_NAMES                     = propTag(PT_MV_TSTRING, 0x6713)
	PR_ZC_CONTACT_FOLDER_NAMES_A                   = propTag(PT_MV_STRING8, 0x6713)
	PR_ZC_CONTACT_FOLDER_NAMES_W                   = propTag(PT_MV_UNICODE, 0x6713)
	PR_ZC_ORIGINAL_ENTRYID                         = propTag(PT_BINARY, 0x6720)
	PR_ZC_ORIGINAL_PARENT_ENTRYID                  = propTag(PT_BINARY, 0x6721)
	PR_ZC_ORIGINAL_SOURCE_KEY                      = propTag(PT_BINARY, 0x6722)
	PR_ZC_ORIGINAL_PARENT_SOURCE_KEY               = propTag(PT_BINARY, 0x6723)
	PR_ZC_ORIGINAL_CHANGE_KEY                      = propTag(PT_BINARY, 0x6724)
	PR_EC_CONTACT_ENTRYID                          = propTag(PT_BINARY, 0x6710)
	PR_EC_HIERARCHYID                              = propTag(PT_LONG, 0x6711)
	PR_EC_STOREGUID                                = propTag(PT_BINARY, 0x6712)
	PR_EC_COMPANYID                                = propTag(PT_LONG, 0x6713)
	PR_EC_STORETYPE                                = propTag(PT_LONG, 0x6714)
	PR_EC_PARENT_HIERARCHYID                       = propTag(PT_LONG, 0x6715)
	PR_EC_QUOTA_MAIL_TIME                          = propTag(PT_SYSTIME, 0x6720)
	PR_EC_STATSTABLE_SYSTEM                        = propTag(PT_OBJECT, 0x6730)
	PR_EC_STATSTABLE_SESSIONS                      = propTag(PT_OBJECT, 0x6731)
	PR_EC_STATSTABLE_USERS                         = propTag(PT_OBJECT, 0x6732)
	PR_EC_STATSTABLE_COMPANY                       = propTag(PT_OBJECT, 0x6733)
	PR_EC_STATSTABLE_SERVERS                       = propTag(PT_OBJECT, 0x6734)
	PR_EC_STATS_SYSTEM_DESCRIPTION                 = propTag(PT_STRING8, 0x6740)
	PR_EC_STATS_SYSTEM_VALUE                       = propTag(PT_STRING8, 0x6741)
	PR_EC_STATS_SESSION_ID                         = propTag(PT_LONGLONG, 0x6742)
	PR_EC_STATS_SESSION_IPADDRESS                  = propTag(PT_STRING8, 0x6743)
	PR_EC_STATS_SESSION_IDLETIME                   = propTag(PT_LONG, 0x6744)
	PR_EC_STATS_SESSION_CAPABILITY                 = propTag(PT_LONG, 0x6745)
	PR_EC_STATS_SESSION_LOCKED                     = propTag(PT_BOOLEAN, 0x6746)
	PR_EC_STATS_SESSION_BUSYSTATES                 = propTag(PT_MV_STRING8, 0x6747)
	PR_EC_STATS_SESSION_PORT                       = propTag(PT_LONG, 0x6748)
	PR_EC_STATS_SESSION_PROCSTATES                 = propTag(PT_MV_STRING8, 0x6749)
	PR_EC_COMPANY_NAME                             = propTag(PT_TSTRING, 0x6748)
	PR_EC_COMPANY_NAME_A                           = propTag(PT_STRING8, 0x6748)
	PR_EC_COMPANY_NAME_W                           = propTag(PT_UNICODE, 0x6748)
	PR_EC_COMPANY_ADMIN                            = propTag(PT_TSTRING, 0x6749)
	PR_EC_COMPANY_ADMIN_A                          = propTag(PT_STRING8, 0x6749)
	PR_EC_COMPANY_ADMIN_W                          = propTag(PT_UNICODE, 0x6749)
	PR_EC_STATS_SESSION_CPU_USER                   = propTag(PT_DOUBLE, 0x674A)
	PR_EC_STATS_SESSION_CPU_SYSTEM                 = propTag(PT_DOUBLE, 0x674B)
	PR_EC_STATS_SESSION_CPU_REAL                   = propTag(PT_DOUBLE, 0x674C)
	PR_EC_STATS_SESSION_GROUP_ID                   = propTag(PT_LONGLONG, 0x674D)
	PR_EC_STATS_SESSION_PEER_PID                   = propTag(PT_LONG, 0x674E)
	PR_EC_STATS_SESSION_CLIENT_VERSION             = propTag(PT_STRING8, 0x674F)
	PR_EC_STATS_SESSION_CLIENT_APPLICATION         = propTag(PT_STRING8, 0x6750)
	PR_EC_STATS_SESSION_REQUESTS                   = propTag(PT_LONG, 0x6751)
	PR_EC_STATS_SESSION_URL                        = propTag(PT_STRING8, 0x6752)
	PR_EC_STATS_SESSION_PROXY                      = propTag(PT_STRING8, 0x6753)
	PR_EC_STATS_SESSION_CLIENT_APPLICATION_VERSION = propTag(PT_STRING8, 0x6754)
	PR_EC_STATS_SESSION_CLIENT_APPLICATION_MISC    = propTag(PT_STRING8, 0x6755)
	PR_EC_OUTOFOFFICE                              = propTag(PT_BOOLEAN, 0x6760)
	PR_EC_OUTOFOFFICE_MSG                          = propTag(PT_TSTRING, 0x6761)
	PR_EC_OUTOFOFFICE_MSG_A                        = propTag(PT_STRING8, 0x6761)
	PR_EC_OUTOFOFFICE_MSG_W                        = propTag(PT_UNICODE, 0x6761)
	PR_EC_OUTOFOFFICE_SUBJECT                      = propTag(PT_TSTRING, 0x6762)
	PR_EC_OUTOFOFFICE_SUBJECT_A                    = propTag(PT_STRING8, 0x6762)
	PR_EC_OUTOFOFFICE_SUBJECT_W                    = propTag(PT_UNICODE, 0x6762)
	PR_EC_OUTOFOFFICE_FROM                         = propTag(PT_SYSTIME, 0x6763)
	PR_EC_OUTOFOFFICE_UNTIL                        = propTag(PT_SYSTIME, 0x6764)
	PR_EC_WEBACCESS_SETTINGS                       = propTag(PT_TSTRING, 0x6770)
	PR_EC_WEBACCESS_SETTINGS_A                     = propTag(PT_STRING8, 0x6770)
	PR_EC_WEBACCESS_SETTINGS_W                     = propTag(PT_UNICODE, 0x6770)
	PR_EC_RECIPIENT_HISTORY                        = propTag(PT_TSTRING, 0x6771)
	PR_EC_RECIPIENT_HISTORY_A                      = propTag(PT_STRING8, 0x6771)
	PR_EC_RECIPIENT_HISTORY_W                      = propTag(PT_UNICODE, 0x6771)
	PR_EC_WEBACCESS_SETTINGS_JSON                  = propTag(PT_TSTRING, 0x6772)
	PR_EC_WEBACCESS_SETTINGS_JSON_W                = propTag(PT_UNICODE, 0x6772)
	PR_EC_WEBACCESS_SETTINGS_JSON_A                = propTag(PT_STRING8, 0x6772)
	PR_EC_RECIPIENT_HISTORY_JSON                   = propTag(PT_TSTRING, 0x6773)
	PR_EC_RECIPIENT_HISTORY_JSON_W                 = propTag(PT_UNICODE, 0x6773)
	PR_EC_RECIPIENT_HISTORY_JSON_A                 = propTag(PT_STRING8, 0x6773)
	PR_EC_WEBAPP_PERSISTENT_SETTINGS_JSON          = propTag(PT_TSTRING, 0x6774)
	PR_EC_WEBAPP_PERSISTENT_SETTINGS_JSON_A        = propTag(PT_STRING8, 0x6774)
	PR_EC_WEBAPP_PERSISTENT_SETTINGS_JSON_W        = propTag(PT_UNICODE, 0x6774)
	PR_EC_STATS_SERVER_NAME                        = propTag(PT_STRING8, 0x67F0)
	PR_EC_STATS_SERVER_HOST                        = propTag(PT_STRING8, 0x67F1)
	PR_EC_STATS_SERVER_HTTPPORT                    = propTag(PT_LONG, 0x67F2)
	PR_EC_STATS_SERVER_SSLPORT                     = propTag(PT_LONG, 0x67F3)
	PR_EC_STATS_SERVER_FILEPATH                    = propTag(PT_STRING8, 0x67F4)
	PR_EC_STATS_SERVER_PROXYURL                    = propTag(PT_STRING8, 0x67F5)
	PR_EC_STATS_SERVER_HTTPURL                     = propTag(PT_STRING8, 0x67F6)
	PR_EC_STATS_SERVER_HTTPSURL                    = propTag(PT_STRING8, 0x67F7)
	PR_EC_STATS_SERVER_FILEURL                     = propTag(PT_STRING8, 0x67F8)
	PR_EC_TRANSPORTOBJECT                          = propTag(PT_OBJECT, 0x677E)
	PR_EC_OBJECT                                   = propTag(PT_OBJECT, 0x677F)
	PR_EC_OUTGOING_FLAGS                           = propTag(PT_LONG, 0x6780)
	PR_EC_MAILBOX_OWNER_ACCOUNT                    = propTag(PT_TSTRING, 0x6781)
	PR_EC_MAILBOX_OWNER_ACCOUNT_A                  = propTag(PT_STRING8, 0x6781)
	PR_EC_MAILBOX_OWNER_ACCOUNT_W                  = propTag(PT_UNICODE, 0x6781)
	PR_EC_IMAP_ID                                  = propTag(PT_LONG, 0x6782)
	PR_EC_IMAP_SUBSCRIBED                          = propTag(PT_BINARY, 0x6784)
	PR_EC_IMAP_MAX_ID                              = propTag(PT_LONG, 0x6785)
	PR_EC_CLIENT_SUBMIT_DATE                       = propTag(PT_SYSTIME, 0x6786)
	PR_EC_MESSAGE_DELIVERY_DATE                    = propTag(PT_SYSTIME, 0x6787)
	PR_EC_MESSAGE_BCC_ME                           = propTag(PT_BOOLEAN, 0x6725)
	PR_EC_IMAP_EMAIL                               = propTag(PT_BINARY, 0x678C)
	PR_EC_IMAP_EMAIL_SIZE                          = propTag(PT_LONG, 0x678D)
	PR_EC_IMAP_BODY                                = propTag(PT_STRING8, 0x678E)
	PR_EC_IMAP_BODYSTRUCTURE                       = propTag(PT_STRING8, 0x678F)
	PR_EC_SENDAS_USER_ENTRYIDS                     = propTag(PT_MV_BINARY, 0x6783)
	PR_EC_EXCHANGE_DN                              = propTag(PT_TSTRING, 0x6788)
	PR_EC_EXCHANGE_DN_A                            = propTag(PT_STRING8, 0x6788)
	PR_EC_EXCHANGE_DN_W                            = propTag(PT_UNICODE, 0x6788)
	PR_EC_CHANGE_ADVISOR                           = propTag(PT_OBJECT, 0x6789)
	PR_EC_HOMESERVER_NAME                          = propTag(PT_TSTRING, 0x67C1)
	PR_EC_HOMESERVER_NAME_A                        = propTag(PT_STRING8, 0x67C1)
	PR_EC_HOMESERVER_NAME_W                        = propTag(PT_UNICODE, 0x67C1)
	PR_EC_SERVER_UID                               = propTag(PT_BINARY, 0x67C2)
	PR_EC_DELETED_STORE                            = propTag(PT_BOOLEAN, 0x67C3)
	PR_EC_ARCHIVE_SERVERS                          = propTag(PT_MV_TSTRING, 0x67C4)
	PR_EC_ARCHIVE_SERVERS_A                        = propTag(PT_MV_STRING8, 0x67C4)
	PR_EC_ARCHIVE_SERVERS_W                        = propTag(PT_MV_UNICODE, 0x67C4)
	PR_EC_ARCHIVE_COUPLINGS                        = propTag(PT_MV_TSTRING, 0x67C5)
	PR_EC_ARCHIVE_COUPLINGS_A                      = propTag(PT_MV_STRING8, 0x67C5)
	PR_EC_ARCHIVE_COUPLINGS_W                      = propTag(PT_MV_UNICODE, 0x67C5)
	PR_EC_SEARCHFOLDER_STATUS                      = propTag(PT_LONG, 0x6790)
	PR_EC_BODY_FILTERED                            = propTag(PT_BINARY, 0x6791)
	PR_EC_RESYNC_ID                                = propTag(PT_LONG, 0x67A5)
	PR_EC_STORED_SERVER_UID                        = propTag(PT_BINARY, 0x67A6)
	PR_EC_AB_HIDDEN                                = propTag(PT_BOOLEAN, 0x67A7)
	PR_EC_NONACTIVE                                = propTag(PT_BOOLEAN, 0x67B0)
	PR_EC_ADMINISTRATOR                            = propTag(PT_LONG, 0x67B1)
	PR_EC_ENABLED_FEATURES                         = propTag(PT_MV_TSTRING, 0x67B3)
	PR_EC_ENABLED_FEATURES_A                       = propTag(PT_MV_STRING8, 0x67B3)
	PR_EC_ENABLED_FEATURES_W                       = propTag(PT_MV_UNICODE, 0x67B3)
	PR_EC_DISABLED_FEATURES                        = propTag(PT_MV_TSTRING, 0x67B4)
	PR_EC_DISABLED_FEATURES_A                      = propTag(PT_MV_STRING8, 0x67B4)
	PR_EC_DISABLED_FEATURES_W                      = propTag(PT_MV_UNICODE, 0x67B4)
	PR_EC_PUBLIC_IPM_SUBTREE_ENTRYID               = propTag(PT_BINARY, 0x67D0)
	PR_EC_BACKUP_SOURCE_KEY                        = propTag(PT_BINARY, 0x67D1)
)

Property names as defined in m4lcommon/include/kopano/ECTags.h. This defines all property names independently from kcc-go support.

View Source
var (
	// SessionAutorefreshInterval defines the interval when sessions are auto
	// refreshed automatically.
	SessionAutorefreshInterval = 4 * time.Minute
	// SessionExpirationGrace defines the duration after SessionAutorefreshInterval
	// when a session was not refreshed and can be considered non active.
	SessionExpirationGrace = 2 * time.Minute
)

DefaultClientCapabilities groups the default client caps sent by kcc.

View Source
var DefaultHTTPClient *http.Client

DefaultHTTPClient is the default Client as used by KCC for HTTP SOAP requests.

View Source
var DefaultSOAPClientConfig = &SOAPClientConfig{}

DefaultSOAPClientConfig is the default SOAP client config which is used when constructing SOAP clients with default settings.

View Source
var DefaultUnixDialer = &net.Dialer{
	Timeout: 10 * time.Second,
}

DefaultUnixDialer is the default Dialer as used by KSS for Unix socket SOAP request.

View Source
var DefaultUnixMaxConnections = 20

DefaultUnixMaxConnections is the default maximum number of connections which will be created to handle parallel SOAP requests to Unix sockets.

View Source
var KCErrorNameMap = map[KCError]string{
	KCERR_UNKNOWN:               "KCERR_UNKNOWN",
	KCERR_NOT_FOUND:             "KCERR_NOT_FOUND:",
	KCERR_NO_ACCESS:             "KCERR_NO_ACCESS",
	KCERR_NETWORK_ERROR:         "KCERR_NETWORK_ERROR",
	KCERR_SERVER_NOT_RESPONDING: "KCERR_SERVER_NOT_RESPONDING",
	KCERR_INVALID_TYPE:          "KCERR_INVALID_TYPE",
	KCERR_DATABASE_ERROR:        "KCERR_DATABASE_ERROR",
	KCERR_COLLISION:             "KCERR_COLLISION",
	KCERR_LOGON_FAILED:          "KCERR_LOGON_FAILED",
	KCERR_HAS_MESSAGES:          "KCERR_HAS_MESSAGE",
	KCERR_HAS_FOLDERS:           "KCERR_HAS_FOLDERS",
	KCERR_HAS_RECIPIENTS:        "KCERR_HAS_RECIPIENTS",
	KCERR_HAS_ATTACHMENTS:       "KCERR_HAS_ATTACHMENTS",
	KCERR_NOT_ENOUGH_MEMORY:     "KCERR_NOT_ENOUGH_MEMORY",
	KCERR_TOO_COMPLEX:           "KCERR_TOO_COMPLEX",
	KCERR_END_OF_SESSION:        "KCERR_END_OF_SESSION",
	KCWARN_CALL_KEEPALIVE:       "KCWARN_CALL_KEEPALIVE",
	KCERR_UNABLE_TO_ABORT:       "KCERR_UNABLE_TO_ABORT",
	KCERR_NOT_IN_QUEUE:          "KCERR_NOT_IN_QUEUE",
	KCERR_INVALID_PARAMETER:     "KCERR_INVALID_PARAMETER",
	KCWARN_PARTIAL_COMPLETION:   "KCWARN_PARTIAL_COMPLETION",
	KCERR_INVALID_ENTRYID:       "KCERR_INVALID_ENTRYID",
	KCERR_BAD_VALUE:             "KCERR_BAD_VALUE",
	KCERR_NO_SUPPORT:            "KCERR_NO_SUPPORT",
	KCERR_TOO_BIG:               "KCERR_TOO_BIG",
	KCWARN_POSITION_CHANGED:     "KCWARN_POSITION_CHANGED",
	KCERR_FOLDER_CYCLE:          "KCERR_FOLDER_CYCLE",
	KCERR_STORE_FULL:            "KCERR_STORE_FULL",
	KCERR_PLUGIN_ERROR:          "KCERR_PLUGIN_ERROR",
	KCERR_UNKNOWN_OBJECT:        "KCERR_UNKNOWN_OBJECT",
	KCERR_NOT_IMPLEMENTED:       "KCERR_NOT_IMPLEMENTED",
	KCERR_DATABASE_NOT_FOUND:    "KCERR_DATABASE_NOT_FOUND",
	KCERR_INVALID_VERSION:       "KCERR_INVALID_VERSION",
	KCERR_UNKNOWN_DATABASE:      "KCERR_UNKNOWN_DATABASE",
	KCERR_NOT_INITIALIZED:       "KCERR_NOT_INITIALIZED",
	KCERR_CALL_FAILED:           "KCERR_CALL_FAILED",
	KCERR_SSO_CONTINUE:          "KCERR_SSO_CONTINUE",
	KCERR_TIMEOUT:               "KCERR_TIMEOUT",
	KCERR_INVALID_BOOKMARK:      "KCERR_INVALID_BOOKMARK",
	KCERR_UNABLE_TO_COMPLETE:    "KCERR_UNABLE_TO_COMPLETE",
	KCERR_UNKNOWN_INSTANCE_ID:   "KCERR_UNKNOWN_INSTANCE_ID",
	KCERR_IGNORE_ME:             "KCERR_IGNORE_ME",
	KCERR_BUSY:                  "KCERR_BUSY",
	KCERR_OBJECT_DELETED:        "KCERR_OBJECT_DELETED",
	KCERR_USER_CANCEL:           "KCERR_USER_CANCEL",
	KCERR_UNKNOWN_FLAGS:         "KCERR_UNKNOWN_FLAGS",
	KCERR_SUBMITTED:             "KCERR_SUBMITTED",
}

KCErrorNameMap maps the KCErrors to their string names.

View Source
var KCErrorTextMap = map[KCError]string{
	KCERR_UNKNOWN:               "Unknown",
	KCERR_NOT_FOUND:             "Not Found",
	KCERR_NO_ACCESS:             "No Access",
	KCERR_NETWORK_ERROR:         "Network Error",
	KCERR_SERVER_NOT_RESPONDING: "Server Not Responding",
	KCERR_INVALID_TYPE:          "Invalid Type",
	KCERR_DATABASE_ERROR:        "Database Error",
	KCERR_COLLISION:             "Object Collision",
	KCERR_LOGON_FAILED:          "Logon Failed",
	KCERR_HAS_MESSAGES:          "Object With Message Children",
	KCERR_HAS_FOLDERS:           "Object With Folder Children",
	KCERR_HAS_RECIPIENTS:        "Object With Recipient Children",
	KCERR_HAS_ATTACHMENTS:       "Object With Attachment Children",
	KCERR_NOT_ENOUGH_MEMORY:     "Not Enough Memory",
	KCERR_TOO_COMPLEX:           "Too Complex To Be Processed",
	KCERR_END_OF_SESSION:        "End Of Session",
	KCWARN_CALL_KEEPALIVE:       "",
	KCERR_UNABLE_TO_ABORT:       "Unable To Abort",
	KCERR_NOT_IN_QUEUE:          "",
	KCERR_INVALID_PARAMETER:     "Invalid Parameter",
	KCWARN_PARTIAL_COMPLETION:   "Partially Completed Operation",
	KCERR_INVALID_ENTRYID:       "Invalid EntryID",
	KCERR_BAD_VALUE:             "Type Error",
	KCERR_NO_SUPPORT:            "Not Supported",
	KCERR_TOO_BIG:               "Request Too Large",
	KCWARN_POSITION_CHANGED:     "",
	KCERR_FOLDER_CYCLE:          "",
	KCERR_STORE_FULL:            "Store Full Quota Reached",
	KCERR_PLUGIN_ERROR:          "Plugin Failed To Start",
	KCERR_UNKNOWN_OBJECT:        "",
	KCERR_NOT_IMPLEMENTED:       "Not Implemented",
	KCERR_DATABASE_NOT_FOUND:    "Database Not Found",
	KCERR_INVALID_VERSION:       "Database Version Unexpected",
	KCERR_UNKNOWN_DATABASE:      "",
	KCERR_NOT_INITIALIZED:       "",
	KCERR_CALL_FAILED:           "",
	KCERR_SSO_CONTINUE:          "SSO Success",
	KCERR_TIMEOUT:               "Timeout",
	KCERR_INVALID_BOOKMARK:      "",
	KCERR_UNABLE_TO_COMPLETE:    "",
	KCERR_UNKNOWN_INSTANCE_ID:   "",
	KCERR_IGNORE_ME:             "",
	KCERR_BUSY:                  "Task Already In Progress",
	KCERR_OBJECT_DELETED:        "Object Deleted",
	KCERR_USER_CANCEL:           "User Canceled Operation",
	KCERR_UNKNOWN_FLAGS:         "",
	KCERR_SUBMITTED:             "",
}

KCErrorTextMap maps the KCErrors to textual description.

View Source
var (
	// MUIDECSAB is the GUID used in AB EntryIDs (ABEID). Definition copied
	// from kopanocore/common/include/kopano/ECGuid.h
	MUIDECSAB = DEFINE_GUID(0x50a921ac, 0xd340, 0x48ee, [8]byte{0xb3, 0x19, 0xfb, 0xa7, 0x53, 0x30, 0x44, 0x25})
)

Functions

func ABEIDEqual

func ABEIDEqual(first, second ABEID) bool

ABEIDEqual returns true if the provided btwo ABEID refer to the same entry considering all relevant fields, ignoring the not relevant (like ID).

func DEFINE_GUID

func DEFINE_GUID(l uint32, w1, w2 uint16, b [8]byte) [16]byte

DEFINE_GUID is a helper to define byte representations of GUIDs.

func KCErrorText

func KCErrorText(code KCError) string

KCErrorText returns a text for the KC error. It returns the empty string if the code is unknown.

func SetX509KeyPairToTLSConfig

func SetX509KeyPairToTLSConfig(certFile, keyFile string, config *tls.Config) (*tls.Config, error)

SetX509KeyPairToTLSConfig reads and parses a public/private key pair from a pair of files and adds the resulting certificate to the provided TLs config. If the provided TLS config is nil, a new empty one will be created and returned.

Types

type ABEID

type ABEID interface {
	ABFlags() byte
	GUID() [16]byte
	Type() MAPIType
	ID() uint32
	ExID() []byte
	String() string
	Hex() string
}

ABEID defines the public interface for Kopano AB EntryIDs.

func NewABEIDFromBase64

func NewABEIDFromBase64(base64Value []byte) (ABEID, error)

NewABEIDFromBase64 takes a base64Std encoded byte value and returns the ABEID represented by those bytes.

func NewABEIDFromBytes

func NewABEIDFromBytes(value []byte) (ABEID, error)

NewABEIDFromBytes takes a byte value and returns the ABEID represented by those bytes.

func NewABEIDFromHex

func NewABEIDFromHex(hexValue []byte) (ABEID, error)

NewABEIDFromHex takes a hex encoded byte value and returns the ABEID represented by those bytes.

func NewABEIDV1

func NewABEIDV1(guid [16]byte, typE MAPIType, id uint32, exID []byte) (ABEID, error)

NewABEIDV1 creates a new NewABEIDV1 from the provided values.

type ABFlag

type ABFlag uint64

ABFlag is the type representing flags known to Kopano Core for AB.

const (
	MAPI_UNRESOLVED ABFlag = 0x00000000
	MAPI_AMBIGUOUS  ABFlag = 0x00000001
	MAPI_RESOLVED   ABFlag = 0x00000002
)

Kopano AB flags as defined in mapi4linux/include/mapidefs.h. This only defines the flags actually used or understood by kcc-go.

func (ABFlag) String

func (abf ABFlag) String() string

type ABResolveNamesResponse

type ABResolveNamesResponse struct {
	Er     KCError          `xml:"er"`
	RowSet []*PropTagRowSet `xml:"sRowSet>item"`
	Flags  []ABFlag         `xml:"aFlags>item"`
}

ABResolveNamesResponse holds the returned data of a SOAP request which resolves names.

type GetUserResponse

type GetUserResponse struct {
	Er   KCError `xml:"er"`
	User *User   `xml:"lpsUser"`
}

A GetUserResponse holds the returned data of a SOAP request which fetches user detail meta data.

type KCC

type KCC struct {
	Client       SOAPClient
	Capabilities KCFlag
	// contains filtered or unexported fields
}

A KCC is the client implementation base object containing the HTTP connection pool and other references to interface with a Kopano server via SOAP.

func NewKCC

func NewKCC(uri *url.URL) *KCC

NewKCC constructs a KCC instance with the provided URI. If no URI is passed, the current DefaultURI value will tbe used. Returns nil when the provided URI cannot be parsed or is not a valid kcc URI.

func NewKCCFromURI

func NewKCCFromURI(uri *url.URL) (*KCC, error)

NewKCCFromURI constructs a KCC instance with the provided URI. If no URI is passed, the current DefaultURI value will tbe used.

func NewKCCWithClient

func NewKCCWithClient(client SOAPClient) *KCC

NewKCCWithClient constructs a KCC instance using the provided SOAPClient. Use this function if you need specific SOAPClient settings.

func (*KCC) ABResolveNames

func (c *KCC) ABResolveNames(ctx context.Context, props []PT, request map[PT]interface{}, requestFlags ABFlag, sessionID KCSessionID, resolveNamesFlags KCFlag) (*ABResolveNamesResponse, error)

ABResolveNames searches the AB for the provided props using the provided request data and flags.

func (*KCC) GetUser

func (c *KCC) GetUser(ctx context.Context, userEntryID string, sessionID KCSessionID) (*GetUserResponse, error)

GetUser fetches a user's detail meta data of the provided user Entry ID using the provided session.

func (*KCC) Logoff

func (c *KCC) Logoff(ctx context.Context, sessionID KCSessionID) (*LogoffResponse, error)

Logoff terminates the provided session with the Kopano server.

func (*KCC) Logon

func (c *KCC) Logon(ctx context.Context, username, password string, logonFlags KCFlag) (*LogonResponse, error)

Logon creates a session with the Kopano server using the provided credentials.

func (*KCC) ResolveUsername

func (c *KCC) ResolveUsername(ctx context.Context, username string, sessionID KCSessionID) (*ResolveUserResponse, error)

ResolveUsername looks up the user ID of the provided username using the provided session.

func (*KCC) SSOLogon

func (c *KCC) SSOLogon(ctx context.Context, prefix SSOType, username string, input []byte, sessionID KCSessionID, logonFlags KCFlag) (*LogonResponse, error)

SSOLogon creates a session with the Kopano server using the provided credentials.

func (*KCC) SetClientApp

func (c *KCC) SetClientApp(name, version string) error

SetClientApp sets the clients app details as sent with requests to the accociated server.

func (*KCC) String

func (c *KCC) String() string

type KCError

type KCError uint64

KCError is an error as returned by Kopano core.

const (
	KCERR_NONE            = iota
	KCERR_UNKNOWN KCError = (1 << 31) | iota
	KCERR_NOT_FOUND
	KCERR_NO_ACCESS
	KCERR_NETWORK_ERROR
	KCERR_SERVER_NOT_RESPONDING
	KCERR_INVALID_TYPE
	KCERR_DATABASE_ERROR
	KCERR_COLLISION
	KCERR_LOGON_FAILED
	KCERR_HAS_MESSAGES
	KCERR_HAS_FOLDERS
	KCERR_HAS_RECIPIENTS
	KCERR_HAS_ATTACHMENTS
	KCERR_NOT_ENOUGH_MEMORY
	KCERR_TOO_COMPLEX
	KCERR_END_OF_SESSION
	KCWARN_CALL_KEEPALIVE
	KCERR_UNABLE_TO_ABORT
	KCERR_NOT_IN_QUEUE
	KCERR_INVALID_PARAMETER
	KCWARN_PARTIAL_COMPLETION
	KCERR_INVALID_ENTRYID
	KCERR_BAD_VALUE
	KCERR_NO_SUPPORT
	KCERR_TOO_BIG
	KCWARN_POSITION_CHANGED
	KCERR_FOLDER_CYCLE
	KCERR_STORE_FULL
	KCERR_PLUGIN_ERROR
	KCERR_UNKNOWN_OBJECT
	KCERR_NOT_IMPLEMENTED
	KCERR_DATABASE_NOT_FOUND
	KCERR_INVALID_VERSION
	KCERR_UNKNOWN_DATABASE
	KCERR_NOT_INITIALIZED
	KCERR_CALL_FAILED
	KCERR_SSO_CONTINUE
	KCERR_TIMEOUT
	KCERR_INVALID_BOOKMARK
	KCERR_UNABLE_TO_COMPLETE
	KCERR_UNKNOWN_INSTANCE_ID
	KCERR_IGNORE_ME
	KCERR_BUSY
	KCERR_OBJECT_DELETED
	KCERR_USER_CANCEL
	KCERR_UNKNOWN_FLAGS
	KCERR_SUBMITTED
)

Kopano Core error codes as defined in common/include/kopano/kcodes.h.

func (KCError) Error

func (err KCError) Error() string

type KCFlag

type KCFlag uint64

KCFlag is the type representing flags known to Kopano Core.

const (
	KOPANO_CAP_LARGE_SESSIONID KCFlag = 0x0010
	KOPANO_CAP_MULTI_SERVER    KCFlag = 0x0040
	KOPANO_CAP_ENHANCED_ICS    KCFlag = 0x0100
	KOPANO_CAP_UNICODE         KCFlag = 0x0200
)

Kopano capability flags as defined in provider/include/kcore.hpp. This only defines the flags actually used or understood by kcc-go.

const (
	KOPANO_LOGON_NO_UID_AUTH         KCFlag = 0x0001
	KOPANO_LOGON_NO_REGISTER_SESSION KCFlag = 0x0002
)

Kopano logon flags as defined in provider/include/kcore.hpp. This only defines the flags actually used or understood by kcc-go.

func (KCFlag) String

func (kcf KCFlag) String() string

type KCSessionID

type KCSessionID uint64

KCSessionID is the type for Kopano Core session IDs.

const KCNoSessionID KCSessionID = 0

KCNoSessionID define the value to use for KCSessionID when there is no session.

func (KCSessionID) String

func (sid KCSessionID) String() string

type LogoffResponse

type LogoffResponse struct {
	Er KCError `xml:"er"`
}

A LogoffResponse holds the returned data of a SOAP logoff request.

type LogonResponse

type LogonResponse struct {
	Er         KCError     `xml:"er" json:"-"`
	SessionID  KCSessionID `xml:"ulSessionId" json:"ulSessionId"`
	ServerGUID string      `xml:"sServerGuid" json:"sServerGuid"`
}

A LogonResponse holds tthe returned data of a SOAP logon request.

type MAPIType

type MAPIType uint32

MAPIType is the type representing MAPI types as used by Kopano Core.

const (
	MAPI_MAILUSER MAPIType = 0x00000006
)

Possible type values as defined in mapi4linux/include/mapidefs.h. We only define the ones know and understood by kcc-go.

func (MAPIType) String

func (mt MAPIType) String() string

type MVPropMap

type MVPropMap []*MVPropMapValue

A MVPropMap is a mapping of properties to a array of values.

func (MVPropMap) Get

func (pm MVPropMap) Get(id PT) ([]string, bool)

Get returns the accociaged MVPropMap's value for the provided id. When the property is not found, nil and false is returned.

type MVPropMapValue

type MVPropMapValue struct {
	ID           PT       `xml:"ulPropId" json:"ulPropId"`
	StringValues []string `xml:"sValues>item" json:"sValues"`
}

A MVPropMapValue represents a set of string values with an ID.

type PT

type PT uint64

PT is the type representing prop types values as ysed by Kopano Core.

func (PT) String

func (pt PT) String() string

type PropMap

type PropMap []*PropMapValue

A PropMap is a mapping of property IDs to a value.

func (PropMap) Get

func (pm PropMap) Get(id PT) (string, bool)

Get returns the accociaged PropMap's value for the provided id. When the property is not found, an empty string and false is returned.

type PropMapValue

type PropMapValue struct {
	ID          PT     `xml:"ulPropId" json:"ulPropId"`
	StringValue string `xml:"lpszValue" json:"lpszValue"`
}

A PropMapValue represents a single string Value with an ID.

type PropTagRowSet

type PropTagRowSet struct {
	PropTagValues []*PropTagRowSetValue `xml:"item,omitempty" json:"items"`
}

A PropTagRowSet represents a row set of array type with prop tag items.

type PropTagRowSetValue

type PropTagRowSetValue struct {
	PropTag      PT         `xml:"ulPropTag" json:"ulPropTag"`
	AStringValue string     `xml:"lpszA" json:"lpszA,omitempty"`
	ULValue      uint64     `xml:"ul" json:"ul,omitempty"`
	BinValue     []byte     `xml:"bin" json:"bin,omitempty"`
	BinValues    [][][]byte `xml:"mvbin>item" json:"mvbin,omitempty"`
}

A PropTagRowSetValue represents a prop tag row set value item.

type ResolveUserResponse

type ResolveUserResponse struct {
	Er          KCError `xml:"er"`
	ID          uint64  `xml:"ulUserId"`
	UserEntryID string  `xml:"sUserId"`
}

A ResolveUserResponse holds the returned data of a SOAP request which retruns a user's ID details.

type SOAPClient

type SOAPClient interface {
	DoRequest(ctx context.Context, payload *string, v interface{}) error
}

A SOAPClient is a network client which sends SOAP requests.

func NewSOAPClient

func NewSOAPClient(uri *url.URL) (SOAPClient, error)

NewSOAPClient creates a new SOAP client for the protocol matching the provided URL using default connection settings. If the protocol is unsupported, an error is returned.

func NewSOAPClientWithConfig

func NewSOAPClientWithConfig(uri *url.URL, config *SOAPClientConfig) (SOAPClient, error)

NewSOAPClientWithConfig create new SOAP client for the protocol matching the provided URL using defaulft uri and config if nil is providedl. If the protocol is unsupported, an error is returned.

type SOAPClientConfig

type SOAPClientConfig struct {
	HTTPClient   *http.Client
	SocketDialer *net.Dialer
}

A SOAPClientConfig is a collection of configuration settings used when constructing SOAP clients.

type SOAPHTTPClient

type SOAPHTTPClient struct {
	Client *http.Client
	URI    string
}

A SOAPHTTPClient implements a SOAP client using the HTTP protocol.

func NewSOAPHTTPClient

func NewSOAPHTTPClient(uri *url.URL, client *http.Client) (*SOAPHTTPClient, error)

NewSOAPHTTPClient creates a new SOAP HTTP client for the protocol matching the provided URL. A http.Client can be provided to further customize the behavior of the client instead of using the defaults. If the protocol is unsupported, an error is returned.

func (*SOAPHTTPClient) DoRequest

func (sc *SOAPHTTPClient) DoRequest(ctx context.Context, payload *string, v interface{}) error

DoRequest sends the provided payload data as SOAP through the means of the accociated client. Connections are automatically reused according to keep-alive configuration provided by the http.Client attached to the SOAPHTTPClient.

func (*SOAPHTTPClient) String

func (sc *SOAPHTTPClient) String() string

type SOAPSocketClient

type SOAPSocketClient struct {
	Dialer *net.Dialer
	Pool   gncp.ConnPool
	Path   string
}

A SOAPSocketClient implements a SOAP client connecting to a unix socket.

func NewSOAPSocketClient

func NewSOAPSocketClient(uri *url.URL, dialer *net.Dialer) (*SOAPSocketClient, error)

NewSOAPSocketClient creates a new SOAP socket client for the protocol matching the provided URL. A net.Dialer can be provided to further customize the behavior of the client instead of using the defaults. If the protocol is

unsupported, an error is returned.

func (*SOAPSocketClient) DoRequest

func (sc *SOAPSocketClient) DoRequest(ctx context.Context, payload *string, v interface{}) error

DoRequest sends the provided payload data as SOAP through the means of the accociated client.

func (*SOAPSocketClient) String

func (sc *SOAPSocketClient) String() string

type SSOType

type SSOType string

SSOType is the type of SSO to use with single sign on.

const (
	KOPANO_SSO_TYPE_NTML   SSOType = "NTLM"
	KOPANO_SSO_TYPE_KCOIDC SSOType = "KCOIDC"
	KOPANO_SSO_TYPE_KRB5   SSOType = ""
)

Known Kopano SSO types.

func (SSOType) String

func (sst SSOType) String() string

type Session

type Session struct {
	// contains filtered or unexported fields
}

Session holds the data structures to keep a session open on the accociated Kopano server.

func CreateSession

func CreateSession(ctx context.Context, c *KCC, id KCSessionID, serverGUID string, active bool) (*Session, error)

CreateSession creates a new Session without the server using the provided data.

func NewSSOSession

func NewSSOSession(ctx context.Context, c *KCC, prefix SSOType, username string, input []byte, sessionID KCSessionID) (*Session, error)

NewSSOSession connects to the provided server with the provided parameters, creates a new Session which will be automatically refreshed until detroyed.

func NewSession

func NewSession(ctx context.Context, c *KCC, username, password string) (*Session, error)

NewSession connects to the provided server with the provided parameters, creates a new Session which will be automatically refreshed until detroyed.

func (*Session) Context

func (s *Session) Context() context.Context

Context returns the accociated Session's context.

func (*Session) Destroy

func (s *Session) Destroy(ctx context.Context, logoff bool) error

Destroy logs off the accociated Session at the accociated Server and stops auto refreshing by canceling the accociated Session's Context. An error is retruned if the logoff request fails.

func (*Session) ID

func (s *Session) ID() KCSessionID

ID returns the accociated Session's ID.

func (*Session) IsActive

func (s *Session) IsActive() bool

IsActive retruns true when the accociated Session is not destroyed, if the last refresh was successful and if the last activity is recent enough.

func (*Session) Refresh

func (s *Session) Refresh() error

Refresh triggers a server call to let the server know that the accociated session is still active.

func (*Session) StartAutoRefresh

func (s *Session) StartAutoRefresh() error

StartAutoRefresh enables auto refresh of the accociated session.

func (*Session) StopAutoRefresh

func (s *Session) StopAutoRefresh() error

StopAutoRefresh stops a running auto refresh of the accociated session.

func (*Session) String

func (s *Session) String() string

type User

type User struct {
	ID          uint64     `xml:"ulUserId" json:"ulUserID"`
	Username    string     `xml:"lpszUsername" json:"lpszUsername"`
	MailAddress string     `xml:"lpszMailAddress" json:"lpszMailAddress"`
	FullName    string     `xml:"lpszFullName" json:"lpszFullName"`
	IsAdmin     uint64     `xml:"ulIsAdmin" json:"ulIsAdmin"`
	IsNonActive uint64     `xml:"ulIsNonActive" json:"ulIsNonActive"`
	UserEntryID string     `xml:"sUserId" json:"sUserId"`
	Props       *PropMap   `xml:"lpsPropmap>item" json:"lpsPropmap"`
	MVProps     *MVPropMap `xml:"lpsMVPropmap>item" json:"lpsMVPropmap"`
}

A User represents the meta data of a user as stored by Kopano server.

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL