Documentation ¶
Index ¶
- Constants
- Variables
- func Disconnect() (int, error)
- func ExecuteMailRuleDelete(ruleid []byte) error
- func ExtractMapiAddressBookURL(resp *utils.AutodiscoverResp) string
- func ExtractMapiURL(resp *utils.AutodiscoverResp) string
- func ExtractRPCURL(resp *utils.AutodiscoverResp) string
- func FastTransferFetchStep(handles []byte) ([]byte, error)
- func GetProps()
- func Init(config *utils.Session, lid, URL, ABKURL string, transport int)
- func Ping()
- func ReadPropertyValue(resp []byte, propType uint16) ([]byte, int)
- type ActionData
- type AddressBookPropertyRow
- type AddressBookPropertyValue
- type AddressBookPropertyValueList
- type AddressBookTaggedPropertyValue
- type BindRequest
- type BindRequestRPC
- type BindResponse
- type ConnectRequest
- type ConnectRequestRPC
- type ConnectResponse
- type DisconnectRequest
- type DnToMinIDRequest
- type DnToMinIDResponse
- type ErrorCode
- type ErrorMapiCode
- type ExecuteRequest
- type ExecuteRequestRPC
- type ExecuteResponse
- type GetSpecialTableRequest
- type GetSpecialTableResponse
- type LargePropertyTagArray
- type ModifyRecipientRow
- type PropertyRow
- type PropertyTag
- type QueryRowsRequest
- type QueryRowsResponse
- type ROP
- type ROPBuffer
- type RPCHeader
- type RecipientRow
- type Request
- type RgbAuxIn
- type RopBuffer
- type RopCreateAttachmentRequest
- type RopCreateAttachmentResponse
- type RopCreateFolderRequest
- type RopCreateFolderResponse
- type RopCreateMessageRequest
- type RopCreateMessageResponse
- type RopDeleteFolderRequest
- type RopDeleteFolderResponse
- type RopDeleteMessagesRequest
- type RopDeleteMessagesResponse
- type RopDisconnectRequest
- type RopEmptyFolderRequest
- type RopEmptyFolderResponse
- type RopFastTransferDestinationConfigureRequest
- type RopFastTransferDestinationConfigureResponse
- type RopFastTransferDestinationPutBufferRequest
- type RopFastTransferSourceCopyPropertiesRequest
- type RopFastTransferSourceCopyPropertiesResponse
- type RopFastTransferSourceCopyToRequest
- type RopFastTransferSourceGetBufferRequest
- type RopFastTransferSourceGetBufferResponse
- type RopGetContentsTableRequest
- type RopGetContentsTableResponse
- type RopGetHierarchyTableRequest
- type RopGetHierarchyTableResponse
- type RopGetPropertiesSpecific
- type RopGetPropertiesSpecificResponse
- type RopGetRulesTableRequest
- type RopGetRulesTableResponse
- type RopLogonRequest
- type RopLogonResponse
- type RopModifyRecipientsRequest
- type RopModifyRecipientsResponse
- type RopModifyRulesRequest
- type RopModifyRulesRequestBuffer
- type RopOpenFolderRequest
- type RopOpenFolderResponse
- type RopOpenMessageRequest
- type RopOpenMessageResponse
- type RopOpenStreamRequest
- type RopOpenStreamResponse
- type RopQueryRowsRequest
- type RopQueryRowsResponse
- type RopReadStreamRequest
- type RopReleaseRequest
- type RopReleaseResponse
- type RopRequest
- type RopResponse
- type RopRestrictRequest
- type RopSaveChangesAttachmentRequest
- type RopSaveChangesAttachmentResponse
- type RopSaveChangesMessageRequest
- type RopSaveChangesMessageResponse
- func CreateMessage(folderID []byte, properties []TaggedPropertyValue) (*RopSaveChangesMessageResponse, error)
- func SaveMessageFast(inputHandle, responseHandle byte, serverHandles []byte) (*RopSaveChangesMessageResponse, error)
- func SetPropertyFast(folderid []byte, messageid []byte, property TaggedPropertyValue) (*RopSaveChangesMessageResponse, error)
- type RopSetColumnsRequest
- type RopSetColumnsResponse
- type RopSetMessageStatusRequest
- type RopSetMessageStatusResponse
- type RopSetPropertiesRequest
- type RopSetPropertiesResponse
- type RopSetStreamSizeRequest
- type RopSetStreamSizeResponse
- type RopSubmitMessageRequest
- type RopSubmitMessageResponse
- type RopSynchronizationOpenCollectorRequest
- type RopSynchronizationOpenCollectorResponse
- type RopWriteStreamRequest
- type RopWriteStreamResponse
- type Rule
- type RuleAction
- type RuleActionBlock
- type RuleCondition
- type RuleData
- type STAT
- type SeekEntriesRequest
- type SeekEntriesResponse
- type StandardPropertyRow
- type TaggedPropertyValue
- type TransportError
Constants ¶
const ( UseAdminPrivilege = 0x00000001 Public = 0x00000002 HomeLogon = 0x00000004 TakeOwnership = 0x00000008 AlternateServer = 0x00000100 IgnoreHomeMDB = 0x00000200 NoMail = 0x00000400 UserPerMdbReplidMapping = 0x01000000 SupportProgress = 0x20000000 )
OpenFlags
const ( PtypInteger16 = 0x0002 PtypInteger32 = 0x0003 PtypInteger64 = 0x0014 PtypFloating32 = 0x0004 PtypFloating64 = 0x0005 PtypBoolean = 0x000B PtypString = 0x001F PtypString8 = 0x001E PtypGUID = 0x0048 PtypRuleAction = 0x00FE PtypRestriction = 0x00FD PtypBinary = 0x0102 PtypMultipleBinary = 0x1102 PtypTime = 0x0040 )
Property Data types
const ( TOP = 0 //Contains outgoing IPM messages. DEFFEREDACTION = 1 //Contains IPM messages that are marked for deletion. SPOOLERQ = 2 //Contains IPM messages that have been sent. IPM = 3 //IPM root folder Contains folders for managing IPM messages. INBOX = 4 //Receive folder Contains incoming messages for a particular message class. OUTBOX = 5 //Search-results root folder Contains folders for managing search results. SENT = 6 //Common-views root folder Contains folders for managing views for the message store. DELETED = 7 //Personal-views root folder COMMON = 8 SCHEDULE = 9 FINDER = 10 VIEWS = 11 SHORTCUTS = 12 )
Folder id/locations -- https://msdn.microsoft.com/en-us/library/office/cc815825.aspx ^ this seems to lie
const ( MSRemoteDownload = 0x00001000 MSInConflict = 0x00000800 MSRemoteDelete = 0x00002000 )
Message status flags
const ( MAPI_E_INTERFACE_NOT_SUPPORTED mapicode = 0x80004002 MAPI_E_CALL_FAILED mapicode = 0x80004005 MAPI_E_NO_ACCESS mapicode = 0x80070005 MAPI_E_NOT_ENOUGH_MEMORY mapicode = 0x8007000e MAPI_E_INVALID_PARAMETER mapicode = 0x80070057 MAPI_E_NO_SUPPORT mapicode = 0x80040102 MAPI_E_BAD_CHARWIDTH mapicode = 0x80040103 MAPI_E_STRING_TOO_LONG mapicode = 0x80040105 MAPI_E_UNKNOWN_FLAGS mapicode = 0x80040106 MAPI_E_INVALID_ENTRYID mapicode = 0x80040107 MAPI_E_INVALID_OBJECT mapicode = 0x80040108 MAPI_E_OBJECT_CHANGED mapicode = 0x80040109 MAPI_E_OBJECT_DELETED mapicode = 0x8004010a MAPI_E_BUSY mapicode = 0x8004010b MAPI_E_NOT_ENOUGH_DISK mapicode = 0x8004010d MAPI_E_NOT_ENOUGH_RESOURCES mapicode = 0x8004010e MAPI_E_NOT_FOUND mapicode = 0x8004010f MAPI_E_VERSION mapicode = 0x80040110 MAPI_E_LOGON_FAILED mapicode = 0x80040111 MAPI_E_SESSION_LIMIT mapicode = 0x80040112 MAPI_E_USER_CANCEL mapicode = 0x80040113 MAPI_E_UNABLE_TO_ABORT mapicode = 0x80040114 MAPI_E_NETWORK_ERROR mapicode = 0x80040115 MAPI_E_DISK_ERROR mapicode = 0x80040116 MAPI_E_TOO_COMPLEX mapicode = 0x80040117 MAPI_E_BAD_COLUMN mapicode = 0x80040118 MAPI_E_EXTENDED_ERROR mapicode = 0x80040119 MAPI_E_COMPUTED mapicode = 0x8004011a MAPI_E_CORRUPT_DATA mapicode = 0x8004011b MAPI_E_UNCONFIGURED mapicode = 0x8004011c MAPI_E_FAILONEPROVIDER mapicode = 0x8004011d MAPI_E_UNKNOWN_CPID mapicode = 0x8004011e MAPI_E_UNKNOWN_LCID mapicode = 0x8004011f MAPI_E_PASSWORD_CHANGE_REQUIRED mapicode = 0x80040120 MAPI_E_PASSWORD_EXPIRED mapicode = 0x80040121 MAPI_E_INVALID_WORKSTATION_ACCOUNT mapicode = 0x80040122 MAPI_E_INVALID_ACCESS_TIME mapicode = 0x80040123 MAPI_E_ACCOUNT_DISABLED mapicode = 0x80040124 MAPI_E_END_OF_SESSION mapicode = 0x80040200 MAPI_E_UNKNOWN_ENTRYID mapicode = 0x80040201 MAPI_E_MISSING_REQUIRED_COLUMN mapicode = 0x80040202 MAPI_W_NO_SERVICE mapicode = 0x00040203 MAPI_E_BAD_VALUE mapicode = 0x80040301 MAPI_E_INVALID_TYPE mapicode = 0x80040302 MAPI_E_TYPE_NO_SUPPORT mapicode = 0x80040303 MAPI_E_UNEXPECTED_TYPE mapicode = 0x80040304 MAPI_E_TOO_BIG mapicode = 0x80040305 MAPI_E_DECLINE_COPY mapicode = 0x80040306 MAPI_E_UNEXPECTED_ID mapicode = 0x80040307 MAPI_W_ERRORS_RETURNED mapicode = 0x00040380 MAPI_E_UNABLE_TO_COMPLETE mapicode = 0x80040400 MAPI_E_TIMEOUT mapicode = 0x80040401 MAPI_E_TABLE_EMPTY mapicode = 0x80040402 MAPI_E_TABLE_TOO_BIG mapicode = 0x80040403 MAPI_E_INVALID_BOOKMARK mapicode = 0x80040405 MAPI_W_POSITION_CHANGED mapicode = 0x00040481 MAPI_W_APPROX_COUNT mapicode = 0x00040482 MAPI_E_WAIT mapicode = 0x80040500 MAPI_E_CANCEL mapicode = 0x80040501 MAPI_E_NOT_ME mapicode = 0x80040502 MAPI_W_CANCEL_MESSAGE mapicode = 0x00040580 MAPI_E_CORRUPT_STORE mapicode = 0x80040600 MAPI_E_NOT_IN_QUEUE mapicode = 0x80040601 MAPI_E_NO_SUPPRESS mapicode = 0x80040602 MAPI_E_COLLISION mapicode = 0x80040604 MAPI_E_NOT_INITIALIZED mapicode = 0x80040605 MAPI_E_NON_STANDARD mapicode = 0x80040606 MAPI_E_NO_RECIPIENTS mapicode = 0x80040607 MAPI_E_SUBMITTED mapicode = 0x80040608 MAPI_E_HAS_FOLDERS mapicode = 0x80040609 MAPI_E_HAS_MESSAGES mapicode = 0x8004060a MAPI_E_FOLDER_CYCLE mapicode = 0x8004060b MAPI_E_STORE_FULL mapicode = 0x8004060c MAPI_E_LOCKID_LIMIT mapicode = 0x8004060D MAPI_W_PARTIAL_COMPLETION mapicode = 0x00040680 MAPI_E_AMBIGUOUS_RECIP mapicode = 0x80040700 SYNC_E_OBJECT_DELETED mapicode = 0x80040800 SYNC_E_IGNORE mapicode = 0x80040801 SYNC_E_CONFLICT mapicode = 0x80040802 SYNC_E_NO_PARENT mapicode = 0x80040803 SYNC_E_INCEST mapicode = 0x80040804 SYNC_E_UNSYNCHRONIZED mapicode = 0x80040805 SYNC_W_PROGRESS mapicode = 0x00040820 SYNC_W_CLIENT_CHANGE_NEWER mapicode = 0x00040821 )
const HTTP int = 1
HTTP transport type for MAPI over HTTP types
const RPC int = 2
RPC over HTTP transport type for traditional MAPI
Variables ¶
var ( //ErrTransport for when errors occurr on the transport layer ErrTransport = errors.New("mapi: a transport layer error occurred") //ErrMapiNonZero for non-zero return code in a MAPI request ErrMapiNonZero = errors.New("mapi: non-zero return value") //ErrUnknown hmm, we didn't account for this ErrUnknown = errors.New("mapi: an unhandled exception occurred") //ErrNotAdmin when attempting to get admin access to a mailbox ErrNotAdmin = errors.New("mapi: Invalid logon. Admin privileges requested but user is not admin") )
var AuthSession *utils.Session
AuthSession holds all our session related info
var PidTagAccess = PropertyTag{PtypInteger32, 0x0ff4}
PidTagAccess indicates operations available
var PidTagAddressBookDisplayNamePrintable = PropertyTag{PtypString, 0x39FF}
PidTagAddressBookDisplayNamePrintable used in recepient
var PidTagAddressType = PropertyTag{PtypString, 0x3001}
PidTagAddressType display name of the folder
var PidTagBody = PropertyTag{PtypString, 0x1000}
PidTagBody a
var PidTagBodyContentID = PropertyTag{PtypString, 0x1015}
PidTagBodyContentID a
var PidTagBodyHTML = PropertyTag{PtypBinary, 0x1013}
PidTagBodyHTML is the message id of a message in a store
var PidTagContentCount = PropertyTag{PtypInteger32, 0x3602}
PidTagContentCount specifies the number of rows under the header row
var PidTagContentUnreadCount = PropertyTag{PtypInteger32, 0x3603}
PidTagContentUnreadCount specifies the number of rows under the header row
var PidTagConversationTopic = PropertyTag{PtypString, 0x0070}
PidTagConversationTopic a
var PidTagDefaultPostMessageClass = PropertyTag{PtypString, 0x36e5}
PidTagDefaultPostMessageClass contains message class of the object
var PidTagDisplayName = PropertyTag{PtypString, 0x3001}
PidTagDisplayName display name of the folder
var PidTagDisplayType = PropertyTag{PtypInteger32, 0x3900}
PidTagDisplayType used in recepient
var PidTagDisplayTypeEx = PropertyTag{PtypInteger32, 0x3905}
PidTagDisplayTypeEx used in recepient
var PidTagEmailAddress = PropertyTag{PtypString, 0x3003}
PidTagEmailAddress display name of the folder
var PidTagEntryID = PropertyTag{PtypBinary, 0x0FFF}
PidTagEntryID display name of the folder
var PidTagFolderID = PropertyTag{PtypInteger64, 0x6748}
PidTagFolderID the ID of the folder
var PidTagFolderType = PropertyTag{PtypInteger32, 0x3601}
PidTagFolderType specifies the type of folder that includes the root folder,
var PidTagHTMLBody = PropertyTag{PtypString, 0x1013}
PidTagHTMLBody is the same as above?
var PidTagHidden = PropertyTag{PtypBoolean, 0x10F4}
PidTagHidden specify whether folder is hidden
var PidTagIconIndex = TaggedPropertyValue{PropertyTag{PtypInteger32, 0x1080}, []byte{0xFF, 0xFF, 0xFF, 0xFF}}
PidTagIconIndex index of the icon to display
var PidTagInstID = PropertyTag{PtypInteger64, 0x674D}
PidTagInstID identifier for all instances of a row in the table
var PidTagInstanceNum = PropertyTag{PtypInteger32, 0x674E}
PidTagInstanceNum identifier for single instance of a row in the table
var PidTagLocaleID = PropertyTag{PtypInteger32, 0x66A1}
PidTagLocaleID contains the Logon object LocaleID
var PidTagMemberName = PropertyTag{PtypBinary, 0x6672}
PidTagMemberName contains user-readable name of the user
var PidTagMessageClass = PropertyTag{PtypString, 0x001A}
PidTagMessageClass this will always be IPM.Note
var PidTagMessageClassIPMNote = TaggedPropertyValue{PropertyTag{PtypString, 0x001A}, utils.UniString("IPM.Note")}
PidTagMessageClassIPMNote this will always be IPM.Note
var PidTagMessageEditorFormat = TaggedPropertyValue{PropertyTag{PtypInteger32, 0x5909}, []byte{0x01, 0x00, 0x00, 0x00}}
PidTagMessageEditorFormat format lets do plaintext
var PidTagMessageFlags = PropertyTag{PtypInteger32, 0x0E07} //0x00000008
PidTagMessageFlags setting this to unsent
var PidTagMessageLocaleID = TaggedPropertyValue{PropertyTag{PtypInteger32, 0x3FF1}, []byte{0x09, 0x04, 0x00, 0x00}}
PidTagMessageLocaleID format lets do en-us
var PidTagMid = PropertyTag{PtypInteger64, 0x674A}
PidTagMid is the message id of a message in a store
var PidTagNativeBody = PropertyTag{PtypInteger32, 0x1016}
PidTagNativeBody format of the body
var PidTagNormalizedSubject = PropertyTag{PtypString, 0x0E1D}
PidTagNormalizedSubject used in recepient
var PidTagObjectType = PropertyTag{PtypInteger32, 0x0FFE}
PidTagObjectType used in recepient
var PidTagParentFolderID = PropertyTag{PtypInteger64, 0x6749}
PidTagParentFolderID Contains a value that contains the Folder ID
var PidTagPrimarySendAccount = PropertyTag{PtypString, 0x0E28}
PidTagPrimarySendAccount who is sending
var PidTagRecipientDisplayName = PropertyTag{PtypString, 0x5FF6}
PidTagRecipientDisplayName used in recepient
var PidTagRecipientEntryID = PropertyTag{PtypBinary, 0x5FF7}
PidTagRecipientEntryID used in recepient
var PidTagRecipientFlags = PropertyTag{PtypInteger32, 0x5FFD}
PidTagRecipientFlags used in recepient
var PidTagRecipientOrder = PropertyTag{PtypInteger32, 0x5FDF}
PidTagRecipientOrder used in recepient
var PidTagRecipientTrackStatus = PropertyTag{PtypInteger32, 0x5FFF}
PidTagRecipientTrackStatus used in recepient
var PidTagRuleActions = PropertyTag{PtypRuleAction, 0x6680}
PidTagRuleActions the TaggedPropertyValue for rule id
var PidTagRuleCondition = PropertyTag{PtypRestriction, 0x6679}
PidTagRuleCondition the TaggedPropertyValue for rule id
var PidTagRuleID = PropertyTag{PtypInteger64, 0x6674}
PidTagRuleID the TaggedPropertyValue for rule id
var PidTagRuleLevel = PropertyTag{PtypInteger32, 0x6683}
PidTagRuleLevel the TaggedPropertyValue for rule level
var PidTagRuleName = PropertyTag{PtypString, 0x6682}
PidTagRuleName the TaggedPropertyValue for rule id
var PidTagRuleProvider = PropertyTag{PtypString, 0x6681}
PidTagRuleProvider the TaggedPropertyValue for rule id
var PidTagRuleProviderData = PropertyTag{PtypBinary, 0x6684}
PidTagRuleProviderData the TaggedPropertyValue for rule id
var PidTagRuleSequence = PropertyTag{PtypInteger32, 0x6676}
PidTagRuleSequence the TaggedPropertyValue for rule id
var PidTagRuleState = PropertyTag{PtypInteger32, 0x6677}
PidTagRuleState the TaggedPropertyValue for rule id
var PidTagRuleUserFlags = PropertyTag{PtypInteger32, 0x6678}
PidTagRuleUserFlags the TaggedPropertyValue for rule user flags
var PidTagSMTPAddress = PropertyTag{PtypString, 0x39FE}
PidTagSMTPAddress used in recepient
var PidTagSendInternetEncoding = PropertyTag{PtypInteger32, 0x3a71}
PidTagSendInternetEncoding used in recepient
var PidTagSentMailSvrEID = PropertyTag{0x00FB, 0x6740}
PidTagSentMailSvrEID id of the sent folder
var PidTagSubfolders = PropertyTag{PtypBoolean, 0x360a}
PidTagSubfolders specifies whether the folder has subfolders
var PidTagSubject = PropertyTag{PtypString, 0x0037}
PidTagSubject used in recepient
var PidTagSubjectPrefix = PropertyTag{PtypString, 0x0003}
PidTagSubjectPrefix used in recepient
var Unspecifiedproperty = PropertyTag{PtypInteger32, 0x5FDE}
Unspecifiedproperty used in recepient
Functions ¶
func Disconnect ¶
Disconnect function to be nice and disconnect us from the server This is strictly necessary but hey... lets follow protocol
func ExecuteMailRuleDelete ¶
ExecuteMailRuleDelete function to delete mailrules
func ExtractMapiAddressBookURL ¶
func ExtractMapiAddressBookURL(resp *utils.AutodiscoverResp) string
ExtractMapiAddressBookURL extract the External mapi url from the autodiscover response
func ExtractMapiURL ¶
func ExtractMapiURL(resp *utils.AutodiscoverResp) string
ExtractMapiURL extract the External mapi url from the autodiscover response
func ExtractRPCURL ¶
func ExtractRPCURL(resp *utils.AutodiscoverResp) string
ExtractRPCURL extract the External RPC url from the autodiscover response
func FastTransferFetchStep ¶
FastTransferFetchStep fetches the next part of a fast TransferBuffer
Types ¶
type ActionData ¶
type ActionData struct { ActionElem []byte //NameLen uint8 ActionName []byte Element []byte //TriggerLen uint8 Triggger []byte Elem []byte //EndpointLen uint8 EndPoint []byte }
ActionData struct
type AddressBookPropertyRow ¶
type AddressBookPropertyRow struct { Flags uint8 //if 0x0 -- ValueArray = type(AddressBookPropertyValue) //if 0x1 ValueArray = type(AddressBookFlaggedPropertyValueWithType) AddressBookPropertyValue []AddressBookPropertyValue }
AddressBookPropertyRow struct to hold addressbook entries
func (*AddressBookPropertyRow) Unmarshal ¶
func (abpr *AddressBookPropertyRow) Unmarshal(resp []byte, columns LargePropertyTagArray) (int, error)
Unmarshal func
type AddressBookPropertyValue ¶
type AddressBookPropertyValue struct {
Value []byte
}
AddressBookPropertyValue holds an addressbook value
func (AddressBookPropertyValue) Marshal ¶
func (abpv AddressBookPropertyValue) Marshal() []byte
Marshal turn AddressBookPropertyValue into Bytes
type AddressBookPropertyValueList ¶
type AddressBookPropertyValueList struct { PropertyValueCount uint32 PropertyValues []AddressBookTaggedPropertyValue }
AddressBookPropertyValueList used to list addressbook
type AddressBookTaggedPropertyValue ¶
type AddressBookTaggedPropertyValue struct { PropertyType uint16 PropertyID uint16 PropertyValue []byte }
AddressBookTaggedPropertyValue used to hold a value for an Addressbook entry
type BindRequest ¶
type BindRequest struct { Flags uint32 HasState byte State []byte //optional 36 bytes AuxiliaryBufferSize uint32 AuxiliaryBuffer []byte }
BindRequest struct used in bind request to bind to addressbook
func (BindRequest) Marshal ¶
func (bindRequest BindRequest) Marshal() []byte
Marshal turn BindRequest into Bytes
type BindRequestRPC ¶
func (BindRequestRPC) Marshal ¶
func (bindRequest BindRequestRPC) Marshal() []byte
Marshal turn BindRequestRPC into Bytes
type BindResponse ¶
type BindResponse struct { StatusCode uint32 ErrorCode uint32 ServerGUID []byte AuxiliaryBufferSize uint32 AuxiliaryBuffer []byte }
BindResponse struct
func BindAddressBook ¶
func BindAddressBook() (*BindResponse, error)
BindAddressBook function to bind to the AddressBook provider
func BindAddressBookRPC ¶
func BindAddressBookRPC() (*BindResponse, error)
BindAddressBookRPC function to bind to the AddressBook provider
type ConnectRequest ¶
type ConnectRequest struct { UserDN []byte Flags uint32 DefaultCodePage uint32 LcidString uint32 LcidSort uint32 AuxilliaryBufSize uint32 AuxilliaryBuf []byte }
ConnectRequest struct
func (ConnectRequest) Marshal ¶
func (connRequest ConnectRequest) Marshal() []byte
Marshal turn ConnectRequest into Bytes
type ConnectRequestRPC ¶
type ConnectRequestRPC struct { DNLen uint32 Reserved uint32 DNLenActual uint32 UserDN []byte Flags uint32 DNHash uint32 CbLimit uint32 //[]byte DefaultCodePage uint32 LcidString uint32 LcidSort uint32 IcxrLink uint32 FCanConvertCodePage uint16 ClientVersion []byte TimeStamp uint32 AuxilliaryBufSize uint32 AuxilliaryBuf []byte }
ConnectRequestRPC ConnectRequest structure for RPC
func (ConnectRequestRPC) Marshal ¶
func (connRequest ConnectRequestRPC) Marshal() []byte
Marshal turn ConnectRequest into Bytes
type ConnectResponse ¶
type ConnectResponse struct { StatusCode uint32 //if 0x00000 --> failure and we only have AuzilliaryBufferSize and AuxilliaryBuffer ErrorCode uint32 PollsMax uint32 RetryCount uint32 RetryDelay uint32 DNPrefix []byte DisplayName []byte AuxilliaryBufferSize uint32 AuxilliaryBuffer []byte }
ConnectResponse strcut
func (*ConnectResponse) Unmarshal ¶
func (connResponse *ConnectResponse) Unmarshal(resp []byte) error
Unmarshal function to convert response into ConnectResponse struct
type DisconnectRequest ¶
DisconnectRequest structure
func (DisconnectRequest) Marshal ¶
func (disconnectRequest DisconnectRequest) Marshal() []byte
Marshal turn DisconnectRequest into Bytes
type DnToMinIDRequest ¶
type DnToMinIDRequest struct { Reserved uint32 HasNames byte NameCount uint32 NameValues []byte AuxiliaryBufferSize uint32 AuxiliaryBuffer []byte }
DnToMinIDRequest struct used to get list of addressbooks
func (DnToMinIDRequest) Marshal ¶
func (dntominid DnToMinIDRequest) Marshal() []byte
Marshal turn DnToMinIDRequest into Bytes
type DnToMinIDResponse ¶
type DnToMinIDResponse struct { StatusCode uint32 ErrorCode uint32 HasMinimalIds byte MinimalIDCount uint32 //if hasversion is set MinimalIds []byte AuxiliaryBufferSize uint32 AuxiliaryBuffer []byte }
DnToMinIDResponse struct
func DnToMinID ¶
func DnToMinID() (*DnToMinIDResponse, error)
DnToMinID function to map DNs to a set of Minimal Entry IDs
type ErrorCode ¶
type ErrorCode struct {
ErrorCode uint32
}
ErrorCode returns the mapi error code encountered
type ErrorMapiCode ¶
type ErrorMapiCode struct {
X mapicode
}
ErrorMapiCode provides a mapping of uint32 error code to string
type ExecuteRequest ¶
type ExecuteRequest struct { Flags uint32 //[]byte //lets stick to ropFlagsNoXorMagic RopBufferSize uint32 RopBuffer ROPBuffer MaxRopOut uint32 RPCPtr []byte AuxilliaryBufSize uint32 AuxilliaryBuf []byte }
ExecuteRequest struct
func (*ExecuteRequest) CalcSizes ¶
func (execRequest *ExecuteRequest) CalcSizes(isRPC bool) error
CalcSizes func to calculate the different size fields in the ROP buffer
func (*ExecuteRequest) Init ¶
func (execRequest *ExecuteRequest) Init()
Init function to create a base ExecuteRequest object
func (ExecuteRequest) Marshal ¶
func (execRequest ExecuteRequest) Marshal() []byte
Marshal turn ExecuteRequest into Bytes
func (ExecuteRequest) MarshalRPC ¶
func (execRequest ExecuteRequest) MarshalRPC() []byte
MarshalRPC turn ExecuteRequest into Bytes
type ExecuteRequestRPC ¶
type ExecuteRequestRPC struct { Flags uint32 //[]byte //lets stick to ropFlagsNoXorMagic RopBufferSize uint32 RopBuffer ROPBuffer MaxRopOut uint32 }
ExecuteRequestRPC struct for RPC ExecuteRequest, slightly different from MAPI/HTTP
func (ExecuteRequestRPC) Marshal ¶
func (execRequest ExecuteRequestRPC) Marshal() []byte
Marshal turn ExecuteRequest into Bytes
type ExecuteResponse ¶
type ExecuteResponse struct { StatusCode uint32 //if 0x00000 --> failure and we only have AuzilliaryBufferSize and AuxilliaryBuffer ErrorCode uint32 Flags uint32 //0x00000000 always RopBufferSize uint32 RopBuffer []byte //struct{} AuxilliaryBufSize uint32 AuxilliaryBuf []byte }
ExecuteResponse struct
func ExecuteMailRuleAdd ¶
func ExecuteMailRuleAdd(rulename, triggerword, triggerlocation string, delete bool) (*ExecuteResponse, error)
ExecuteMailRuleAdd adds a new mailrules
func (*ExecuteResponse) Unmarshal ¶
func (execResponse *ExecuteResponse) Unmarshal(resp []byte) error
Unmarshal for ExecuteResponse the output seems to vary for MAPIHTTP and RPC MAPIHTTP StatusCode,ErrorCode,Flags,RopBufferSize RPC StatusCode,RopBufferSize,Flags,RopBufferSize
type GetSpecialTableRequest ¶
type GetSpecialTableRequest struct { Flags uint32 HasState byte State []byte //optional 36 bytes HasVersion byte Version uint32 //optional if HasVersion AuxiliaryBufferSize uint32 AuxiliaryBuffer []byte }
GetSpecialTableRequest struct used to get list of addressbooks
func (GetSpecialTableRequest) Marshal ¶
func (specialTableRequest GetSpecialTableRequest) Marshal() []byte
Marshal turn GetSpecialTableRequest into Bytes
type GetSpecialTableResponse ¶
type GetSpecialTableResponse struct { StatusCode uint32 ErrorCode uint32 CodePage uint32 HasVersion byte Version uint32 //if hasversion is set HasRows byte RowsCount uint32 //if HasRows is set Rows []AddressBookPropertyValueList AuxiliaryBufferSize uint32 AuxiliaryBuffer []byte }
GetSpecialTableResponse struct
func GetSpecialTable ¶
func GetSpecialTable() (*GetSpecialTableResponse, error)
GetSpecialTable function to get special table from addressbook provider
type LargePropertyTagArray ¶
type LargePropertyTagArray struct { PropertyTagCount uint32 PropertyTags []PropertyTag }
LargePropertyTagArray contains a list of propertytags
type ModifyRecipientRow ¶
type ModifyRecipientRow struct { RowID uint32 RecipientType uint8 RecipientRowSize uint16 RecipientRow RecipientRow }
ModifyRecipientRow contains information about a recipient
type PropertyRow ¶
PropertyRow used to hold the data of getRow requests such as RopGetPropertiesSpecific
func DecodeBufferToRows ¶
func DecodeBufferToRows(buff []byte, cols []PropertyTag) []PropertyRow
DecodeBufferToRows returns the property rows contained in the buffer, takes a list of propertytags. These are needed to figure out how to split the columns in the rows
type PropertyTag ¶
PropertyTag struct
type QueryRowsRequest ¶
type QueryRowsRequest struct { Flags uint32 HasState byte State []byte //36 bytes if hasstate ExplicitTableCount uint32 ExplicitTable []byte //array of MinimalEntryID RowCount uint32 HasColumns byte Columns LargePropertyTagArray //array of LargePropertyTagArray if hascolumns is set AuxiliaryBufferSize uint32 AuxiliaryBuffer []byte }
QueryRowsRequest struct used to get list of addressbooks
func (QueryRowsRequest) Marshal ¶
func (qrows QueryRowsRequest) Marshal() []byte
Marshal turn QueryRowsRequest into Bytes
type QueryRowsResponse ¶
type QueryRowsResponse struct { StatusCode uint32 ErrorCode uint32 HasState byte State []byte //36 bytes if hasState enabled HasColsAndRows byte Columns LargePropertyTagArray //array of LargePropertyTagArray //set if HasColsAndRows is set RowCount uint32 //if HasColsAndRows is non-zero RowData []AddressBookPropertyRow AuxiliaryBufferSize uint32 AuxiliaryBuffer []byte }
QueryRowsResponse struct
func QueryRows ¶
func QueryRows(rowCount int, state []byte, columns []PropertyTag) (*QueryRowsResponse, error)
QueryRows function gets number of rows from the specified explicit table
func SeekEntries ¶
func SeekEntries(entryStart []byte, columns []PropertyTag) (*QueryRowsResponse, error)
SeekEntries function moves the pointer to a new position in the addressbook
type RPCHeader ¶
type RPCHeader struct { Version uint16 //always 0x0000 Flags uint16 //0x0001 Compressed, 0x0002 XorMagic, 0x0004 Last Size uint16 SizeActual uint16 //Compressed size (if 0x0001 set) }
RPCHeader struct
type RecipientRow ¶
type RecipientRow struct { RecipientFlags uint16 //AddressPrefixUsed uint8 //DisplayType uint8 EmailAddress []byte DisplayName []byte SimpleDisplayName []byte RecipientColumnCount uint16 RecipientProperties StandardPropertyRow }
RecipientRow holds a recipient of a mail message
type RopCreateAttachmentRequest ¶
type RopCreateAttachmentRequest struct { RopID uint8 //0x23 LogonID uint8 InputHandle uint8 OutputHandle uint8 }
RopCreateAttachmentRequest used to create an attachment
type RopCreateAttachmentResponse ¶
type RopCreateAttachmentResponse struct { RopID uint8 //0x23 OutputHandle uint8 ReturnValue uint32 AttachmentID []byte }
RopCreateAttachmentResponse holds the response to a create attachment
type RopCreateFolderRequest ¶
type RopCreateFolderRequest struct { RopID uint8 //0x1C LogonID uint8 InputHandle uint8 OutputHandle uint8 FolderType uint8 UseUnicodeStrings uint8 OpenExisting uint8 Reserved uint8 DisplayName []byte Comment []byte }
RopCreateFolderRequest struct used to create a folder
func (RopCreateFolderRequest) Marshal ¶
func (createFolder RopCreateFolderRequest) Marshal() []byte
Marshal turn RopCreateFolderRequest into Bytes
type RopCreateFolderResponse ¶
type RopCreateFolderResponse struct { RopID uint8 //0x1C OutputHandle uint8 ReturnValue uint32 FolderID []byte IsExisting uint8 HasRules byte //bool IsGhosted byte //bool ServerCount uint16 //only if IsGhosted == true CheapServerCount uint16 //only if IsGhosted == true Servers []byte //only if IsGhosted == true }
RopCreateFolderResponse struct used to create a folder
func CreateFolder ¶
func CreateFolder(folderName string, hidden bool) (*RopCreateFolderResponse, error)
CreateFolder function to create a folder on the exchange server
type RopCreateMessageRequest ¶
type RopCreateMessageRequest struct { RopID uint8 //0x32 LogonID uint8 InputHandle uint8 OutputHandle uint8 CodePageID uint16 FolderID []byte AssociatedFlag byte //bool }
RopCreateMessageRequest struct used to open handle to new email message
func (RopCreateMessageRequest) Marshal ¶
func (createMessage RopCreateMessageRequest) Marshal() []byte
Marshal turn ExecuteRequest into Bytes
type RopCreateMessageResponse ¶
type RopCreateMessageResponse struct { RopID uint8 OutputHandle uint8 ReturnValue uint32 HasMessageID byte //bool MessageID []byte //bool }
RopCreateMessageResponse struct used to open handle to new email message
type RopDeleteFolderRequest ¶
type RopDeleteFolderRequest struct { RopID uint8 //0x1D LogonID uint8 InputHandle uint8 DeleteFolderFlags uint8 FolderID []byte }
RopDeleteFolderRequest used to delete a folder
func (RopDeleteFolderRequest) Marshal ¶
func (deleteFolder RopDeleteFolderRequest) Marshal() []byte
Marshal turn RopDeleteFolderRequest into Bytes
type RopDeleteFolderResponse ¶
type RopDeleteFolderResponse struct { RopID uint8 //0x1D InputHandle uint8 ReturnValue uint32 PartialComplete uint8 }
RopDeleteFolderResponse to delete a folder
func DeleteFolder ¶
func DeleteFolder(folderid []byte) (*RopDeleteFolderResponse, error)
DeleteFolder is used to delete a folder
type RopDeleteMessagesRequest ¶
type RopDeleteMessagesRequest struct { RopID uint8 //0x1E LogonID uint8 InputHandle uint8 WantSynchronous uint8 NotifyNonRead uint8 MessageIDCount uint16 MessageIDs []byte //messageIdCount * 64 bit identifiers }
RopDeleteMessagesRequest struct used to delete one or more messages
func (RopDeleteMessagesRequest) Marshal ¶
func (deleteMessage RopDeleteMessagesRequest) Marshal() []byte
Marshal turn ExecuteRequest into Bytes
type RopDeleteMessagesResponse ¶
type RopDeleteMessagesResponse struct { RopID uint8 InputHandle uint8 ReturnValue uint32 PartialCompletion uint8 }
RopDeleteMessagesResponse struct holds response for deleting messages
func DeleteMessages ¶
func DeleteMessages(folderid []byte, messageIDCount int, messageIDs []byte) (*RopDeleteMessagesResponse, error)
DeleteMessages is used to delete a message on the exchange server
type RopDisconnectRequest ¶
type RopDisconnectRequest struct { RopID uint8 //0x01 LogonID uint8 //logonID to use InputHandleIndex uint8 }
RopDisconnectRequest struct
type RopEmptyFolderRequest ¶
type RopEmptyFolderRequest struct { RopID uint8 //0x58 LogonID uint8 InputHandle uint8 WantAsynchronous uint8 WantDeleteAssociated uint8 }
RopEmptyFolderRequest used to delete all messages and subfolders from a folder
func (RopEmptyFolderRequest) Marshal ¶
func (emptyFolder RopEmptyFolderRequest) Marshal() []byte
Marshal turn RopFastTransferSourceCopyPropertiesRequest into Bytes
type RopEmptyFolderResponse ¶
type RopEmptyFolderResponse struct { RopID uint8 //0x58 InputHandle uint8 ReturnValue uint32 PartialComplete uint8 }
RopEmptyFolderResponse to emptying a folder
func EmptyFolder ¶
func EmptyFolder(folderid []byte) (*RopEmptyFolderResponse, error)
EmptyFolder is used to delete all contents of a folder
type RopFastTransferDestinationConfigureRequest ¶
type RopFastTransferDestinationConfigureRequest struct { RopID uint8 //0x53 LogonID uint8 InputHandle uint8 OutputHandle uint8 SourceOperation uint8 CopyFlags uint8 }
RopFastTransferDestinationConfigureRequest used to configure a destination buffer for fast TransferBuffer
func (RopFastTransferDestinationConfigureRequest) Marshal ¶
func (getBuff RopFastTransferDestinationConfigureRequest) Marshal() []byte
Marshal turn RopFastTransferDestinationConfigureRequest into Bytes
type RopFastTransferDestinationConfigureResponse ¶
type RopFastTransferDestinationConfigureResponse struct { RopID uint8 //0x53 OutputHandle uint8 ReturnValue uint32 }
RopFastTransferDestinationConfigureResponse used to configure a destination buffer for fast TransferBuffer
type RopFastTransferDestinationPutBufferRequest ¶
type RopFastTransferDestinationPutBufferRequest struct { RopID uint8 //0x53 LogonID uint8 InputHandle uint8 TransferDataSize uint16 TransferData []byte }
RopFastTransferDestinationPutBufferRequest to actually upload the data
func (RopFastTransferDestinationPutBufferRequest) Marshal ¶
func (getBuff RopFastTransferDestinationPutBufferRequest) Marshal() []byte
Marshal turn RopFastTransferDestinationConfigureRequest into Bytes
type RopFastTransferSourceCopyPropertiesRequest ¶
type RopFastTransferSourceCopyPropertiesRequest struct { RopID uint8 //0x69 LogonID uint8 InputHandle uint8 OutputHandle uint8 Level uint8 CopyFlags uint8 SendOptions uint8 PropertyTagCount uint16 PropertyTags []PropertyTag }
RopFastTransferSourceCopyPropertiesRequest struct used to open handle to message
func (RopFastTransferSourceCopyPropertiesRequest) Marshal ¶
func (getProps RopFastTransferSourceCopyPropertiesRequest) Marshal() []byte
Marshal turn RopFastTransferSourceCopyPropertiesRequest into Bytes
type RopFastTransferSourceCopyPropertiesResponse ¶
type RopFastTransferSourceCopyPropertiesResponse struct { RopID uint8 //0x4E InputHandle uint8 ReturnValue uint32 }
RopFastTransferSourceCopyPropertiesResponse struct used to open handle to message
type RopFastTransferSourceCopyToRequest ¶
type RopFastTransferSourceCopyToRequest struct { RopID uint8 //0x4D LogonID uint8 InputHandle uint8 OutputHandle uint8 Level uint8 CopyFlags uint32 SendOptions uint8 PropertyTagCount uint16 PropertyTags []PropertyTag }
RopFastTransferSourceCopyToRequest struct used to open handle to message
func (RopFastTransferSourceCopyToRequest) Marshal ¶
func (getProps RopFastTransferSourceCopyToRequest) Marshal() []byte
Marshal turn RopFastTransferSourceCopyToRequest into Bytes
type RopFastTransferSourceGetBufferRequest ¶
type RopFastTransferSourceGetBufferRequest struct { RopID uint8 //0x4E LogonID uint8 InputHandle uint8 BufferSize uint16 MaximumBufferSize uint16 //0xBABE }
RopFastTransferSourceGetBufferRequest struct used to open handle to message
func (RopFastTransferSourceGetBufferRequest) Marshal ¶
func (getBuff RopFastTransferSourceGetBufferRequest) Marshal() []byte
Marshal turn RopFastTransferSourceGetBufferRequest into Bytes
type RopFastTransferSourceGetBufferResponse ¶
type RopFastTransferSourceGetBufferResponse struct { RopID uint8 //0x4E InputHandle uint8 ReturnValue uint32 TransferStatus uint16 InProgressCount uint16 TotalStepCount uint16 Reserved uint8 //0x00 TotalTransferBufferSize uint16 TransferBuffer []byte BackoffTime uint32 }
RopFastTransferSourceGetBufferResponse struct used to open handle to message
func GetMessageFast ¶
func GetMessageFast(folderid, messageid []byte, columns []PropertyTag) (*RopFastTransferSourceGetBufferResponse, error)
GetMessageFast returns the specific fields from a message using the fast transfer buffers. This works better for large messages
type RopGetContentsTableRequest ¶
type RopGetContentsTableRequest struct { RopID uint8 //0x05 LogonID uint8 InputHandleIndex uint8 OutputHandleIndex uint8 TableFlags uint8 }
RopGetContentsTableRequest struct
func (RopGetContentsTableRequest) Marshal ¶
func (getContentsTable RopGetContentsTableRequest) Marshal() []byte
Marshal turn RopGetContentsTableRequest into Bytes
type RopGetContentsTableResponse ¶
type RopGetContentsTableResponse struct { RopID uint8 //0x05 OutputHandle uint8 ReturnValue uint32 RowCount uint32 }
RopGetContentsTableResponse struct
func GetContentsTable ¶
func GetContentsTable(folderid []byte) (*RopGetContentsTableResponse, []byte, error)
GetContentsTable function get's a folder from the folders id and returns a hanlde to the contents table for that folder
type RopGetHierarchyTableRequest ¶
type RopGetHierarchyTableRequest struct { RopID uint8 //0x04 LogonID uint8 InputHandle uint8 OutputHandle uint8 TableFlags uint8 }
RopGetHierarchyTableRequest struct used to get folder hierarchy
func (RopGetHierarchyTableRequest) Marshal ¶
func (getHierarchy RopGetHierarchyTableRequest) Marshal() []byte
Marshal turn RopGetHierarchyTableRequest into Bytes
type RopGetHierarchyTableResponse ¶
type RopGetHierarchyTableResponse struct { RopID uint8 //0x04 OutputHandle uint8 ReturnValue uint32 RowCount uint32 }
RopGetHierarchyTableResponse struct used to get folder hierarchy
func GetFolderHierarchy ¶
func GetFolderHierarchy(folderid []byte) (*RopGetHierarchyTableResponse, []byte, error)
GetFolderHierarchy function get's a folder from the folders id and returns a handle to the hierarchy table
type RopGetPropertiesSpecific ¶
type RopGetPropertiesSpecific struct { RopID uint8 //0x07 LogonID uint8 InputHandle uint8 PropertySizeLimit uint16 WantUnicode []byte //apparently bool PropertyTagCount uint16 PropertyTags []PropertyTag //[]byte }
RopGetPropertiesSpecific struct to get propertiesfor a folder
func (RopGetPropertiesSpecific) Marshal ¶
func (getProps RopGetPropertiesSpecific) Marshal() []byte
Marshal turn RopGetPropertiesSpecific into Bytes
type RopGetPropertiesSpecificResponse ¶
type RopGetPropertiesSpecificResponse struct { RopID uint8 //0x07 InputHandleIndex uint8 ReturnValue uint32 PropertySizeLimit uint16 RowData []PropertyRow }
RopGetPropertiesSpecificResponse struct to get propertiesfor a folder
func DecodeGetTableResponse ¶
func DecodeGetTableResponse(resp []byte, columns []PropertyTag) (*RopGetPropertiesSpecificResponse, error)
DecodeGetTableResponse function Unmarshals the various parts of a getproperties response (this includes the initial openfolder request) and returns the RopGetPropertiesSpecificResponse object to us, we can then cycle through the rows to view the values needs the list of columns that were supplied in the initial request.
func GetMessage ¶
func GetMessage(folderid, messageid []byte, columns []PropertyTag) (*RopGetPropertiesSpecificResponse, error)
GetMessage returns the specific fields from a message
func (*RopGetPropertiesSpecificResponse) Unmarshal ¶
func (ropGetPropertiesSpecificResponse *RopGetPropertiesSpecificResponse) Unmarshal(resp []byte, columns []PropertyTag) (int, error)
Unmarshal func
type RopGetRulesTableRequest ¶
type RopGetRulesTableRequest struct { RopID uint8 //0x3f LogonID uint8 InputHandleIndex uint8 OutputHandleIndex uint8 TableFlags byte }
RopGetRulesTableRequest struct
func (RopGetRulesTableRequest) Marshal ¶
func (getRules RopGetRulesTableRequest) Marshal() []byte
Marshal turn RopGetRulesTableRequest into Bytes
type RopGetRulesTableResponse ¶
RopGetRulesTableResponse strcut
type RopLogonRequest ¶
type RopLogonRequest struct { RopID uint8 //0xfe LogonID uint8 //logonID to use OutputHandleIndex uint8 LogonFlags byte OpenFlags uint32 //[]byte StoreState uint32 //0x00000000 EssdnSize uint16 Essdn []byte }
RopLogonRequest struct
func (RopLogonRequest) Marshal ¶
func (logonRequest RopLogonRequest) Marshal() []byte
Marshal turn RopLogonRequest into Bytes
type RopLogonResponse ¶
type RopLogonResponse struct { RopID uint8 OutputHandleIndex uint8 ReturnValue uint32 LogonFlags byte FolderIds []byte ResponseFlags byte MailboxGUID []byte RepID []byte ReplGUID []byte LogonTime []byte GwartTime []byte StoreState []byte }
RopLogonResponse struct
func Authenticate ¶
func Authenticate() (*RopLogonResponse, error)
Authenticate is used to create the MAPI session, get's session cookie ect
func AuthenticateFetchMailbox ¶
func AuthenticateFetchMailbox(essdn []byte) (*RopLogonResponse, error)
AuthenticateFetchMailbox func to perform step two of the authentication process
func AuthenticateHTTP ¶
func AuthenticateHTTP() (*RopLogonResponse, error)
AuthenticateHTTP does the authenctication, seems like RPC/HTTP and MAPI/HTTP has slightly different auths
func AuthenticateRPC ¶
func AuthenticateRPC() (*RopLogonResponse, error)
AuthenticateRPC does RPC version of authenticate
func (*RopLogonResponse) Unmarshal ¶
func (logonResponse *RopLogonResponse) Unmarshal(resp []byte) error
Unmarshal function to produce RopLogonResponse struct
type RopModifyRecipientsRequest ¶
type RopModifyRecipientsRequest struct { RopID uint8 //0x0E LogonID uint8 InputHandle uint8 ColumnCount uint16 RecipientColumns []PropertyTag RowCount uint16 RecipientRows []ModifyRecipientRow }
RopModifyRecipientsRequest to modify who is receiving email
func (RopModifyRecipientsRequest) Marshal ¶
func (modRecipients RopModifyRecipientsRequest) Marshal() []byte
Marshal turn RopModifyRecipientsRequest into Bytes
type RopModifyRecipientsResponse ¶
RopModifyRecipientsResponse to modify who is receiving email
type RopModifyRulesRequest ¶
type RopModifyRulesRequest struct { RopID uint8 //0x41 LoginID uint8 InputHandleIndex uint8 ModifyRulesFlag byte RulesCount uint16 RuleData RuleData }
RopModifyRulesRequest struct
type RopModifyRulesRequestBuffer ¶
type RopModifyRulesRequestBuffer struct { RopID uint8 //0x02 LogonID uint8 InputHandleIndex uint8 ModifyRulesFlag byte RulesCount uint16 RulesData []byte }
RopModifyRulesRequestBuffer struct
type RopOpenFolderRequest ¶
type RopOpenFolderRequest struct { RopID uint8 //0x02 LogonID uint8 InputHandle uint8 OutputHandle uint8 FolderID []byte OpenModeFlags uint8 }
RopOpenFolderRequest struct used to open a folder
func (RopOpenFolderRequest) Marshal ¶
func (openFolder RopOpenFolderRequest) Marshal() []byte
Marshal turn RopOpenFolder into Bytes
type RopOpenFolderResponse ¶
type RopOpenFolderResponse struct { RopID uint8 OutputHandle uint8 ReturnValue uint32 HasRules byte //bool IsGhosted byte //bool ServerCount uint16 //only if IsGhosted == true CheapServerCount uint16 //only if IsGhosted == true Servers []byte //only if IsGhosted == true }
RopOpenFolderResponse struct used to open a folder
func GetFolder ¶
func GetFolder(folderid int, columns []PropertyTag) (*RopOpenFolderResponse, error)
GetFolder function get's a folder from the folders id FolderIds can be any of the "specialFolders" as defined in Exchange mapi/datastructs.go folder id/locations constants
type RopOpenMessageRequest ¶
type RopOpenMessageRequest struct { RopID uint8 //0x03 LogonID uint8 InputHandle uint8 OutputHandle uint8 CodePageID uint16 FolderID []byte OpenModeFlags byte MessageID []byte }
RopOpenMessageRequest struct used to open handle to message
func (RopOpenMessageRequest) Marshal ¶
func (openMessage RopOpenMessageRequest) Marshal() []byte
Marshal turn RopOpenMessageRequest into Bytes
type RopOpenMessageResponse ¶
type RopOpenMessageResponse struct { RopID uint8 //0x03 OutputHandle uint8 ReturnValue uint32 HasNamedProperties byte SubjectPrefix []byte NormalizedSubject []byte RecipientCount uint16 ColumnCount uint16 RecipientColumns []PropertyTag RowCount uint8 RecipientRows []RecipientRow }
RopOpenMessageResponse struct used to open handle to message
type RopOpenStreamRequest ¶
type RopOpenStreamRequest struct { RopID uint8 //0x2B LogonID uint8 InputHandle uint8 OutputHandle uint8 PropertyTag []byte OpenModeFlags byte }
RopOpenStreamRequest struct used to open a stream
func (RopOpenStreamRequest) Marshal ¶
func (openStream RopOpenStreamRequest) Marshal() []byte
Marshal turn RopOpenStreamRequest into Bytes
type RopOpenStreamResponse ¶
type RopOpenStreamResponse struct { RopID uint8 //0x2B OutputHandle uint8 ReturnValue uint32 StreamSize uint32 }
RopOpenStreamResponse struct used to open a stream
type RopQueryRowsRequest ¶
type RopQueryRowsRequest struct { RopID uint8 //0x15 LogonID uint8 InputHandle uint8 QueryRowsFlags uint8 ForwardRead byte RowCount uint16 }
RopQueryRowsRequest struct used to select the columns to use
func (RopQueryRowsRequest) Marshal ¶
func (queryRows RopQueryRowsRequest) Marshal() []byte
Marshal turn the RopQueryRowsRequest into bytes
type RopQueryRowsResponse ¶
type RopQueryRowsResponse struct { RopID uint8 //0x15 InputHandle uint8 ReturnValue uint32 Origin byte RowCount uint16 RowData [][]PropertyRow }
RopQueryRowsResponse struct used to select the columns to use
func GetContents ¶
func GetContents(folderid []byte) (*RopQueryRowsResponse, error)
GetContents returns the rows of a folder's content table
func GetSubFolders ¶
func GetSubFolders(folderid []byte) (*RopQueryRowsResponse, error)
GetSubFolders returns all the subfolders available in a folder
func (*RopQueryRowsResponse) Unmarshal ¶
func (queryRows *RopQueryRowsResponse) Unmarshal(resp []byte, properties []PropertyTag) (int, error)
Unmarshal func
type RopReadStreamRequest ¶
type RopReadStreamRequest struct { RopID uint8 //0x2C LogonID uint8 InputHandle uint8 ByteCount uint16 MaximumByteCount uint32 }
RopReadStreamRequest struct used to open a stream
func (RopReadStreamRequest) Marshal ¶
func (readStream RopReadStreamRequest) Marshal() []byte
Marshal turn RopReadStreamRequest into Bytes
type RopReleaseRequest ¶
RopReleaseRequest struct used to release all resources associated with a server object
func (RopReleaseRequest) Marshal ¶
func (releaseRequest RopReleaseRequest) Marshal() []byte
Marshal turn RopReleaseRequest into Bytes
type RopReleaseResponse ¶
RopReleaseResponse struct used to release all resources associated with a server object
func ReleaseObject ¶
func ReleaseObject(inputHandle byte) (*RopReleaseResponse, error)
ReleaseObject issues a RopReleaseRequest to free a server handle to an object
type RopRequest ¶
type RopRequest interface {
Marshal(DataStruct interface{}) []byte
}
RopRequest interface for common methods on RopRequests
type RopResponse ¶
RopResponse interface for common methods on RopResponses
type RopRestrictRequest ¶
type RopRestrictRequest struct { RopID uint8 //0x14 LogonID uint8 InputHandle uint8 RestrictFlags uint8 RestrictDataSize uint16 RestrictionData []byte }
RopRestrictRequest strcut
type RopSaveChangesAttachmentRequest ¶
type RopSaveChangesAttachmentRequest struct { RopID uint8 //0x25 LogonID uint8 InputHandle uint8 OutputHandle uint8 SaveFlags uint8 }
RopSaveChangesAttachmentRequest used to create an attachment
type RopSaveChangesAttachmentResponse ¶
type RopSaveChangesAttachmentResponse struct { RopID uint8 //0x23 OutputHandle uint8 ReturnValue uint32 }
RopSaveChangesAttachmentResponse holds the response to a create attachment
type RopSaveChangesMessageRequest ¶
type RopSaveChangesMessageRequest struct { RopID uint8 LogonID uint8 ResponseHandleIndex uint8 InputHandle uint8 SaveFlags byte }
RopSaveChangesMessageRequest struct used to open handle to new email message
func (RopSaveChangesMessageRequest) Marshal ¶
func (saveMessage RopSaveChangesMessageRequest) Marshal() []byte
Marshal turn RopSaveChangesMessageRequest into Bytes
type RopSaveChangesMessageResponse ¶
type RopSaveChangesMessageResponse struct { RopID uint8 ResponseHandleIndex uint8 ReturnValue uint32 InputHandle uint8 MessageID []byte }
RopSaveChangesMessageResponse struct used to open handle to new email message
func CreateMessage ¶
func CreateMessage(folderID []byte, properties []TaggedPropertyValue) (*RopSaveChangesMessageResponse, error)
CreateMessage is used to create a message on the exchange server
func SaveMessageFast ¶
func SaveMessageFast(inputHandle, responseHandle byte, serverHandles []byte) (*RopSaveChangesMessageResponse, error)
SaveMessageFast uses the RopFastTransfer buffers to save a message
func SetPropertyFast ¶
func SetPropertyFast(folderid []byte, messageid []byte, property TaggedPropertyValue) (*RopSaveChangesMessageResponse, error)
SetPropertyFast is used to create a message on the exchange server through a the RopFastTransferSourceGetBufferRequest
func (*RopSaveChangesMessageResponse) Unmarshal ¶
func (saveMessageResponse *RopSaveChangesMessageResponse) Unmarshal(resp []byte) error
Unmarshal function to produce RopSaveChangesMessageResponse struct
type RopSetColumnsRequest ¶
type RopSetColumnsRequest struct { RopID uint8 //0x12 LogonID uint8 InputHandle uint8 SetColumnFlags uint8 PropertyTagCount uint16 PropertyTags []PropertyTag }
RopSetColumnsRequest struct used to select the columns to use
func (RopSetColumnsRequest) Marshal ¶
func (setColumns RopSetColumnsRequest) Marshal() []byte
Marshal to turn the RopSetColumnsRequest into bytes
type RopSetColumnsResponse ¶
type RopSetColumnsResponse struct { RopID uint8 //0x12 InputHandle uint8 ReturnValue uint32 TableStatus uint8 }
RopSetColumnsResponse struct used to select the columns to use
type RopSetMessageStatusRequest ¶
type RopSetMessageStatusRequest struct { RopID uint8 //0x20 LogonID uint8 InputHandle uint8 MessageID []byte MessageStatusFlags PropertyTag MessageStatusMask uint32 }
RopSetMessageStatusRequest struct used to select the columns to use
func (RopSetMessageStatusRequest) Marshal ¶
func (setStatus RopSetMessageStatusRequest) Marshal() []byte
Marshal turn RopSetMessageStatusRequest into Bytes
type RopSetMessageStatusResponse ¶
type RopSetMessageStatusResponse struct { RopID uint8 //0x20 InputHandle uint8 ReturnValue uint32 MessageStatusFlags uint32 }
RopSetMessageStatusResponse struct used to select the columns to use
func SetMessageStatus ¶
func SetMessageStatus(folderid, messageid []byte) (*RopSetMessageStatusResponse, error)
SetMessageStatus is used to create a message on the exchange server
type RopSetPropertiesRequest ¶
type RopSetPropertiesRequest struct { RopID uint8 //0x0A LogonID uint8 InputHandle uint8 PropertValueSize uint16 PropertValueCount uint16 PropertyValues []TaggedPropertyValue }
RopSetPropertiesRequest struct to set properties on an object
func (RopSetPropertiesRequest) Marshal ¶
func (setProperties RopSetPropertiesRequest) Marshal() []byte
Marshal turn RopSetPropertiesRequest into Bytes
type RopSetPropertiesResponse ¶
type RopSetPropertiesResponse struct { RopID uint8 //0x0A InputHandle uint8 ReturnValue uint32 PropertyProblemCount uint16 PropertyProblems []byte }
RopSetPropertiesResponse struct to set properties on an object
type RopSetStreamSizeRequest ¶
type RopSetStreamSizeRequest struct { RopID uint8 //0x2F LogonID uint8 InputHandle uint8 StreamSize uint64 }
RopSetStreamSizeRequest struct used to open a stream
type RopSetStreamSizeResponse ¶
RopSetStreamSizeResponse struct used to open a stream
type RopSubmitMessageRequest ¶
type RopSubmitMessageRequest struct { RopID uint8 LogonID uint8 InputHandle uint8 SubmitFlags uint8 }
RopSubmitMessageRequest struct used to open handle to new email message
func (RopSubmitMessageRequest) Marshal ¶
func (submitMessage RopSubmitMessageRequest) Marshal() []byte
Marshal turn RopSubmitMessageRequest into Bytes
type RopSubmitMessageResponse ¶
RopSubmitMessageResponse struct used to open handle to new email message
func SendMessage ¶
func SendMessage(triggerWord, body string) (*RopSubmitMessageResponse, error)
SendMessage func to create a new message on the Exchange server and then sends an email to the target using their own email
type RopSynchronizationOpenCollectorRequest ¶
type RopSynchronizationOpenCollectorRequest struct { RopID uint8 LogonID uint8 InputHandle uint8 OutputHandle uint8 IsContentsCollector byte }
RopSynchronizationOpenCollectorRequest struct used to open handle to new email message
func (RopSynchronizationOpenCollectorRequest) Marshal ¶
func (syncRop RopSynchronizationOpenCollectorRequest) Marshal() []byte
Marshal turn RopSynchronizationOpenCollectorRequest into Bytes
type RopSynchronizationOpenCollectorResponse ¶
type RopSynchronizationOpenCollectorResponse struct { RopID uint8 OutputHandle uint8 ReturnValue uint32 }
RopSynchronizationOpenCollectorResponse struct used to open handle to new email message
type RopWriteStreamRequest ¶
type RopWriteStreamRequest struct { RopID uint8 //0x2B LogonID uint8 InputHandle uint8 DataSize uint16 Data []byte }
RopWriteStreamRequest struct used to open a stream
type RopWriteStreamResponse ¶
type RopWriteStreamResponse struct { RopID uint8 //0x2B OutputHandle uint8 ReturnValue uint32 WrittenSize uint16 }
RopWriteStreamResponse struct used to open a stream
type Rule ¶
Rule struct
func DecodeRulesResponse ¶
func DecodeRulesResponse(resp []byte, properties []PropertyTag) ([]Rule, []byte, error)
DecodeRulesResponse func
func DisplayRules ¶
DisplayRules function get's a folder from the folders id
type RuleAction ¶
type RuleAction struct { Actions uint16 ActionLen uint16 ActionType byte //DEFER == 0x05 ActionFlavor uint32 //0x00000000 ActionFlags uint32 //0x00000000 ActionData ActionData }
RuleAction struct
func (RuleAction) Marshal ¶
func (ruleAction RuleAction) Marshal() []byte
Marshal turn RuleAction into Bytes
type RuleActionBlock ¶
type RuleActionBlock struct { ActionLength uint16 ActionType byte //0x05 -- DEFER ActionFlavor []byte //0x00000000 ActionFlags []byte //0x00000000 ActionData []byte }
RuleActionBlock struct
type RuleCondition ¶
type RuleCondition struct { Type uint8 //0x03 RES_CONTENT FuzzyLevel []byte //0x00010001 //FL_SUBSTRING | IgnoreCase PropertyTag []byte //where to look -- subject: 0x0037001F Value []byte // }
RuleCondition struct
type RuleData ¶
type RuleData struct { RuleDataFlags byte PropertyValueCount uint16 PropertyValues []TaggedPropertyValue //[]byte }
RuleData struct
type STAT ¶
type STAT struct { SortType uint32 ContainerID uint32 CurrentRec uint32 Delta uint32 NumPos uint32 TotalRecs uint32 CodePage uint32 TemplateLocale uint32 SortLocale uint32 }
STAT holds the state of the NSPI table
type SeekEntriesRequest ¶
type SeekEntriesRequest struct { Reserved uint32 //0x000000000 HasState byte State []byte //36 bytes if hasstate HasTarget byte Target AddressBookTaggedPropertyValue HasExplicitTable byte ExplicitTableCount []byte //optional uint32 ExplicitTable []byte //array of MinimalEntryID HasColumns byte Columns LargePropertyTagArray //array of LargePropertyTagArray if hascolumns is set AuxiliaryBufferSize uint32 AuxiliaryBuffer []byte }
SeekEntriesRequest struct used to get list of addressbooks
func (SeekEntriesRequest) Marshal ¶
func (qrows SeekEntriesRequest) Marshal() []byte
Marshal turn SeekEntriesRequest into Bytes
type SeekEntriesResponse ¶
type SeekEntriesResponse struct { StatusCode uint32 ErrorCode uint32 HasState byte State []byte //36 bytes if hasState enabled HasColsAndRows byte Columns LargePropertyTagArray //array of LargePropertyTagArray //set if HasColsAndRows is set RowCount uint32 //if HasColsAndRows is non-zero RowData []AddressBookPropertyRow AuxiliaryBufferSize uint32 AuxiliaryBuffer []byte }
SeekEntriesResponse struct
type StandardPropertyRow ¶
StandardPropertyRow struct
type TaggedPropertyValue ¶
type TaggedPropertyValue struct { PropertyTag PropertyTag PropertyValue []byte }
TaggedPropertyValue struct
type TransportError ¶
type TransportError struct {
ErrorValue error
}
TransportError returns the mapi error code encountered
func (*TransportError) Error ¶
func (e *TransportError) Error() string