diff --git a/ExchangeWebservices/EWS_ProcessFolder.robot b/ExchangeWebservices/EWS_ProcessFolder.robot
deleted file mode 100644
index 63389a8..0000000
--- a/ExchangeWebservices/EWS_ProcessFolder.robot
+++ /dev/null
@@ -1,2132 +0,0 @@
-
-
diff --git a/GMail/GMail.type b/GMail/GMail.type
new file mode 100644
index 0000000..bf055fc
--- /dev/null
+++ b/GMail/GMail.type
@@ -0,0 +1,61 @@
+
+
+
+
+ 10.6.0.2
+
+
+
+
+ Request
+
+ {
+ "raw" : ""
+}
+
+
+ Response
+
+
+
+ MultipartBody
+
+ Content-type: multipart/mixed; boundary=RPAISTHEBEST
+MIME-version: 1.0
+From: <FROM>
+To: <TO>
+Subject: <SUBJECT>
+
+--RPAISTHEBEST
+Content-type: text/html
+
+<MESSAGE>
+
+--KAPOWISTHEBEST
+Content-type: <FILECONTENTTYPE>
+Content-Disposition: attachment; filename="<FILENAME>"
+Content-transfer-encoding: base64
+
+<FILECONTENT>
+
+--RPAISTHEBEST--
+
+
+ messageId
+
+
+
+ StatusCode
+
+
+
+ headers
+
+
+
+ URI_SendMessage
+
+ https://www.googleapis.com/gmail/v1/users/me/messages/send
+
+
+
diff --git a/GMail/GMailSend.robot b/GMail/GMailSend.robot
new file mode 100644
index 0000000..a3a95c4
--- /dev/null
+++ b/GMail/GMailSend.robot
@@ -0,0 +1,323 @@
+
+
+
+
+ 10.5.0.0
+ 10.6.0.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WEBKIT
+
+
+
+ GMail_OAuth
+
+
+ OAuthCredentials
+
+
+
+ Google
+ true
+ kapow.robot.plugin.common.domain.StringAttributeType
+
+
+
+
+
+ GMail
+
+
+ GMail
+
+
+
+
+ email
+
+
+ Email
+
+
+
+ <html><body>Test envoi email</body></html>
+ true
+ kapow.robot.plugin.common.domain.TextAttributeType
+
+
+ rpa.kofax@gmail.com
+ true
+
+
+
+ Hello!
+ true
+
+
+
+ jerome.marc@kofax.com
+ true
+
+
+
+
+
+
+
+
+ WEBKIT
+
+
+ STANDARD
+
+ false
+ 10000
+
+ true
+ 2048
+
+
+
+
+ DIRECT
+
+
+
+
+
+
+ Encode Attachment
+
+
+
+
+
+ email.Attachment
+
+
+
+
+
+
+ email.Attachment
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+ Add Email to Body
+
+
+
+
+
+ GMail.MultipartBody
+
+
+
+ <TO>
+ jerome.marc@kofax.com
+
+
+ <FROM>
+ rpa.kofax@gmail.com
+
+
+ <SUBJECT>
+ Hello !
+
+
+ <MESSAGE>
+ <html><body>Test envoi email</body></html>
+
+
+ <FILECONTENTTYPE>
+ application/vnd.ms-excel
+
+
+
+ (.*)<FILECONTENT>(.*)
+
+ $1 + email.Attachment + $2
+
+
+ <FILENAME>
+ ValidationFX.xlsm
+
+
+
+
+ GMail.MultipartBody
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+ Open Api Request
+
+
+ GMail.Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Base64 Encode Email
+
+
+
+
+
+ GMail.MultipartBody
+
+
+
+
+
+ "
+
+
+ "
+
+
+
+
+
+
+
+
+ @top:.raw
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Raw HTTP
+
+
+
+ GMail.URI_SendMessage
+
+
+
+
+
+
+ GMail.Request
+
+
+
+ application/json
+
+
+
+
+
+
+ GMail.Response
+
+
+
+
+
+
+
+
+
+ GMail.StatusCode
+
+
+
+ responseStatusCodeAttributeName
+ credentialsProvider
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/GMail/GmailReceive.robot b/GMail/GmailReceive.robot
new file mode 100644
index 0000000..3c0655f
--- /dev/null
+++ b/GMail/GmailReceive.robot
@@ -0,0 +1,458 @@
+
+
+
+
+ 10.4.0.0
+ 10.5.0.0
+ 10.6.0.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WEBKIT
+
+
+
+ email
+
+
+ Email
+
+
+
+
+ GMail_OAuth
+ true
+
+
+ OAuthCredentials
+
+
+
+ Google
+ true
+ kapow.robot.plugin.common.domain.StringAttributeType
+
+
+
+
+
+ GMail
+
+
+ GMail
+
+
+
+
+
+
+ WEBKIT
+
+
+ STANDARD
+
+ false
+ 10000
+
+ true
+ 2048
+
+
+
+
+ DIRECT
+
+
+
+
+
+
+ Repeat
+
+
+
+
+
+
+
+
+
+
+
+ List Mailbox
+
+
+ https://www.googleapis.com/gmail/v1/users/me/messages?q=to:rpa.kofax@gmail.com
+
+
+
+
+
+
+
+
+ en_US
+
+
+ Default value changed for Browser to Emulate: Internet Explorer 8.0 on Windows 7 -> Chrome 43.0 on Windows 7
+Default value changed for HTTP User Agent: null -> kapow.robot.plugin.common.support.expression.stringexpr.PresetUserAgentStringExpression(userAgent="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36")
+Default value changed for Output Page If Timeout: false -> true
+
+
+
+ credentialsProvider
+
+
+
+
+
+
+ reportingViaAPI
+ reportingViaLog
+
+
+
+
+
+
+
+ name
+
+
+
+ View List
+
+
+
+
+
+
+
+
+ name
+
+
+
+ For Each Item
+
+
+
+
+ @top:.messages
+
+
+
+
+
+ reportingViaAPI
+ reportingViaLog
+
+ false
+ false
+
+
+
+
+
+
+
+
+ Extract Message Id
+
+
+
+
+
+ 1
+
+
+
+ .id
+
+
+
+
+
+
+
+
+
+
+
+
+ Get Mail Content
+
+
+ "https://www.googleapis.com/gmail/v1/users/me/messages/" + GMail.messageId
+
+
+
+
+ GMail_OAuth
+
+
+
+ en_US
+
+
+ Default value changed for Browser to Emulate: Internet Explorer 8.0 on Windows 7 -> Chrome 43.0 on Windows 7
+Default value changed for HTTP User Agent: null -> kapow.robot.plugin.common.support.expression.stringexpr.PresetUserAgentStringExpression(userAgent="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36")
+Default value changed for Output Page If Timeout: false -> true
+
+
+
+ credentialsProvider
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Mail
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Body
+
+
+
+
+ @top:.snippet
+
+
+
+
+
+
+
+
+
+
+
+ Extract Headers
+
+
+
+
+ @top:.payload.headers
+
+
+
+
+
+
+
+
+
+
+
+
+ Delete Mail
+
+
+ "https://www.googleapis.com/gmail/v1/users/me/messages/" + GMail.messageId + "/trash"
+
+
+
+
+ GMail.Response
+
+
+
+
+
+ GMail_OAuth
+
+
+
+ en_US
+
+
+ Default value changed for Browser to Emulate: Internet Explorer 8.0 on Windows 7 -> Chrome 43.0 on Windows 7
+Default value changed for HTTP User Agent: null -> kapow.robot.plugin.common.support.expression.stringexpr.PresetUserAgentStringExpression(userAgent="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36")
+Default value changed for Output Page If Timeout: false -> true
+
+
+
+ credentialsProvider
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+
+ Wait
+
+
+ 10
+
+
+
+
+
+
+
+
+
+
+
+ Next
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ en_US
+
+
+ Default value changed for Browser to Emulate: Internet Explorer 8.0 on Windows 7 -> Chrome 43.0 on Windows 7
+Default value changed for HTTP User Agent: null -> kapow.robot.plugin.common.support.expression.stringexpr.PresetUserAgentStringExpression(userAgent="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36")
+Default value changed for Output Page If Timeout: false -> true
+
+
+
diff --git a/GMail/MailMessage.type b/GMail/MailMessage.type
new file mode 100644
index 0000000..eb91b7f
--- /dev/null
+++ b/GMail/MailMessage.type
@@ -0,0 +1,26 @@
+
+
+
+
+ 10.4.0.0
+
+
+
+
+ from
+
+
+
+ to
+
+
+
+ subject
+
+
+
+ body
+
+
+
+
diff --git a/ExchangeWebservices/Email.type b/Outlook/Email.type
similarity index 75%
rename from ExchangeWebservices/Email.type
rename to Outlook/Email.type
index d839930..1329923 100644
--- a/ExchangeWebservices/Email.type
+++ b/Outlook/Email.type
@@ -1,58 +1,72 @@
-
-
-
-
- 10.6.0.2
-
-
-
-
- Sender
-
-
-
- To
-
-
-
- CC
-
-
-
- BCC
-
-
-
- Subject
-
-
-
- Body
-
-
-
- BodyType
-
- HTML
- HTML, Text or Best
-https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/bodytype
-
-
- AttachmentName
-
- If this is empty there is no attachment
-
-
- Attachment
-
-
-
- DateTimeSent
-
-
-
- isRead
-
-
-
-
+
+
+
+
+ 10.6.0.2
+
+
+
+
+ Id
+
+ true
+ true
+
+
+ Sender
+
+
+
+ Recipient
+
+
+
+ CC
+
+
+
+ BCC
+
+
+
+ Subject
+
+
+
+ Body
+
+
+
+ BodyType
+
+ HTML
+ HTML, Text or Best
+https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/bodytype
+
+
+ AttachmentName
+
+ If this is empty there is no attachment
+
+
+ Attachment
+
+
+
+ DateTimeSent
+
+
+
+ isRead
+
+
+
+ Classification
+
+
+
+ isProcessed
+
+
+
+
diff --git a/ExchangeWebservices/ExchangeWebServices.type b/Outlook/ExchangeWebServices.type
similarity index 96%
rename from ExchangeWebservices/ExchangeWebServices.type
rename to Outlook/ExchangeWebServices.type
index 22a6d8a..cbfa641 100644
--- a/ExchangeWebservices/ExchangeWebServices.type
+++ b/Outlook/ExchangeWebServices.type
@@ -1,82 +1,82 @@
-
-
-
-
- 10.2.0.2
- 10.6.0.2
-
-
-
-
- Server
-
- mail.kofax.com
- outlook.office365.com
-mail.kofax.com
-
-
- Version
-
- Exchange2010_SP2
- Exchange2013_SP1
-Exchange2013
-Exchange2010_SP2 : Kofax
-Exchange2010_SP1
-Exchange2010
-Exchange2007_SP1
-Exchange2007
-https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/ews-schema-versions-in-exchange?redirectedfrom=MSDN
-
-
-
- User
-
- david.wright@kofax.com
-
-
- Password
-
-
-
- Inbox_Owner
-
- wiki@kofax.com
- The owner of the inbox that you are looking for.
-This is for looking into Shared Folders.
-
-
- Inbox_FolderName
-
- inbox
-
-
- Inbox_FolderId
-
-
-
- Inbox_FolderChangeKey
-
-
-
- Outbox_FolderName
-
- Processed
-
-
- Outbox_FolderId
-
-
-
- Outbox_FolderChangeKey
-
-
-
- ItemId
-
-
-
- ItemChangeKey
-
-
-
-
+
+
+
+
+ 10.2.0.2
+ 10.6.0.2
+
+
+
+
+ Server
+
+ mail.kofax.com
+ outlook.office365.com
+mail.kofax.com
+
+
+ Version
+
+ Exchange2010_SP2
+ Exchange2013_SP1
+Exchange2013
+Exchange2010_SP2 : Kofax
+Exchange2010_SP1
+Exchange2010
+Exchange2007_SP1
+Exchange2007
+https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/ews-schema-versions-in-exchange?redirectedfrom=MSDN
+
+
+
+ UserName
+
+ david.wright@kofax.com
+
+
+ Password
+
+
+
+ Inbox_Owner
+
+ wiki@kofax.com
+ The owner of the inbox that you are looking for.
+This is for looking into Shared Folders.
+
+
+ Inbox_FolderName
+
+ inbox
+
+
+ Inbox_FolderId
+
+
+
+ Inbox_FolderChangeKey
+
+
+
+ Outbox_FolderName
+
+ Processed
+
+
+ Outbox_FolderId
+
+
+
+ Outbox_FolderChangeKey
+
+
+
+ ItemId
+
+
+
+ ItemChangeKey
+
+
+
+
diff --git a/ExchangeWebservices/ExchangeWebServices_SOAP.type b/Outlook/ExchangeWebServices_SOAP.type
similarity index 67%
rename from ExchangeWebservices/ExchangeWebServices_SOAP.type
rename to Outlook/ExchangeWebServices_SOAP.type
index 7af33de..405a64d 100644
--- a/ExchangeWebservices/ExchangeWebServices_SOAP.type
+++ b/Outlook/ExchangeWebServices_SOAP.type
@@ -1,179 +1,248 @@
-
-
-
-
- 10.2.0.2
- 10.6.0.2
-
-
-
-
- Request
-
- <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
- <soap:Header>
- <t:RequestServerVersion Version="****Version****"/>
- </soap:Header>
- <soap:Body>
- <m:DoSomething/>
- </soap:Body>
-</soap:Envelope>
-
-
- Request_FindInboxOfOwner
-
- <m:GetFolder>
- <m:FolderShape>
- <t:BaseShape>AllProperties</t:BaseShape>
- </m:FolderShape>
- <m:FolderIds>
- <t:DistinguishedFolderId Id="inbox">
- <t:Mailbox>
- <t:EmailAddress>***OWNER****</t:EmailAddress>
- </t:Mailbox>
- </t:DistinguishedFolderId>
- </m:FolderIds>
-</m:GetFolder>
- This returns all information about the inbox of a user.
-Set the Owner tag to be the owner. it doesn't need to be you it could be anyone else.
-You can replace inboix with any other Distinguished Folder
-
-
- Request_FindFolderByName
-
- <m:FindFolder Traversal="Shallow">
- <m:FolderShape>
- <t:BaseShape>AllProperties</t:BaseShape>
- </m:FolderShape>
- <m:IndexedPageFolderView MaxEntriesReturned="1" Offset="0" BasePoint="Beginning"/>
- <m:Restriction>
- <t:IsEqualTo>
- <t:FieldURI FieldURI="folder:DisplayName"/>
- <t:FieldURIOrConstant>
- <t:Constant Value="****FolderName****"/>
- </t:FieldURIOrConstant>
- </t:IsEqualTo>
- </m:Restriction>
- <m:ParentFolderIds>
- <t:FolderId Id="****ParentFolderID****" ChangeKey="****ParentFolderChangeKey****"/>
- </m:ParentFolderIds>
-</m:FindFolder>
-
-
- Request_FindEmailsInFolder
-
- <m:FindItem Traversal="Shallow">
- <m:ItemShape>
- <t:BaseShape>IdOnly</t:BaseShape>
- <t:AdditionalProperties>
- <t:FieldURI FieldURI="item:Subject"/>
- <t:FieldURI FieldURI="item:DateTimeSent"/>
- <t:FieldURI FieldURI="message:IsRead"/>
- <t:FieldURI FieldURI="message:Sender"/>
- <t:FieldURI FieldURI="item:HasAttachments"/>
- </t:AdditionalProperties>
- </m:ItemShape>
- <m:IndexedPageItemView MaxEntriesReturned="50" Offset="0" BasePoint="Beginning"/>
- <m:Restriction>
- <t:IsEqualTo>
- <t:FieldURI FieldURI="message:IsRead"/>
- <t:FieldURIOrConstant>
- <t:Constant Value="false"/>
- </t:FieldURIOrConstant>
- </t:IsEqualTo>
- </m:Restriction>
- <m:SortOrder>
- <t:FieldOrder Order="Ascending">
- <t:FieldURI FieldURI="item:DateTimeReceived"/>
- </t:FieldOrder>
- </m:SortOrder>
- <m:ParentFolderIds>
- <t:DistinguishedFolderId Id="inbox">
- <t:Mailbox>
- <t:EmailAddress>*****OWNER*****</t:EmailAddress>
- </t:Mailbox>
- </t:DistinguishedFolderId>
- </m:ParentFolderIds>
-</m:FindItem>
-
-
- Request_GetItem
-
- <m:GetItem>
- <m:ItemShape>
- <t:BaseShape>AllProperties</t:BaseShape>
- </m:ItemShape>
- <m:ItemIds>
- <t:ItemId Id="****ItemID****" ChangeKey="****ChangeKey****"/>
- </m:ItemIds>
-</m:GetItem>
-
-
- Request_SendAndSaveEmail
-
- <m:CreateItem MessageDisposition="SendAndSaveCopy">
- <m:SavedItemFolderId>
- <t:DistinguishedFolderId Id="sentitems"/>
- </m:SavedItemFolderId>
- <m:Items>
- <t:Message>
- <t:Subject>****SUBJECT****</t:Subject>
- <t:Body BodyType="HTML">****BODY****</t:Body>
- <t:Sender>
- <t:Mailbox>
- <t:EmailAddress>****SENDER*****</t:EmailAddress>
- </t:Mailbox>
- </t:Sender>
- <t:ToRecipients>
- <t:Mailbox>
- <t:EmailAddress>****TO*****</t:EmailAddress>
- </t:Mailbox>
- </t:ToRecipients>
- </t:Message>
- </m:Items>
-</m:CreateItem>
-
-
- Request_ItemMarkAsRead
-
- <m:UpdateItem MessageDisposition="SaveOnly" ConflictResolution="AutoResolve">
- <m:ItemChanges>
- <t:ItemChange>
- <t:ItemId Id="****ItemId****" ChangeKey="****ChangeKey****"/>
- <t:Updates>
- <t:SetItemField>
- <t:FieldURI FieldURI="message:IsRead"/>
- <t:Message>
- <t:IsRead>true</t:IsRead>
- </t:Message>
- </t:SetItemField>
- </t:Updates>
- </t:ItemChange>
- </m:ItemChanges>
-</m:UpdateItem>
-
-
- Request_MoveItem
-
- <m:MoveItem>
- <m:ToFolderId>
- <t:FolderId Id="****FolderId****" ChangeKey="****ChangeKey****"/>
- </m:ToFolderId>
- <m:ItemIds>
- <t:ItemId Id="****ItemId****" ChangeKey="****ChangeKey****"/>
- </m:ItemIds>
-</m:MoveItem>
-
-
- StatusCode
-
- Response from Exchange Webservices
-200=success
-
-
- Headers
-
- Response from Exchange Webservices
-
-
-
+
+
+
+
+ 10.2.0.2
+ 10.6.0.2
+
+
+
+
+ Request
+
+ <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+ <soap:Header>
+ <t:RequestServerVersion Version="****Version****"/>
+ </soap:Header>
+ <soap:Body>
+ <m:DoSomething/>
+ </soap:Body>
+</soap:Envelope>
+
+
+ Request_FindInboxOfOwner
+
+ <m:GetFolder>
+ <m:FolderShape>
+ <t:BaseShape>AllProperties</t:BaseShape>
+ </m:FolderShape>
+ <m:FolderIds>
+ <t:DistinguishedFolderId Id="inbox">
+ <t:Mailbox>
+ <t:EmailAddress>***OWNER****</t:EmailAddress>
+ </t:Mailbox>
+ </t:DistinguishedFolderId>
+ </m:FolderIds>
+</m:GetFolder>
+ This returns all information about the inbox of a user.
+Set the Owner tag to be the owner. it doesn't need to be you it could be anyone else.
+You can replace inboix with any other Distinguished Folder
+
+
+ Request_FindFolderByName
+
+ <m:FindFolder Traversal="Shallow">
+ <m:FolderShape>
+ <t:BaseShape>AllProperties</t:BaseShape>
+ </m:FolderShape>
+ <m:IndexedPageFolderView MaxEntriesReturned="1" Offset="0" BasePoint="Beginning"/>
+ <m:Restriction>
+ <t:IsEqualTo>
+ <t:FieldURI FieldURI="folder:DisplayName"/>
+ <t:FieldURIOrConstant>
+ <t:Constant Value="****FolderName****"/>
+ </t:FieldURIOrConstant>
+ </t:IsEqualTo>
+ </m:Restriction>
+ <m:ParentFolderIds>
+ <t:FolderId Id="****ParentFolderID****" ChangeKey="****ParentFolderChangeKey****"/>
+ </m:ParentFolderIds>
+</m:FindFolder>
+
+
+ Request_FindEmailsInFolder
+
+ <m:FindItem Traversal="Shallow">
+ <m:ItemShape>
+ <t:BaseShape>IdOnly</t:BaseShape>
+ <t:AdditionalProperties>
+ <t:FieldURI FieldURI="item:Subject"/>
+ <t:FieldURI FieldURI="item:DateTimeSent"/>
+ <t:FieldURI FieldURI="message:IsRead"/>
+ <t:FieldURI FieldURI="message:Sender"/>
+ <t:FieldURI FieldURI="item:HasAttachments"/>
+ <t:FieldURI FieldURI="item:Categories"/>
+ </t:AdditionalProperties>
+ </m:ItemShape>
+ <m:IndexedPageItemView MaxEntriesReturned="50" Offset="0" BasePoint="Beginning"/>
+ <m:Restriction>
+ <t:And>
+ <t:Exists>
+ <t:FieldURI FieldURI="item:Body"/>
+ </t:Exists>
+ <t:IsEqualTo>
+ <t:FieldURI FieldURI="message:IsRead"/>
+ <t:FieldURIOrConstant>
+ <t:Constant Value="false"/>
+ </t:FieldURIOrConstant>
+ </t:IsEqualTo>
+ </t:And>
+ </m:Restriction>
+ <m:SortOrder>
+ <t:FieldOrder Order="Ascending">
+ <t:FieldURI FieldURI="item:DateTimeReceived"/>
+ </t:FieldOrder>
+ </m:SortOrder>
+ <m:ParentFolderIds>
+ <t:DistinguishedFolderId Id="inbox">
+ <t:Mailbox>
+ <t:EmailAddress>*****OWNER*****</t:EmailAddress>
+ </t:Mailbox>
+ </t:DistinguishedFolderId>
+ </m:ParentFolderIds>
+</m:FindItem>
+
+
+ Request_FindEmailsByQuery
+
+ <m:FindItem Traversal="Shallow">
+ <m:ItemShape>
+ <t:BaseShape>IdOnly</t:BaseShape>
+ <t:AdditionalProperties>
+ <t:FieldURI FieldURI="item:Subject"/>
+ <t:FieldURI FieldURI="item:DateTimeSent"/>
+ <t:FieldURI FieldURI="message:IsRead"/>
+ <t:FieldURI FieldURI="message:Sender"/>
+ <t:FieldURI FieldURI="item:HasAttachments"/>
+ <t:FieldURI FieldURI="item:Categories"/>
+ </t:AdditionalProperties>
+ </m:ItemShape>
+ <m:IndexedPageItemView MaxEntriesReturned="50" Offset="0" BasePoint="Beginning"/>
+ <m:SortOrder>
+ <t:FieldOrder Order="Ascending">
+ <t:FieldURI FieldURI="item:DateTimeReceived"/>
+ </t:FieldOrder>
+ </m:SortOrder>
+ <m:ParentFolderIds>
+ <t:DistinguishedFolderId Id="inbox">
+ <t:Mailbox>
+ <t:EmailAddress>*****OWNER*****</t:EmailAddress>
+ </t:Mailbox>
+ </t:DistinguishedFolderId>
+ </m:ParentFolderIds>
+ <m:QueryString>isread:false AND NOT category:"Robot Ignoring" AND NOT category:"Robot Processed"</m:QueryString>
+</m:FindItem>
+ https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-perform-an-aqs-search-by-using-ews-in-exchange
+
+
+ Request_GetItem
+
+ <m:GetItem>
+ <m:ItemShape>
+ <t:BaseShape>AllProperties</t:BaseShape>
+ </m:ItemShape>
+ <m:ItemIds>
+ <t:ItemId Id="****ItemID****" ChangeKey="****ChangeKey****"/>
+ </m:ItemIds>
+</m:GetItem>
+
+
+ Request_SendAndSaveEmail
+
+ <m:CreateItem MessageDisposition="SendAndSaveCopy">
+ <m:SavedItemFolderId>
+ <t:DistinguishedFolderId Id="sentitems"/>
+ </m:SavedItemFolderId>
+ <m:Items>
+ <t:Message>
+ <t:Subject>****SUBJECT****</t:Subject>
+ <t:Body BodyType="HTML">****BODY****</t:Body>
+ <t:Sender>
+ <t:Mailbox>
+ <t:EmailAddress>****SENDER*****</t:EmailAddress>
+ </t:Mailbox>
+ </t:Sender>
+ <t:ToRecipients>
+ <t:Mailbox>
+ <t:EmailAddress>****TO*****</t:EmailAddress>
+ </t:Mailbox>
+ </t:ToRecipients>
+ </t:Message>
+ </m:Items>
+</m:CreateItem>
+
+
+ Request_ItemMarkAsRead
+
+ <m:UpdateItem MessageDisposition="SaveOnly" ConflictResolution="AutoResolve">
+ <m:ItemChanges>
+ <t:ItemChange>
+ <t:ItemId Id="****ItemId****" ChangeKey="****ChangeKey****"/>
+ <t:Updates>
+ <t:SetItemField>
+ <t:FieldURI FieldURI="message:IsRead"/>
+ <t:Message>
+ <t:IsRead>true</t:IsRead>
+ </t:Message>
+ </t:SetItemField>
+ </t:Updates>
+ </t:ItemChange>
+ </m:ItemChanges>
+</m:UpdateItem>
+
+
+ Request_ItemCategorize
+
+ <m:UpdateItem MessageDisposition="SaveOnly" ConflictResolution="AutoResolve">
+ <m:ItemChanges>
+ <t:ItemChange>
+ <t:ItemId Id="****ItemId****" ChangeKey="****ChangeKey****"/>
+ <t:Updates>
+ <t:SetItemField>
+ <t:FieldURI FieldURI="item:Categories"/>
+ <t:Message>
+ <t:Categories>
+ <t:String>****Category****</t:String>
+ </t:Categories>
+ </t:Message>
+ </t:SetItemField>
+ </t:Updates>
+ </t:ItemChange>
+ </m:ItemChanges>
+</m:UpdateItem>
+
+
+ Request_MoveItem
+
+ <m:MoveItem>
+ <m:ToFolderId>
+ <t:FolderId Id="****FolderId****" ChangeKey="****ChangeKey****"/>
+ </m:ToFolderId>
+ <m:ItemIds>
+ <t:ItemId Id="****ItemId****" ChangeKey="****ChangeKey****"/>
+ </m:ItemIds>
+</m:MoveItem>
+
+
+ Requestt_GetAttachment
+
+ <m:GetAttachment>
+ <m:AttachmentIds>
+ <t:AttachmentId Id="****AttachmentId****"/>
+ </m:AttachmentIds>
+</m:GetAttachment>
+ https://github.com/MicrosoftDocs/office-developer-exchange-docs/blob/master/docs/exchange-web-services/how-to-get-attachments-by-using-ews-in-exchange.md
+
+
+ StatusCode
+
+ Response from Exchange Webservices
+200=success
+
+
+ Headers
+
+ Response from Exchange Webservices
+
+
+
diff --git a/Outlook/Filter.type b/Outlook/Filter.type
new file mode 100644
index 0000000..99e996f
--- /dev/null
+++ b/Outlook/Filter.type
@@ -0,0 +1,94 @@
+
+
+
+
+ 10.6.0.2
+
+
+
+
+ Id
+
+ true
+ true
+ a unique id for the filter
+
+
+ Name
+
+ the name of the filter.
+Ideally it should be the nameof the robot that wants to process this email
+
+
+ UserName
+
+ the user account used to login to the email server
+
+
+ Server
+
+ outlook.office365.com
+ email server.
+currently supports Office365 or Microsoft Exchange
+
+
+
+ Owner
+
+ the Owner of the inbox to read.
+This is different than the Account if you are trying to read someone else's inbox or a shared folder
+
+
+
+ InBox
+
+ currently only "inbox" is supported
+
+
+ SenderFilter
+
+
+
+ SubjectFilter
+
+
+
+ BodyFilter
+
+
+
+ AttachmentFilter
+
+
+
+ ExportAttachment
+
+
+
+ ExportBody
+
+
+
+ MarkAsRead
+
+
+
+ OutBox
+
+ currently only custom folders are supported
+
+
+ DateCreated
+
+
+
+ Description
+
+
+
+ active
+
+ true
+
+
+
diff --git a/Outlook/OpenOffice.resendlater.robot b/Outlook/OpenOffice.resendlater.robot
new file mode 100644
index 0000000..c4df0d8
--- /dev/null
+++ b/Outlook/OpenOffice.resendlater.robot
@@ -0,0 +1,216 @@
+
+
+
+
+ 10.6.0.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WEBKIT
+
+
+
+ email
+
+
+ Email
+
+
+
+
+
+
+ WEBKIT
+
+
+ STANDARD
+
+ false
+ 10000
+
+ true
+ 2048
+ This is just a sample robot to show how to retrieve emails, deal with them and then delete them or mark them as processed
+
+ DIRECT
+
+
+
+
+
+
+ This try step will catch the SQL Error that is thrown when ZERO emails are found
+
+
+ Get new email ids
+
+ >>SELECT objectkey FROM Email
+where isprocessed='n'
+and classification ='OpenOffice.resendlater'<<
+
+
+ objectkey
+
+ email.Id
+
+
+
+
+
+
+
+ reportingViaAPI
+
+ false
+
+
+
+
+
+
+
+ name
+
+
+
+ Retrieve email
+
+
+
+
+
+
+ email.Id
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Do Something With the Email
+
+
+
+ Here is where you process the email
+
+
+
+
+
+
+ Delete email
+
+
+
+
+ false
+
+
+
+ only delete the email AFTER you know it has been SUCCESSFULLY processed
+
+
+ name
+
+
+
+ Assign Is Processed
+
+
+ true
+
+
+ email.isProcessed
+
+
+
+
+
+
+
+
+
+
+
+ update email as processed
+
+
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Outlook/Outlook_ProcessFolder.robot b/Outlook/Outlook_ProcessFolder.robot
new file mode 100644
index 0000000..765550d
--- /dev/null
+++ b/Outlook/Outlook_ProcessFolder.robot
@@ -0,0 +1,4593 @@
+
+
+
+
+ 10.4.0.0
+ 10.5.0.0
+ 10.6.0.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WEBKIT
+
+
+
+ filter
+
+
+ Filter
+
+
+
+
+ Email
+
+
+ Email
+
+
+
+
+ ews
+
+
+ ExchangeWebServices
+
+
+
+
+ ews_SOAP
+
+
+ ExchangeWebServices_SOAP
+
+
+
+
+ Filters
+ true
+
+
+ 13
+
+
+
+ Id Name UserName Server Owner Inbox SenderFilter SubjectFilter BodyFilter AttachmentFilter ExportAttachment ExportBody MarkAsRead OutBox DateCreated Description active
+1 test david.wright@kofax.com mail.kofax.com wiki@kofax.com inbox david.wright@kofax.com ^test$ balance\.txt y y y Processed 09/30/19 06:06 PM test y
+2 OpenOffice.unknownemail david.wright@kofax.com mail.kofax.com wiki@kofax.com inbox Kofax RPA Ask the Expert Office Hours The e-mail address you entered couldn't be found n y y Processed 09/30/19 06:06 PM unknown email y
+3 OpenOffice.resendlater david.wright@kofax.com mail.kofax.com wiki@kofax.com inbox Kofax RPA Ask the Expert Office Hours (resend the message|resending this message|hop count exceeded) n y y Processed 09/30/19 06:06 PM resend later y
+4 OpenOffice.personleft david.wright@kofax.com mail.kofax.com wiki@kofax.com inbox Kofax RPA Ask the Expert Office Hours recipient addresses rejected n y y Processed 09/30/19 06:06 PM person left company y
+
+ true
+ kapow.robot.plugin.common.domain.TextAttributeType
+
+
+
+
+
+
+
+ WEBKIT
+
+
+ STANDARD
+
+ false
+ 10000
+
+ true
+ 2048
+
+
+
+
+ DIRECT
+
+
+
+
+
+
+
+ Loop through all inboxes
+
+ "SELECT distinct server,username,inbox,owner FROM Filter
+where active='y'"
+
+
+ server
+
+ filter.Server
+
+
+
+ username
+
+ ews.UserName
+
+
+
+ inbox
+
+ filter.InBox
+
+
+
+ owner
+
+ filter.Owner
+
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+ Lookup Password in Store
+
+
+
+ ews.UserName
+
+
+
+ MSExchange
+
+
+ ews.Password
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+ Read Outlook Inbox
+
+
+
+
+
+
+ Set EWS Version
+ Make sure that the variable ews.Version is set correctly for your Exchange Server
+Exchange2013_SP1
+Exchange2013
+Exchange2010_SP2 : Kofax
+Exchange2010_SP1
+Exchange2010
+Exchange2007_SP1
+Exchange2007
+https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/ews-schema-versions-in-exchange?redirectedfrom=MSDN
+
+
+
+ Open Request
+
+
+ ews_SOAP.Request
+
+
+
+
+
+
+
+
+
+
+
+ Set EWS Version
+
+
+ Version
+
+
+
+ ews.Version
+
+
+
+
+
+
+ .*.t:requestserverversion
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+ Check Server URI
+
+
+ contains(filter.Server,"https://") ? filter.Server : "https://"+filter.Server+"/ews/exchange.asmx"
+
+
+ ews.Server
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EWS:Find Inbox
+
+
+
+
+
+
+ Set Tag
+
+
+
+ ews_SOAP.Request_FindInboxOfOwner
+
+
+
+
+
+
+ .*.soap:Body.*
+
+
+
+
+
+
+
+
+
+
+
+ Set Owner
+
+
+ filter.Owner=="" ? ews.UserName : filter.Owner
+
+
+
+
+
+ .*.t:emailaddress
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+ EWS:Read Inbox
+
+
+
+
+ ews.Server
+
+
+
+ FindItem
+
+
+
+ ews_SOAP.Request
+
+
+ SOAP 1.2
+
+
+
+
+
+ ews.UserName
+
+
+
+
+ ews.Password
+
+
+
+
+
+ ews_SOAP.StatusCode
+
+
+ ews_SOAP.Headers
+
+ true
+
+
+ ignoreLoadErrors
+ responseHeadersAttributeName
+ responseStatusCodeAttributeName
+ headerProvider
+ credentialsProvider
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+ View as XML
+
+
+
+
+
+
+
+
+
+
+ Extract Inbox Folder Id
+
+
+
+
+ .*.t:parentfolderid
+
+
+
+
+
+
+
+
+
+
+
+ Extract Inbox Folder Change Key
+
+
+
+
+ .*.t:parentfolderid
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EWS:Read Inbox
+
+
+
+
+
+
+ Set Current Window
+
+
+
+
+ ews_SOAP.Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request_FindEmailsByQuery
+
+
+
+
+
+
+ .*.soap:Body.*
+
+
+
+
+
+
+
+
+
+
+
+ Set Owner
+
+
+
+
+ filter.Owner
+
+
+
+
+
+
+ .*.t:emailaddress
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Read 20 at a time
+
+
+ MaxEntriesReturned
+
+
+ 20
+
+
+
+
+
+ .*.m:indexedpageitemview
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EWS:Read Inbox
+
+
+
+
+ ews.Server
+
+
+
+ FindItem
+
+
+
+ ews_SOAP.Request
+
+
+ SOAP 1.2
+
+
+
+
+
+ ews.UserName
+
+
+
+
+ ews.Password
+
+
+
+
+
+ ews_SOAP.StatusCode
+
+
+ ews_SOAP.Headers
+
+ true
+
+
+ ignoreLoadErrors
+ responseHeadersAttributeName
+ responseStatusCodeAttributeName
+ headerProvider
+ credentialsProvider
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ emails?
+
+
+ <t:items>\n</t:items>
+
+
+
+
+
+ .*.t:items
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+ Loop emails
+
+ t:message
+
+
+
+
+ .*.t:items
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+ Get basic email data - FAST
+
+
+
+
+
+
+ Extract Subject
+
+
+
+
+
+ 1
+
+
+
+ .*.t:subject
+
+
+
+
+
+
+
+
+
+
+
+ Extract Date Time Sent
+
+
+
+
+
+ 1
+
+
+
+ .*.t:datetimesent
+
+
+
+
+
+
+
+
+
+
+
+ Extract Sender
+
+
+
+
+
+ 1
+
+
+
+ .*.t:name
+
+
+
+
+
+
+
+
+
+
+
+ Extract Attachment Name
+
+
+
+
+
+ 1
+
+
+
+ .*.t:hasattachments
+
+
+
+
+
+
+
+
+
+
+
+ Extract Is Read
+
+
+
+
+
+ 1
+
+
+
+ .*.t:isread
+
+
+
+
+
+
+
+
+
+
+
+ Extract Item Id
+
+
+
+
+
+ 1
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+ Extract Id
+
+
+
+
+
+ 1
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+ Extract Item Change Key
+
+
+
+
+
+ 1
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Loop through active Filters for this inbox
+
+ >>SELECT objectkey from Filter
+where active='y'
+and server='<<+filter.Server+>>'
+and owner='<<+filter.Owner+>>'
+and inbox='<<+filter.InBox+>>'
+<<
+
+
+ objectkey
+
+ filter.Name
+
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+ Get FIlter
+
+
+
+
+
+
+ filter.Name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Quick Filter Check
+
+
+
+
+
+
+ passes subject Filter?
+
+
+ filter.SubjectFilter=="" || replacePattern(Email.Subject,filter.SubjectFilter,"") != Email.Subject
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ name
+
+
+
+ quick Attachment Filter?
+
+
+ filter.AttachmentFilter=="" || Email.Attachment !="false"
+
+
+
+
+ false
+ false
+
+
+ We don't yet know the attachment names.
+but Email.Attachment=true if there are 1 or more attachements.
+So if there is an attachmentname filter AND there are no attachments then the filter fails.
+Later we download all the attachment names and check them more throughly
+
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Detailed Filter Check
+
+
+
+
+
+
+ EWS:Get complete email - SLOW
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request_GetItem
+
+
+
+
+
+
+ .*.soap:Body.*
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute Id
+
+
+ Id
+
+
+
+ ews.ItemId
+
+
+
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute ChangeKey
+
+
+ ChangeKey
+
+
+
+ ews.ItemChangeKey
+
+
+
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+ EWS:Get Item
+
+
+
+
+ ews.Server
+
+
+
+ GetItem
+
+
+
+ ews_SOAP.Request
+
+
+ SOAP 1.2
+
+
+
+
+
+ ews.UserName
+
+
+
+
+ ews.Password
+
+
+
+
+
+ ews_SOAP.StatusCode
+
+
+ ews_SOAP.Headers
+
+ true
+
+
+ ignoreLoadErrors
+ responseHeadersAttributeName
+ responseStatusCodeAttributeName
+ headerProvider
+ credentialsProvider
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Body
+
+
+
+
+ .*.t:body
+
+
+
+
+
+
+
+
+
+
+
+ Extract Sender
+
+
+
+
+ .*.t:emailaddress
+
+
+
+
+
+
+
+
+
+
+
+ Extract CC
+
+
+
+
+ .*.t:ccrecipients.*.t:emailaddress
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+
+
+ Extract Recipient
+
+
+
+
+ .*.t:torecipients.*.t:emailaddress
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ passes Sender Filter?
+
+
+ filter.SenderFilter=="" || replacePattern(Email.Sender,filter.SenderFilter,"") != Email.Sender
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ name
+
+
+
+ passes Body Filter?
+
+
+ filter.BodyFilter=="" || replacePattern(Email.Body,filter.BodyFilter,"") != Email.Body
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ name
+
+
+
+
+ no attachment filter?
+
+
+ filter.AttachmentFilter==""
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ name
+
+
+
+ passes Attachment Filter?
+
+
+ Attachment
+
+
+
+
+
+ .*.t:FileAttachment
+
+
+ ".*<t:Name>"+filter.AttachmentFilter+"</t:Name>.*"
+
+
+ HTML
+
+
+
+
+ false
+ false
+
+
+ this only finds the first attachment with the filter match
+
+
+ name
+
+
+
+
+ Get attachment?
+
+
+ filter.ExportAttachment
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ name
+
+
+
+ EWS:Get Attachment
+
+
+
+
+
+
+ Extract Attachment Name
+
+
+
+
+
+ Attachment
+
+
+
+ .*.t:attachmentid
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Requestt_GetAttachment
+
+
+
+
+
+
+ .*.soap:Body.*
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute Id
+
+
+ Id
+
+
+
+ Email.AttachmentName
+
+
+
+
+
+
+ .*.t:attachmentid
+
+
+
+
+
+
+
+
+
+
+
+ EWS:Get Attachment
+
+
+
+
+ ews.Server
+
+
+
+ GetItem
+
+
+
+ ews_SOAP.Request
+
+
+ SOAP 1.2
+
+
+
+
+
+ ews.UserName
+
+
+
+
+ ews.Password
+
+
+
+
+
+ ews_SOAP.StatusCode
+
+
+ ews_SOAP.Headers
+
+ true
+
+
+ ignoreLoadErrors
+ responseHeadersAttributeName
+ responseStatusCodeAttributeName
+ headerProvider
+ credentialsProvider
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Attachment Name
+
+
+
+
+ .*.t:name
+
+
+
+
+
+
+
+
+
+
+
+ Extract Attachment
+
+
+
+
+ .*.t:content
+
+
+
+
+
+
+
+
+
+
+
+ Convert Attachement from Binary
+
+
+
+
+
+ Email.Attachment
+
+
+
+
+
+ Email.Attachment
+
+
+
+
+ you will need to pick a long text variable to convert the attachement too.
+Make sure in the converter you select the default page encoding. Here it defaults to utf-8.
+
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Save Email to Database
+
+
+
+
+
+
+ Assign Classification
+
+
+
+ filter.Name
+
+
+
+ Email.Classification
+
+
+
+
+
+
+
+
+
+
+
+ Assign Is Processed
+
+
+ false
+
+
+ Email.isProcessed
+
+
+
+
+
+
+
+
+
+
+
+ Assign Is Read
+
+
+
+ filter.MarkAsRead
+
+
+
+ Email.isRead
+
+
+
+
+
+
+
+
+
+
+
+ Store in Database
+
+
+ Email
+
+
+
+
+ The email is stored with the unique ID that came from the email server. If the filters are re-run the email is not added to the database, it is updated.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mark Email in Outlook as "processed"
+
+
+
+
+
+
+
+ mark as read?
+
+
+
+ filter.MarkAsRead
+
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ name
+
+
+
+ Assign Is Read
+
+
+ true
+
+
+ Email.isRead
+
+
+
+
+
+
+
+
+
+
+
+ EWS:Mark Email as Read
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request_ItemMarkAsRead
+
+
+
+
+
+
+ .*.soap:Body.*
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute Id
+
+
+ Id
+
+
+
+ ews.ItemId
+
+
+
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute ChangeKey
+
+
+ ChangeKey
+
+
+
+ ews.ItemChangeKey
+
+
+
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+ EWS:Mark as Read
+
+
+
+
+ ews.Server
+
+
+
+ UpdateItem
+
+
+
+ ews_SOAP.Request
+
+
+ SOAP 1.2
+
+
+
+
+
+ ews.UserName
+
+
+
+
+ ews.Password
+
+
+
+
+
+ ews_SOAP.StatusCode
+
+
+ ews_SOAP.Headers
+
+ true
+
+
+ ignoreLoadErrors
+ responseHeadersAttributeName
+ responseStatusCodeAttributeName
+ headerProvider
+ credentialsProvider
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EWS:Categorize Email as "Robot Prcoessed"
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request_ItemCategorize
+
+
+
+
+
+
+ .*.soap:Body.*
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute Id
+
+
+ Id
+
+
+
+ ews.ItemId
+
+
+
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute ChangeKey
+
+
+ ChangeKey
+
+
+
+ ews.ItemChangeKey
+
+
+
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+ Set Category
+
+
+ Robot Processed
+
+
+
+
+
+ .*.t:string
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EWS:Categorize as "Robot Procesed"
+
+
+
+
+ ews.Server
+
+
+
+ UpdateItem
+
+
+
+ ews_SOAP.Request
+
+
+ SOAP 1.2
+
+
+
+
+
+ ews.UserName
+
+
+
+
+ ews.Password
+
+
+
+
+
+ ews_SOAP.StatusCode
+
+
+ ews_SOAP.Headers
+
+ true
+
+
+ ignoreLoadErrors
+ responseHeadersAttributeName
+ responseStatusCodeAttributeName
+ headerProvider
+ credentialsProvider
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ move to OutBox?
+
+
+ filter.OutBox!=""
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ name
+
+
+
+ EWS:Find Outbox
+
+
+
+
+
+
+ Assign Outbox Folder Name
+
+
+
+ filter.OutBox
+
+
+
+ ews.Outbox_FolderName
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request_FindFolderByName
+
+
+
+
+
+
+ .*.soap:Body.*
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute Value
+
+
+ Value
+
+
+
+ ews.Outbox_FolderName
+
+
+
+
+
+
+ .*.t:constant
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute Id
+
+
+ Id
+
+
+
+ ews.Inbox_FolderId
+
+
+
+
+
+
+ .*.t:folderid
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute ChangeKey
+
+
+ ChangeKey
+
+
+
+ ews.Inbox_FolderChangeKey
+
+
+
+
+
+
+ .*.t:folderid
+
+
+
+
+
+
+
+
+
+
+
+ EWS:Read Inbox
+
+
+
+
+ ews.Server
+
+
+
+ FindItem
+
+
+
+ ews_SOAP.Request
+
+
+ SOAP 1.2
+
+
+
+
+
+ ews.UserName
+
+
+
+
+ ews.Password
+
+
+
+
+
+ ews_SOAP.StatusCode
+
+
+ ews_SOAP.Headers
+
+ true
+
+
+ ignoreLoadErrors
+ responseHeadersAttributeName
+ responseStatusCodeAttributeName
+ headerProvider
+ credentialsProvider
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Outbox Folder Id
+
+
+
+
+ .*.t:folderid
+
+
+
+
+
+
+
+
+
+
+
+ Extract Outbox Folder Change Key
+
+
+
+
+ .*.t:folderid
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EWS:Move to Folder
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request_MoveItem
+
+
+
+
+
+
+ .*.soap:Body.*
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute Id
+
+
+ Id
+
+
+
+ ews.ItemId
+
+
+
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute ChangeKey
+
+
+ ChangeKey
+
+
+
+ ews.ItemChangeKey
+
+
+
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute ChangeKey
+
+
+ ChangeKey
+
+
+
+ ews.Outbox_FolderChangeKey
+
+
+
+
+
+
+ .*.t:folderid
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute Id
+
+
+ Id
+
+
+
+ ews.Outbox_FolderId
+
+
+
+
+
+
+ .*.t:folderid
+
+
+
+
+
+
+
+
+
+
+
+ EWS: Move to Folder
+
+
+
+
+ ews.Server
+
+
+
+ UpdateItem
+
+
+
+ ews_SOAP.Request
+
+
+ SOAP 1.2
+
+
+
+
+
+ ews.UserName
+
+
+
+
+ ews.Password
+
+
+
+
+
+ ews_SOAP.StatusCode
+
+
+ ews_SOAP.Headers
+
+ true
+
+
+ ignoreLoadErrors
+ responseHeadersAttributeName
+ responseStatusCodeAttributeName
+ headerProvider
+ credentialsProvider
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Skip next Filters, Loop next Email
+
+
+ 1/0
+
+
+ filter.Id
+
+
+
+
+
+ reportingViaAPI
+ reportingViaLog
+
+ false
+ false
+
+
+
+
+
+
+ this uses a division by zero error to loop straight to next email, because of success with this filter.
+
+
+
+
+
+
+
+ Mark Email in Outlook as "ignore"
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ews_SOAP.Request_ItemCategorize
+
+
+
+
+
+
+ .*.soap:Body.*
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute Id
+
+
+ Id
+
+
+
+ ews.ItemId
+
+
+
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+ Set Attribute ChangeKey
+
+
+ ChangeKey
+
+
+
+ ews.ItemChangeKey
+
+
+
+
+
+
+ .*.t:itemid
+
+
+
+
+
+
+
+
+
+
+
+ Set Text
+
+
+ Robot Ignoring
+
+
+
+
+
+ .*.t:string
+
+
+
+
+
+
+
+
+
+
+
+ EWS:Categorize as "Robot Ignoring"
+
+
+
+
+ ews.Server
+
+
+
+ UpdateItem
+
+
+
+ ews_SOAP.Request
+
+
+ SOAP 1.2
+
+
+
+
+
+ ews.UserName
+
+
+
+
+ ews.Password
+
+
+
+
+
+ ews_SOAP.StatusCode
+
+
+ ews_SOAP.Headers
+
+ true
+
+
+ ignoreLoadErrors
+ responseHeadersAttributeName
+ responseStatusCodeAttributeName
+ headerProvider
+ credentialsProvider
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ no emails to process
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The branch below can only be run in the designer.
+it is used to create a filter.
+
+
+
+ Filter CSV->Database
+
+
+
+
+
+
+ Open Filters
+
+
+
+ Filters
+
+
+
+
+
+ text/csv
+
+
+
+
+ overrideMimeTypeProvider
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+ View as CSV
+
+
+
+ ƺ
+
+
+ ƍ
+
+
+
+
+
+
+
+
+
+
+
+ For Each Filter
+
+
+
+
+
+
+
+
+ name
+
+
+
+ Extraxct Filter
+
+
+
+
+
+
+ Extract Id from Row
+
+
+
+
+
+ 1
+
+
+
+ Id
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Name from Row
+
+
+
+
+
+ 1
+
+
+
+ Name
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract User Name from Row
+
+
+
+
+
+ 1
+
+
+
+ UserName
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Server from Row
+
+
+
+
+
+ 1
+
+
+
+ Server
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Owner from Row
+
+
+
+
+
+ 1
+
+
+
+ Owner
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract In Box from Row
+
+
+
+
+
+ 1
+
+
+
+ Inbox
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Sender Filter from Row
+
+
+
+
+
+ 1
+
+
+
+ SenderFilter
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Subject Filter from Row
+
+
+
+
+
+ 1
+
+
+
+ SubjectFilter
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Body Filter from Row
+
+
+
+
+
+ 1
+
+
+
+ BodyFilter
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Attachment Filter from Row
+
+
+
+
+
+ 1
+
+
+
+ AttachmentFilter
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Export Attachment from Row
+
+
+
+
+
+ 1
+
+
+
+ ExportAttachment
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Export Body from Row
+
+
+
+
+
+ 1
+
+
+
+ ExportBody
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Mark As Read from Row
+
+
+
+
+
+ 1
+
+
+
+ MarkAsRead
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Out Box from Row
+
+
+
+
+
+ 1
+
+
+
+ OutBox
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Date Created from Row
+
+
+
+
+
+ 1
+
+
+
+ DateCreated
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Description from Row
+
+
+
+
+
+ 1
+
+
+
+ Description
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extract Active from Row
+
+
+
+
+
+ 1
+
+
+
+ active
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ filter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Filter Database->CSV
+
+
+
+
+
+
+ Assign Filters
+
+
+
+
+
+ filter
+
+ true
+
+ TAB
+
+
+
+
+
+ Filters
+
+
+
+
+
+
+
+
+
+
+
+ Get all Filters from Database
+
+ "SELECT objectkey FROM Filter where active='y'"
+
+
+ objectkey
+
+ filter.Name
+
+
+
+
+
+
+
+
+
+
+
+ name
+
+
+
+ Find in Database
+
+
+ filter
+
+
+
+ filter.Name
+
+
+
+
+
+
+
+
+
+
+
+
+ Assign Filters
+
+
+
+
+
+ Filters
+
+
+
+
+ filter
+
+
+
+
+
+
+ Filters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ExchangeWebservices/EWS_SendEMail.robot b/Outlook/Outlook_SendEMail.robot
similarity index 96%
rename from ExchangeWebservices/EWS_SendEMail.robot
rename to Outlook/Outlook_SendEMail.robot
index c23df36..78ceb6b 100644
--- a/ExchangeWebservices/EWS_SendEMail.robot
+++ b/Outlook/Outlook_SendEMail.robot
@@ -7,16 +7,16 @@
10.6.0.2
+
-
+
-
@@ -26,29 +26,6 @@
WEBKIT
-
- ews
-
-
- ExchangeWebServices
-
-
-
- david.wright@kofax.com
- true
- kapow.robot.plugin.common.domain.StringAttributeType
-
-
-
-
-
- ews_SOAP
-
-
- ExchangeWebServices_SOAP
-
-
-
Email
@@ -59,7 +36,7 @@
abc.txt
true
-
+ kapow.robot.plugin.common.domain.StringAttributeType
<body>Hi $FirstName$,<br/>
@@ -68,24 +45,40 @@ How are you?
true
kapow.robot.plugin.common.domain.TextAttributeType
-
+
david.wright@kofax.com
true
-
- Email subject
+
+ david.wright@kofax.com
true
-
- david.wright@kofax.com
+
+ Email subject
true
+
+ ews
+
+
+ ExchangeWebServices
+
+
+
+
+ ews_SOAP
+
+
+ ExchangeWebServices_SOAP
+
+
+
@@ -114,7 +107,7 @@ How are you?
- ews.User
+ ews.UserName
@@ -300,7 +293,7 @@ https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services
- Email.To
+ Email.Recipient
@@ -717,7 +710,7 @@ https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services
- ews.User
+ ews.UserName
@@ -808,7 +801,7 @@ https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services
success log
- Email.To + ";success"
+ Email.Recipient + ";success"
@@ -826,7 +819,7 @@ https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services
fail log
- Email.To + ";fail"
+ Email.Recipient + ";fail"
diff --git a/Readme.md b/Readme.md
new file mode 100644
index 0000000..7bf6f54
--- /dev/null
+++ b/Readme.md
@@ -0,0 +1,61 @@
+# Email Helper Robots
+This project contains robots that work on *Microsoft Exchange* for processing incoming emails and for sending emails.
+
+Watch the [demo](https://www.dropbox.com/s/q0bsk8nq4sedo3d/20191001%20Kofax%20RPA%20Outlook%20InBox%20Helper.mp4?dl=0) to see this in action.
+
+## Microsoft Exchange
+* The Robot **Outlook_ProcessFolder.robot** uses rich filters to process all emails in an Outlook mailbox.
+ * this robot needs no editing at all. All configuration that is needed is in the filters and the Password Store.
+ * this one robot can look at numerous inboxes for various people and run 100's of filters over new emails
+ * this robot can look into another person's inbox or a shared inbox. The **UserName** in the filter is the login name and **Owner** is the actual owner of the inbox the robot is looking at
+* The Robot **Outlook_SendEMail.robot** builds a nicely formatted email, personalizes it and sends via Microsoft Exchange. You will see the sent email on your **Sent** Folder in Microsoft Outlook.
+
+### Installation
+* Download this Repository and add it to a Robot project in your Design Studio.
+* Run **Kofax RPA/Start Development Database** from the Windows menu.
+* load the robot **Outlook_ProcessFolder.robot**. It will want to create the **Filter** and **Email** databases.
+ * See [SQL Video](https://www.dropbox.com/s/2k2as07yinjijps/Kapow%20-%20Data%20In%20Sql.mp4?dl=0) for information about how robots work with data in databases.
+* Create your Filters
+ * Double-Click the Filters variable.
+ * Copy the default text into the clipboard and paste into Microsoft Excel
+ * Add your own filters into Microsoft Excel.
+ * *Filters use regular expressions and are very powerful. The samples show some basic usage*
+ * Select all the filters with CTRL-A and paste them back into the default value of the variable **Filters** in the robot.
+ * click on the Step **Filter CSV->Database** and select *Debug/Start Debug from this Location* (CTRL-SHIFT-D) to execute the robot from this location. This will populate your filters into the database.
+ * Open **Management Console** and switch to **Data View**. There you will see your filters.
+ * Make sure that you add relevant Outlook passwords to the **Password Store** in **Management Console** with the Target System **MSExchange**.
+### Creating Email Robots
+* Copy and customize the robot **OpenOffice.resendlater.robot** to process particular emails.
+* Write a different robot for each classification
+* You can choose to either delete the processed email or *mark as processe*d so that it will not be processed again.
+* Upload these robots
+* These robots will run many, many times per day. Most of the time they will find no emails in the first step and simply exit.
+### Uploading Robots
+* Upload all the robots to the **Management Console**.
+* Right click on **Outlook_ProcessFolder.robot** and select *Add/edit Password Access for Robot*. Do the same for **Outlook_SendEMail.robot**
+
+### Configure Microsoft Outlook ###
+* In Outlook create two new categories **Robot ignoring** and **Robot processed**. Give them any colors you like.
+* Make sure that the folder exists for processed emails and that the filter has the correct folder name in the **OutBox** column.
+
+### Scheduling
+ * In **Management Console** Run the robot **Outlook_ProcessFolder.robot** in the Scheduler. *At Kofax we have run this every minute for over 4 years - that's over 2 million times!*
+ * Add all of the other robots to the **same** schedule
+ * on the **Schedule/Advanced** tab, select **Run Sequentially*.
+ * right
+
+## GMail
+Currently there is a robot that shows how to connect to a GMail account and read emails. It Uses GMail API and OAuth authentification and is quite rudimentary.
+
+## IMAP, POP3
+You can install [yabmail](http://yawebmail.sourceforge.net/overview.html) on Tomcat for access to IMAP/POP3 email accounts.
+
+## Authors
+
+* **John Barratt@kofax** - *Initial Work* for Outlook
+* **David Wright@kofax** - *Initial Work* for Filters
+* **Jerome Marc@kofax** - *Initial Work* for GMail
+
+## License
+
+This project is licensed under the MIT License
diff --git a/Readme.txt b/Readme.txt
deleted file mode 100644
index 77fd98d..0000000
--- a/Readme.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This contains various technologies to connect RPA robots to Email.
-
-http://yawebmail.sourceforge.net/overview.html can be installed on Tomcat for access to IMAP/POP3