Add Reference of EAGetMail to Visual Stuido.NET Project
To use EAGetMail POP3 and IMAP Component in your project, the first step is "Add reference of EAGetMail to your project". Please create/open your project with Visual Studio.NET, then choose menu->"Project"->"Add Reference"->".NET"->"Browse...", and choose the "Installation Path\Lib\[portable* or uap]\EAGetMail.winmd" from your disk, click "Open"->"OK", the reference of EAGetMail will be added to your project, and you can start to use EAGetMail POP3 and IMAP Component in your project.
Install from NuGet
You can also install the run-time assembly by NuGet. Run the following command in the NuGet Package Manager Console:
Install-Package EAGetMail
Deploying EAGetMail with Application
After compiling your project, a copy of EAGetMail.winmd will be generated by compiler in same folder of your application executable file. Packing all the *.winmd and *.exe in the folder to installer is ok. As EAGetMail is a pure .NET Component, it doesn't require "Regsvr32" (self-register) to register the dll.
Deploying EAGetMail with ASP.NET/Web Application
The EAGetMail.winmd should be copied to [website root folder]\bin folder or [virtual directory root]\bin folder. If the project is created by Visual Studio.NET + FrontPage Extension directly, Visual Studio.NET will deploy EAGetMail.dll automatically.
Seperate builds of run-time assembly for Windows Run Time
| File | .NET Framework Version |
| Lib\portable-win81+wpa81\EAGetMail.winmd |
Built with .NET Framework 4.5.1
It requires Windows Store App Runtime 8.1 or later version. |
| Lib\uap10.0\EAGetMail.winmd |
Built with Universal Windows Platform.
It requires Windows 10 or later version (Universal Windows Platform). |
Send/Edit/Compose Email
EAGetMail Component doesn't send, edit or compose email. To send, edit or compose email, please use EASendMail SMTP Component.
Example
[Visual Basic, C#, Javascript] The following example demonstrates how to retrieve email and parse email with EAGetMail. To get the full samples of EAGetMail, please refer to Samples section.
[VB - Retrieve email and parse email]
Imports EAGetMail
Async Function ReadParseEmail(
serverAddress As String,
user As String,
password As String,
sslConnection As Boolean,
protocol As ServerProtocol) As Task
Try
Dim server As MailServer = New MailServer(serverAddress, user, password, protocol)
server.SSLConnection = sslConnection
' Set port based on protocol and ssl.
Select Case (protocol)
Case ServerProtocol.Pop3
If sslConnection Then
server.Port = 995
Else
server.Port = 110
End If
Case ServerProtocol.Imap4
If sslConnection Then
server.Port = 993
Else
server.Port = 143
End If
End Select
Dim client As MailClient = New MailClient("TryIt")
Await client.ConnectAsync(server)
Dim infos As IList(Of MailInfo) = Await client.GetMailInfosAsync()
For i As Integer = 0 To infos.Count - 1
Dim info As MailInfo = infos(i)
Dim mail As Mail = Await client.GetMailAsync(info)
Dim fileName As String = String.Format("{0}\{1}.eml",
Windows.Storage.ApplicationData.Current.LocalFolder.Path, i)
Await mail.SaveAsAsync(fileName, True)
Await ParseEmail(fileName)
Next
' delete emails from server.
For i As Integer = 0 To infos.Count - 1
Dim info As MailInfo = infos(i)
Await client.DeleteAsync(info)
Next
Await client.QuitAsync()
Catch ep As Exception
Dim errorDescrption As String = ep.Message
End Try
End Function
Async Function ParseEmail(fileName As String) As Task
Try
Dim mail As Mail = New Mail("TryIt")
Await mail.LoadAsync(fileName)
Dim sender As String = mail.From.Address
Dim subject As String = mail.Subject
Dim [to] As IList(Of MailAddress) = mail.To
For i As Integer = 0 To [to].Count - 1
Dim address As String = [to](i).Address
Next
Dim cc As IList(Of MailAddress) = mail.Cc
For i As Integer = 0 To [cc].Count - 1
Dim address As String = cc(i).Address
Next
Dim textBody As String = mail.TextBody
Dim htmlBody As String = mail.HtmlBody
Dim attachments As IList(Of Attachment) = mail.Attachments
For i As Integer = 0 To attachments.Count - 1
Dim attachment As Attachment = attachments(i)
Dim attachmentName As String = String.Format("{0}\{1}",
Windows.Storage.ApplicationData.Current.LocalFolder.Path, attachment.Name)
Await attachment.SaveAsAsync(attachmentName, True)
Next
Catch ep As Exception
Dim errorDescrption As String = ep.Message
End Try
End Function
[C# - Retrieve and parse email]
using EAGetMail;
async Task ReadParseEmail( string serverAddress,
string user,
string password,
bool sslConnection,
ServerProtocol protocol)
{
try
{
MailServer server = new MailServer(serverAddress, user, password, protocol);
server.SSLConnection = sslConnection;
// Set port based on protocol and ssl.
switch (protocol)
{
case ServerProtocol.Pop3:
server.Port = (sslConnection) ? 995 : 110;
break;
case ServerProtocol.Imap4:
server.Port = (sslConnection) ? 993 : 143;
break;
default:
break;
}
MailClient client = new MailClient("TryIt");
await client.ConnectAsync(server);
IList infos = await client.GetMailInfosAsync();
for (int i = 0; i < infos.Count; i++)
{
MailInfo info = infos[i];
Mail mail = await client.GetMailAsync(info);
string fileName = String.Format("{0}\\{1}.eml",
Windows.Storage.ApplicationData.Current.LocalFolder.Path, i);
await mail.SaveAsAsync(fileName, true);
await ParseEmail(fileName);
}
// delete emails from server.
for (int i = 0; i < infos.Count; i++)
{
MailInfo info = infos[i];
await client.DeleteAsync(info);
}
await client.QuitAsync();
}
catch (Exception ep)
{
string errorDescrption = ep.Message;
}
}
async Task ParseEmail(string fileName)
{
try
{
Mail mail = new Mail("TryIt");
await mail.LoadAsync(fileName);
string sender = mail.From.Address;
string subject = mail.Subject;
IList<MailAddress> to = mail.To;
for (int i = 0; i < to.Count; i++)
{
string address = to[i].Address;
}
IList<MailAddress> cc = mail.Cc;
for (int i = 0; i < cc.Count; i++)
{
string address = cc[i].Address;
}
string textBody = mail.TextBody;
string htmlBody = mail.HtmlBody;
IList<Attachment> attachments = mail.Attachments;
for (int i = 0; i < attachments.Count; i++)
{
Attachment attachment = attachments[i];
string attachmentName = String.Format("{0}\\{1}",
Windows.Storage.ApplicationData.Current.LocalFolder.Path, attachment.Name);
await attachment.SaveAsAsync(attachmentName, true);
}
}
catch (Exception ep)
{
string errorDescrption = ep.Message;
}
}
[Javascript - Retrieve and parse email]
function readParseEmail(serverAddress,
user,
password,
sslConnection,
protocol) {
try {
var server = new EAGetMail.MailServer(serverAddress, user, password, protocol);
server.sslconnection = sslConnection;
switch (protocol)
{
case EAGetMail.ServerProtocol.pop3:
server.port = sslConnection ? 995 : 110;
break;
case EAGetMail.ServerProtocol.imap4:
server.port = sslConnection ? 993 : 143;
break;
default:
break;
}
var client = new EAGetMail.MailClient("TryIt");
client.connectAsync(server)
.then(function () {
return client.getMailInfosAsync();
})
.then(function (infos) {
var promise = WinJS.Promise.as();
infos.forEach(function (info, index) {
promise = promise
.then(function () {
return client.getMailAsync(info);
})
.then(function (mail) {
var fileName = Windows.Storage.ApplicationData.current.localFolder.path
+ '\\' + index + '.eml';
return mail.saveAsAsync(fileName, true)
.then(function () {
return WinJS.Promise.as(fileName);
});
})
.then(function (fileName) {
return parseEmail(fileName);
});
});
return promise;
})
.then(function () {
return client.quitAsync();
})
.done(function () {
},
function (e) {
var errorDescription = e.description;
}
);
}
catch (e)
{
var errorDescription = e.description;
}
}
function parseEmail(fileName) {
var mail = new EAGetMail.Mail('TryIt');
return mail.loadAsync(fileName)
.then(function () {
var sender = mail.from.address;
var subject = mail.subject;
var to = mail.to;
for (var i = 0; i < to.length; i++) {
var address = to[i].address;
}
var cc = mail.cc;
for (var i = 0; i < cc.length; i++) {
var address = cc[i].address;
}
var textBody = mail.textBody;
var htmlBody = mail.htmlBody;
var attachments = mail.attachments;
var promise = WinJS.Promise.as();
attachments.forEach(function (attachment, index) {
promise = promise.then(function () {
var file = Windows.Storage.ApplicationData.current.localFolder.path + '\\' + attachment.name;
return attachment.saveAsAsync(file, true);
});
});
return promise;
});
}