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 @@ - - - - - 10.4.0.0 - 10.5.0.0 - 10.6.0.2 - - - - - - - - - - - - - - - - - - - WEBKIT - - - - Email - - - Email - - - - - ews - - - ExchangeWebServices - - - - david.wright@kofax.com - true - kapow.robot.plugin.common.domain.StringAttributeType - - - - - - ews_SOAP - - - ExchangeWebServices_SOAP - - - - - - - WEBKIT - - - STANDARD - - false - 10000 - - true - 2048 - - - - - DIRECT - - - - - - - Lookup Password - - - - ews.User - - - - MSExchange - - - ews.Password - - - - - - - - - - - - - Use Office 365 - - - outlook.office365.com - - - ews.Server - - - - - - - - - - name - - - - 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(ews.Server,"https://") ? ews.Server : "https://"+ews.Server+"/ews/exchange.asmx" - - - ews.Server - - - - - - - - - - name - - - - - - - - - - - - - - - - - - - - - - - - - EWS:Find Inbox - - - - - - - Set Tag - - - - ews_SOAP.Request_FindInboxOfOwner - - - - - - - .*.soap:Body.* - - - - - - - - - - - - Set Owner - - - ews.Inbox_Owner=="" ? ews.User : ews.Inbox_Owner - - - - - - .*.t:emailaddress - - - - - - - - - - name - - - - EWS:Read Inbox - - - - - ews.Server - - - - FindItem - - - - ews_SOAP.Request - - - SOAP 1.2 - - - - - - ews.User - - - - - ews.Password - - - - - - - - - Content-Type: text/xml; charset=utf-8 - - - - - - - ews_SOAP.StatusCode - - - ews_SOAP.Headers - - true - - - ignoreLoadErrors - responseHeadersAttributeName - responseStatusCodeAttributeName - headerProvider - credentialsProvider - - - - - - - - - - - name - - - - View as XML - - - - - - - - - - - Extract Inbox Folder Id - - Id - - ews.Inbox_FolderId - - - - - - .*.t:parentfolderid - - - - - - - - - - - - Extract Inbox Folder Change Key - - ChangeKey - - ews.Inbox_FolderChangeKey - - - - - - .*.t:parentfolderid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EWS:Find Outbox - - - - - - - Set Current Window - - - - - 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.User - - - - - ews.Password - - - - - - - - - Content-Type: text/xml; charset=utf-8 - - - - - - - ews_SOAP.StatusCode - - - ews_SOAP.Headers - - true - - - ignoreLoadErrors - responseHeadersAttributeName - responseStatusCodeAttributeName - headerProvider - credentialsProvider - - - - - - - - - - - name - - - - - - - - - - - - - - - Extract Outbox Folder Id - - Id - - ews.Outbox_FolderId - - - - - - .*.t:folderid - - - - - - - - - - - - Extract Outbox Folder Change Key - - ChangeKey - - ews.Outbox_FolderChangeKey - - - - - - .*.t:folderid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EWS:Read Inbox - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ews_SOAP.Request_FindEmailsInFolder - - - - - - - .*.soap:Body.* - - - - - - - - - - - - Set Content - - - - - ews.Inbox_Owner - - - - - - - .*.t:emailaddress - - - - - - - - - - - - EWS:Read Inbox - - - - - ews.Server - - - - FindItem - - - - ews_SOAP.Request - - - SOAP 1.2 - - - - - - ews.User - - - - - ews.Password - - - - - - - - - Content-Type: text/xml; charset=utf-8 - - - - - - - ews_SOAP.StatusCode - - - ews_SOAP.Headers - - true - - - ignoreLoadErrors - responseHeadersAttributeName - responseStatusCodeAttributeName - headerProvider - credentialsProvider - - - - - - - - - - - name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - For Each Email in Inbox - - t:message - - - - - .*.t:items - - - - - - - - - - name - - - - Get basic email data - FAST - - - - - - - Extract Subject - - - Email.Subject - - - - - - - 1 - - - - .*.t:subject - - - - - - - - - - - - Extract Date Time Sent - - - - - - - yyyy-MM-ddThh:mm:ss - - - - - UTC - - - Get date (UTC) - - - - Email.DateTimeSent - - - - - - - 1 - - - - .*.t:datetimesent - - - - - - - - - - - - Extract Sender - - - Email.Sender - - - - - - - 1 - - - - .*.t:name - - - - - - - - - - - - Extract Attachment Name - - - Email.AttachmentName - - - - - - - 1 - - - - .*.t:hasattachments - - - - - - - - - - - - Extract Is Read - - - Email.isRead - - - - - - - 1 - - - - .*.t:isread - - - - - - - - - - - - Extract Item Id - - Id - - ews.ItemId - - - - - - - 1 - - - - .*.t:itemid - - - - - - - - - - - - Extract Item Change Key - - ChangeKey - - ews.ItemChangeKey - - - - - - - 1 - - - - .*.t:itemid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BUILD YOUR QUICK FILTER HERE - - - - here you can filter emails using only subject and sender name (no sender email address yet) - - - - - - - EWS:Get complete email - SLOW - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ews_SOAP.Request_GetItem - - - - - - - .*.soap:Body.* - - - - - - - - - - - - Set Attribute Id - - - Id - - - - ews.ItemId - - - - - - - .*.t:itemid - - - - - - - - - - - - Set Attribute ChangeKey - - - - - - - ews.ItemChangeKey - - - - - - - .*.t:itemid - - - - - - - - - - - - EWS:Get Item - - - - - ews.Server - - - - GetItem - - - - ews_SOAP.Request - - - SOAP 1.2 - - - - - - ews.User - - - - - ews.Password - - - - - - - - - Content-Type: text/xml; charset=utf-8 - - - - - - - ews_SOAP.StatusCode - - - ews_SOAP.Headers - - true - - - ignoreLoadErrors - responseHeadersAttributeName - responseStatusCodeAttributeName - headerProvider - credentialsProvider - - - - - - - - - - - name - - - - - - - - - - - - - - - Extract Body - - - Email.Body - - - - - - .*.t:body - - - - - - - - - - - - Extract Sender - - - Email.Sender - - - - - - .*.t:emailaddress - - - - - - - - - - - - Extract CC - - - Email.CC - - - - - - .*.t:ccrecipients.*.t:emailaddress - - - - - false - false - - - - - - - - - - Extract To - - - Email.To - - - - - - .*.t:torecipients.*.t:emailaddress - - - - - - - - - - - - Extract Attachment Name - - - Email.AttachmentName - - - - - - .*.t:name - - - - - - reportingViaAPI - reportingViaLog - - false - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Build your Slow FILTER here - - - - here you have all email information, including all recipient & CC email addresses, Body, attachment names. - - - name - - - - EWS:Mark Email as Read - - - - - - - - - - - - ews_SOAP.Request - - - - - - - - - - - - - - - - - - ews_SOAP.Request_ItemMarkAsRead - - - - - - - .*.soap:Body.* - - - - - - - - - - - - Set Attribute Id - - - - - - - ews.ItemId - - - - - - - .*.t:itemid - - - - - - - - - - - - Set Attribute ChangeKey - - - - - - - ews.ItemChangeKey - - - - - - - .*.t:itemid - - - - - - - - - - - - EWS:Mark as Read - - - - - ews.Server - - - - UpdateItem - - - - ews_SOAP.Request - - - SOAP 1.2 - - - - - - ews.User - - - - - ews.Password - - - - - - - - - Content-Type: text/xml; charset=utf-8 - - - - - - - ews_SOAP.StatusCode - - - ews_SOAP.Headers - - true - - - ignoreLoadErrors - responseHeadersAttributeName - responseStatusCodeAttributeName - headerProvider - credentialsProvider - - - - - - - - - - - name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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:Mark as Read - - - - - ews.Server - - - - UpdateItem - - - - ews_SOAP.Request - - - SOAP 1.2 - - - - - - ews.User - - - - - ews.Password - - - - - - - - - Content-Type: text/xml; charset=utf-8 - - - - - - - ews_SOAP.StatusCode - - - ews_SOAP.Headers - - true - - - ignoreLoadErrors - responseHeadersAttributeName - responseStatusCodeAttributeName - headerProvider - credentialsProvider - - - - - - - - - - - name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Use Kofax.com - - - - - - - - - name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 + + + + + + GMail.messageId + + + + + + + 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 + + + + + &#39; + ' + + + + email.Body + + + + + + @top:.snippet + + + + + + + + + + + + Extract Headers + + + GMail.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 + + + + + + + + + Content-Type: text/xml; charset=utf-8 + + + + + + + ews_SOAP.StatusCode + + + ews_SOAP.Headers + + true + + + ignoreLoadErrors + responseHeadersAttributeName + responseStatusCodeAttributeName + headerProvider + credentialsProvider + + + + + + + + + + + name + + + + View as XML + + + + + + + + + + + Extract Inbox Folder Id + + Id + + ews.Inbox_FolderId + + + + + + .*.t:parentfolderid + + + + + + + + + + + + Extract Inbox Folder Change Key + + ChangeKey + + ews.Inbox_FolderChangeKey + + + + + + .*.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 + + + + + + + + + Content-Type: text/xml; charset=utf-8 + + + + + + + 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 + + + Email.Subject + + + + + + + 1 + + + + .*.t:subject + + + + + + + + + + + + Extract Date Time Sent + + + + + + + yyyy-MM-ddThh:mm:ss + + + + + UTC + + + Get date (UTC) + + + + Email.DateTimeSent + + + + + + + 1 + + + + .*.t:datetimesent + + + + + + + + + + + + Extract Sender + + + Email.Sender + + + + + + + 1 + + + + .*.t:name + + + + + + + + + + + + Extract Attachment Name + + + Email.AttachmentName + + + + + + + 1 + + + + .*.t:hasattachments + + + + + + + + + + + + Extract Is Read + + + Email.isRead + + + + + + + 1 + + + + .*.t:isread + + + + + + + + + + + + Extract Item Id + + Id + + ews.ItemId + + + + + + + 1 + + + + .*.t:itemid + + + + + + + + + + + + Extract Id + + Id + + Email.Id + + + + + + + 1 + + + + .*.t:itemid + + + + + + + + + + + + Extract Item Change Key + + ChangeKey + + ews.ItemChangeKey + + + + + + + 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 + + + + + + + + + Content-Type: text/xml; charset=utf-8 + + + + + + + ews_SOAP.StatusCode + + + ews_SOAP.Headers + + true + + + ignoreLoadErrors + responseHeadersAttributeName + responseStatusCodeAttributeName + headerProvider + credentialsProvider + + + + + + + + + + + name + + + + + + + + + + + + + + + Extract Body + + + + filter.ExportBody =="true" ? INPUT : "" + only take the body if the filter says so + + + + Email.Body + + + + + + .*.t:body + + + + + + + + + + + + Extract Sender + + + Email.Sender + + + + + + .*.t:emailaddress + + + + + + + + + + + + Extract CC + + + Email.CC + + + + + + .*.t:ccrecipients.*.t:emailaddress + + + + + false + false + + + + + + + + + + Extract Recipient + + + Email.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 + + Id + + Email.AttachmentName + + + + + + + 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 + + + + + + + + + Content-Type: text/xml; charset=utf-8 + + + + + + + ews_SOAP.StatusCode + + + ews_SOAP.Headers + + true + + + ignoreLoadErrors + responseHeadersAttributeName + responseStatusCodeAttributeName + headerProvider + credentialsProvider + + + + + + + + + + + name + + + + + + + + + + + + + + + Extract Attachment Name + + + Email.AttachmentName + + + + + + .*.t:name + + + + + + + + + + + + Extract Attachment + + + + + + Email.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 + + + + + + + + + Content-Type: text/xml; charset=utf-8 + + + + + + + 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 + + + + + + + + + Content-Type: text/xml; charset=utf-8 + + + + + + + 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 + + + + + + + + + Content-Type: text/xml; charset=utf-8 + + + + + + + ews_SOAP.StatusCode + + + ews_SOAP.Headers + + true + + + ignoreLoadErrors + responseHeadersAttributeName + responseStatusCodeAttributeName + headerProvider + credentialsProvider + + + + + + + + + + + name + + + + + + + + + + + + + + + Extract Outbox Folder Id + + Id + + ews.Outbox_FolderId + + + + + + .*.t:folderid + + + + + + + + + + + + Extract Outbox Folder Change Key + + ChangeKey + + ews.Outbox_FolderChangeKey + + + + + + .*.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 + + + + + + + + + Content-Type: text/xml; charset=utf-8 + + + + + + + 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 + + + + + + + + + Content-Type: text/xml; charset=utf-8 + + + + + + + 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 + + + + + + + filter.Id + + + + + + + + 1 + + + + Id + + + + + + + + + + + + + + Extract Name from Row + + + + filter.Name + + + + + + + + 1 + + + + Name + + + + + + + + + + + + + + Extract User Name from Row + + + + filter.UserName + + + + + + + + 1 + + + + UserName + + + + + + + + + + + + + + Extract Server from Row + + + + filter.Server + + + + + + + + 1 + + + + Server + + + + + + + + + + + + + + Extract Owner from Row + + + + filter.Owner + + + + + + + + 1 + + + + Owner + + + + + + + + + + + + + + Extract In Box from Row + + + + filter.InBox + + + + + + + + 1 + + + + Inbox + + + + + + + + + + + + + + Extract Sender Filter from Row + + + + filter.SenderFilter + + + + + + + + 1 + + + + SenderFilter + + + + + + + + + + + + + + Extract Subject Filter from Row + + + + filter.SubjectFilter + + + + + + + + 1 + + + + SubjectFilter + + + + + + + + + + + + + + Extract Body Filter from Row + + + + filter.BodyFilter + + + + + + + + 1 + + + + BodyFilter + + + + + + + + + + + + + + Extract Attachment Filter from Row + + + + filter.AttachmentFilter + + + + + + + + 1 + + + + AttachmentFilter + + + + + + + + + + + + + + Extract Export Attachment from Row + + + + + + + + n + + + + + y + + + TRUE + + + + + + + filter.ExportAttachment + + + + + + + + 1 + + + + ExportAttachment + + + + + + + + + + + + + + Extract Export Body from Row + + + + + + + + n + + + + + y + + + + + + + + filter.ExportBody + + + + + + + + 1 + + + + ExportBody + + + + + + + + + + + + + + Extract Mark As Read from Row + + + + + + + + n + + + + + y + + + + + + + + filter.MarkAsRead + + + + + + + + 1 + + + + MarkAsRead + + + + + + + + + + + + + + Extract Out Box from Row + + + + filter.OutBox + + + + + + + + 1 + + + + OutBox + + + + + + + + + + + + + + Extract Date Created from Row + + + + + + + + + dd/MM/yy hh:mm a + + + + + + + filter.DateCreated + + + + + + + + 1 + + + + DateCreated + + + + + + + + + + + + + + Extract Description from Row + + + + filter.Description + + + + + + + + 1 + + + + Description + + + + + + + + + + + + + + Extract Active from Row + + + + + + + + n + + + + + y + + + + + + + + filter.active + + + + + + + + 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