Working with EML files in Pega Robotics Solution
Working with EML files in Pega Robotics Solution
In my recent RPA project for an insurance & finance
major, we caught up with situation where the format for the input found to be
different in production environment with respect to the UAT. This deviation was
mainly the change of the input file type from MSG to EML.
Let’s talk about EML file format; EML is file extension for
an email message saved to a file in the MIME
RFC 822 standard format
by Microsoft
Outlook Express as well as some other email programs. It contains email header,
subject, body, hyperlinks and attachments etc.
MSG is file extension for email message used as default by
Microsoft outlook and exchange. It contains email header, subject, sender,
body, hyperlinks, attachments etc.
Earlier during the development phase, it was only MSG files
we received from the source application and we were able to parse it using
Microsoft Office Interoperability framework. However during go-live we
discovered that all inputs received are of the type EML and therefore the solution
failed to parse it.
Microsoft Office Interoperability framework does not allow
parsing the EML files and therefore the existing logic for reading the message
files (msg) can’t be deployed. There are many such 3rd party
libraries available online for parsing an EML file but same could impose
security or compliance threat and licensing would again add up to the solution
cost.
Through a great deal of online research we figured out a
solution for parsing an EML files and that too without requiring any 3rd
party libraries in place. Below article turned out to be very useful for
achieving the desired result.
References:-
How do I read/parse EML files in RPA solution?
- Open new project in Pega Robotics Studio, under solution explorer navigate to the project’s reference and do a right click and select “Add Reference”
- Go to “COM” tab and look for the library “Microsoft CDO for Windows 2000 Library” and click to select and add to the project references.
- Again right click on References and select “Add Reference”, navigate to “.NET” tab and select assembly reference “adodb”
- Add a script component to your Global Container and add the below methods in it
//This script will allow loading of the
EML file and returning a message object
Parameters: string emlFileName
(full path for the eml file)
public CDO.Message LoadEmlFromFile(string
emlFileName)
{
CDO.Message msg
= new CDO.Message();
ADODB.Stream
stream = new ADODB.Stream();
stream.Open(Type.Missing, ADODB.ConnectModeEnum.adModeUnknown,
ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, String.Empty, String.Empty);
stream.LoadFromFile(emlFileName);
stream.Flush();
msg.DataSource.OpenObject(stream, "_Stream");
msg.DataSource.Save();
stream.Close();
return msg;
}
//This method below will call the above
method to get message object that will expose the required properties and
methods such as Subject, Sender, TextBody, Attachments etc.
Parameters: string msgfile (full
path for the eml file), string Directory (folder location for the eml file, out
DataTable details (This table will be populated with eml file details, out
string MsgSubject (for receiving message subject, out string MBody (for reading
message body)
public bool ReadMsgFile(string msgfile, string Directory, out DataTable details, out string MsgSubject, out string MBody)
{
CDO.Message msg =
LoadEmlFromFile(msgfile);
//Reading the email subject
MsgSubject = msg.Subject.ToUpper();
//Reading sender name from message
string sendermail = msg.Sender;
//Reading the body of the message
MBody = msg.TextBody;
//Initialzing DataTable object
details = new DataTable();
//Adding columns to DataTable
details.Columns.Add("Sender_Email", typeof(string));
details.Columns.Add("Sender_Name", typeof(string));
details.Columns.Add("Attachment", typeof(string));
details.Columns.Add("Extention", typeof(string));
details.Columns.Add("Subject",
typeof(string));
//Checking if email message contains
attachments
if (msg.Attachments.Count > 0)
{
for (int i = 1;
i<=msg.Attachments.Count; i++)
{
// Creating a path for saving of the
attachments
string savepath =
string.Concat(Directory, msg.Attachments[i].FileName);
//Saving the attachments to path created
above
msg.Attachments[i].SaveToFile(savepath);
//Retrieving the extension for the
attachment saved above
string ext =
System.IO.Path.GetExtension(savepath);
//Adding all the acquired details into
DataTable
details.Rows.Add(sendermail, msg.Sender, savepath, ext,
MsgSubject);
}
return true;
}
else
{
return false;
}
}
Good Post. I like your blog. Thanks for Sharing
ReplyDeleteRPA Training in Noida
I think this is an informative post and it is very useful and knowledgeable. therefore, I would like to thank you for the efforts you have made in writing this article.
ReplyDeleteBest RPA Training in Pune
Sushant Singh Rajput Last Movie Dil Bechara 2020 Download HDRip
ReplyDeleteDil Bechara 2020 FHD Download Here
So far out of all the blogs,I personally feel this blog is just awesome.There are soo many information provided here in this blog. Therefore It is totally amazing...
ReplyDeleteSoftware Testing Services
Software Testing Company
Functional Testing Services
QA Automation Testing Services
Functional Testing Company
Performance Testing Services
Security Testing Services
API Testing Services
Regression Testing Services
eCommerce Testing Services
Mobile App Testing Services
Thank you for sharing the valuable information.
ReplyDeletepega robotic process automation training
pega robotic process automation course
This information is impressive; I am inspired how continuously you describe this topic. After reading your post, thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic
ReplyDeleteMazeevents
best event management company in chennai
event management companies in chennai
Nice Blog Post!! Thank you for sharing this useful information about Robotics. I appreciate your effort in this blog Contact us if you need any help with Best Automation Services
ReplyDelete