C++/CLI Example// The following example codes demonstrate parsing S/MIME email - digital signature and decryption
// To get full sample projects, please download and install EAGetMail on your machine.
// To run it correctly, please change email server, user, password, folder, file name value to yours
#include "stdafx.h"
using namespace System;
using namespace System::Text;
using namespace System::Collections;
using namespace System::IO;
// Add EAGetMail namespace
using namespace EAGetMail;
void ParseEmail(String ^emlFile)
{
Mail ^oMail = gcnew Mail("TryIt");
oMail->Load(emlFile, false);
if (oMail->IsEncrypted)
{
try
{
// This email is encrypted, we decrypt it by user default certificate.
// you can also use specified certificate like this
// Certificate ^oCert = gcnew Certificate();
// oCert->Load("c:\\test.pfx", "pfxpassword",
// Certificate::CertificateKeyLocation::CRYPT_USER_KEYSET);
// oMail = oMail->Decrypt( oCert );
oMail = oMail->Decrypt(nullptr);
}
catch (Exception ^ep)
{
Console::WriteLine(ep->Message);
}
}
if (oMail->IsSigned)
{
try
{
// This email is digital signed.
EAGetMail::Certificate ^cert = oMail->VerifySignature();
Console::WriteLine("This email contains a valid digital signature.");
// You can add the certificate to your certificate storage like this
// cert->AddToStore(
// Certificate::CertificateStoreLocation::CERT_SYSTEM_STORE_CURRENT_USER,
// "addressbook" );
// then you can use send the encrypted email back to this sender.
}
catch (Exception ^ep)
{
Console::WriteLine(ep->Message);
}
}
// Parse sender
Console::WriteLine("From: {0}", oMail->From->ToString());
// Parse Mail To
array<MailAddress^> ^addrs = oMail->To;
for (int i = 0; i < addrs->Length; i++)
{
Console::WriteLine("To: {0}", addrs[i]->ToString());
}
// Parse Mail CC
addrs = oMail->Cc;
for (int i = 0; i < addrs->Length; i++)
{
Console::WriteLine("To: {0}", addrs[i]->ToString());
}
// Parse Subject
Console::WriteLine("Subject: {0}", oMail->Subject);
// Parse Text/Plain body
Console::WriteLine("TextBody: {0}", oMail->TextBody);
// Parse Html Body
Console::WriteLine("HtmlBody: {0}", oMail->HtmlBody );
// Parse Attachments
array<Attachment^> ^atts = oMail->Attachments;
for (int i = 0; i < atts->Length; i++)
{
Console::WriteLine("Attachment: {0}", atts[i]->Name);
}
}
int main(array<System::String ^> ^args)
{
ParseEmail("c:\\my folder\\test.eml");
return 0;
}
Click here to read original topic - full version ... If you have any comments or questions about above example codes, please add your comments here.