<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog &#124; Limilabs &#187; Mail.dll</title>
	<atom:link href="http://www.limilabs.com/blog/tag/mail-dll/feed" rel="self" type="application/rss+xml" />
	<link>http://www.limilabs.com/blog</link>
	<description></description>
	<lastBuildDate>Mon, 21 May 2012 09:49:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Folder access with IMAP</title>
		<link>http://www.limilabs.com/blog/folder-access-with-imap?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=folder-access-with-imap</link>
		<comments>http://www.limilabs.com/blog/folder-access-with-imap#comments</comments>
		<pubDate>Tue, 15 May 2012 13:17:09 +0000</pubDate>
		<dc:creator>Limilabs support</dc:creator>
				<category><![CDATA[Component]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[Mail.dll]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://www.limilabs.com/blog/?p=2827</guid>
		<description><![CDATA[This article describes how to access different folder then inbox using Mail.dll IMAP library. In most cases the first thing you need from an IMAP server is to access INBOX folder. Mail.dll has a special method for that, as this is the only folder that must exist on every IMAP server. It&#8217;s Imap.SelectInbox. Most servers, [...]]]></description>
			<content:encoded><![CDATA[<p>This article describes how to access different folder then inbox using Mail.dll <a href="http://www.limilabs.com/mail">IMAP library</a>.</p>
<p>In most cases the first thing you need from an IMAP server is to access INBOX folder. Mail.dll has a special method for that, as this is the only folder that must exist on every IMAP server. It&#8217;s <em>Imap.SelectInbox</em>.</p>
<p>Most servers, of course, allow client to access more folders. You can <a href="http://www.limilabs.com/blog/list-all-folders-using-imap">list all IMAP folders</a> using <em>Imap.GetFolders</em> method.</p>
<p>If you want to <strong>access different IMAP folder</strong> than Inbox, you need to use overloaded <em>Imap.Select </em>method which takes string parameter (folder name) or <em>FolderInfo </em> parameter (returned from a call to <em>Imap.GetFolders</em> method).</p>
<p>After that you can use <em>GetAll</em>, <em>Search</em> and <em>GetMessageByUID</em> methods to search and download email messages.</p>
<pre class="brush: csharp;">
// C#

using (Imap imap = new Imap())
{
    imap.Connect(&quot;imap.example.com&quot;);    // or ConnectSSL for SSL
    imap.Login(&quot;user&quot;, &quot;password&quot;);

    imap.Select(&quot;Sent items&quot;);

    Console.WriteLine(
        &quot;There are {0} messages in 'Sent items'&quot;,
        imap.GetAll().Count);

    imap.Close();
}
</pre>
<pre class="brush: vb;">
' VB.NET

Using imap As New Imap()
	imap.Connect(&quot;imap.example.com&quot;)	' or ConnectSSL for SSL
	imap.Login(&quot;user&quot;, &quot;password&quot;)

	imap.[Select](&quot;Sent items&quot;)

	Console.WriteLine( _
		&quot;There are {0} messages in 'Sent items'&quot;, _
		imap.GetAll().Count)

	imap.Close()
End Using
</pre>
<p>There is<strong> no established standard on naming common IMAP folders</strong> like &#8216;Sent mail&#8217;, &#8216;Spam&#8217; etc. However some servers support XLIST command (Gmail) or SpecialUse extension that allow to <a href="http://www.limilabs.com/blog/common-imap-folders">identify common folders on this particular IMAP server</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limilabs.com/blog/folder-access-with-imap/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Common IMAP folders</title>
		<link>http://www.limilabs.com/blog/common-imap-folders?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=common-imap-folders</link>
		<comments>http://www.limilabs.com/blog/common-imap-folders#comments</comments>
		<pubDate>Thu, 19 Apr 2012 14:56:18 +0000</pubDate>
		<dc:creator>Limilabs support</dc:creator>
				<category><![CDATA[Component]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[Mail.dll]]></category>
		<category><![CDATA[SPECIAL-USE]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[XLIST]]></category>

		<guid isPermaLink="false">http://www.limilabs.com/blog/?p=2647</guid>
		<description><![CDATA[There are no well-know names for common folders such as Drafts, Trash, Spam, &#8230; defined in IMAP protocol standards. This makes quite difficult for an IMAP client to know the real purpose of the folders on the server. Fortunately there are two IMAP protocol extensions: XLIST &#8211; supported by Gmail SPECIAL-USE &#8211; RFC standardized extension [...]]]></description>
			<content:encoded><![CDATA[<p>There are <strong>no well-know names for common folders</strong> such as Drafts, Trash, Spam, &#8230; defined in IMAP protocol standards.</p>
<p>This makes quite difficult for an <a href="http://www.limilabs.com/mail">IMAP client</a> to know the real purpose of the folders on the server.</p>
<p>Fortunately there are two IMAP protocol extensions:</p>
<ul>
<li> <a href="http://www.limilabs.com/blog/localized-gmail-imap-folders"><strong>XLIST </strong> &#8211; supported by Gmail</a></li>
<li> <strong>SPECIAL-USE</strong> &#8211; RFC standardized extension</li>
</ul>
<p>You can check if your servers support it by <a href="http://www.limilabs.com/blog/get-supported-server-extensions-imap-pop3-smtp">checking if <em>SupportedExtensions</em> returns <em>ImapExtension.XList</em> or <em>ImapExtension.SpecialUse</em></a></p>
<p>Both extensions are supported by Mail.dll and, if your server supports any of them, you can take advantage of <em>CommonFolders </em>class. <em>CommonFolders</em> allows you to get the name of the folder and <em>Select </em>it, by knowing its purpose (for example Spam folder may be called &#8220;Junk email&#8221; on the server).</p>
<pre class="brush: csharp;">
// C# version:

using (Imap imap = new Imap())
{
    imap.ConnectSSL(&quot;imap.gmail.com&quot;);
    imap.Login(&quot;pat@gmail.com&quot;, &quot;password&quot;);

    CommonFolders folders = new CommonFolders(imap.GetFolders());

    Console.WriteLine(&quot;Inbox folder: &quot; + folders.Inbox.Name);
    Console.WriteLine(&quot;Sent folder: &quot; + folders.Sent.Name);
    Console.WriteLine(&quot;Spam folder: &quot; + folders.Spam.Name);

    // You can select folders easy:
    imap.Select(folders.Inbox);
    imap.Select(folders.Sent);
    imap.Select(folders.Spam);

    imap.Close();
}
</pre>
<pre class="brush: vb;">
' VB.NET version:

Using imap As New Imap()
    imap.ConnectSSL(&quot;imap.gmail.com&quot;)
    imap.Login(&quot;pat@gmail&quot;, &quot;password&quot;)

    Dim folders As New CommonFolders(imap.GetFolders())

    Console.WriteLine(&quot;Inbox folder: &quot; + folders.Inbox.Name)
    Console.WriteLine(&quot;Sent folder: &quot; + folders.Sent.Name)

    ' You can select folders easy:
    imap.Select(folders.Inbox)
    imap.Select(folders.Sent)

    imap.Close()
End Using
</pre>
<p>You can check if you can use <em>CommonFolders </em>with following code:</p>
<pre class="brush: csharp;">
// C#

List&lt;ImapExtension&gt; extensions = client.SupportedExtensions();
bool canUseCommonFolders = extensions.Contains(ImapExtension.XList)
    || extensions.Contains(ImapExtension.SpecialUse);
</pre>
<pre class="brush: vb;">
' VB.NET

Dim extensions As List(Of ImapExtension) = client.SupportedExtensions()
Dim canUseCommonFolders As Boolean = extensions.Contains(ImapExtension.XList) OrElse extensions.Contains(ImapExtension.SpecialUse)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.limilabs.com/blog/common-imap-folders/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Get Google contacts</title>
		<link>http://www.limilabs.com/blog/get-google-contacts?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=get-google-contacts</link>
		<comments>http://www.limilabs.com/blog/get-google-contacts#comments</comments>
		<pubDate>Fri, 13 Apr 2012 14:30:44 +0000</pubDate>
		<dc:creator>Limilabs support</dc:creator>
				<category><![CDATA[Component]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Mail.dll]]></category>
		<category><![CDATA[OAuth]]></category>

		<guid isPermaLink="false">http://www.limilabs.com/blog/?p=2636</guid>
		<description><![CDATA[Although neither POP3 nor IMAP protocol allows retrieving the list of users contacts, it is possible to use Google API for that. As long as you are using OAuth to access Gmail, Mail.dll email component allows you to easy download Gmail contacts of a particular user. // C# GmailOAuth oauth = new GmailOAuth(_consumerKey, _consumerSecret); List&#60;GoogleScope&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Although neither POP3 nor IMAP protocol allows retrieving the list of users contacts, it is possible to use Google API for that.</p>
<p>As long as you are using <a href="http://www.limilabs.com/blog/oauth-with-gmail">OAuth to access Gmail</a>, Mail.dll <a href="http://www.limilabs.com/mail">email component </a>allows you to easy download Gmail contacts of a particular user.</p>
<pre class="brush: csharp;">
// C#

GmailOAuth oauth = new GmailOAuth(_consumerKey, _consumerSecret);

List&lt;GoogleScope&gt; scopes = new List&lt;GoogleScope&gt;
    {
        GoogleScope.EmailAddressScope,
        GoogleScope.ContactsScope
    };

string authUrl = oauth.GetAuthorizationUrl(&quot;http://localhost:64119/&quot;, scopes);

// ASP.NET client:
// Save oauth in permanent storage:
// Cache[oauth.RequestToken.Token] = oauth;

// Windows client:
Process.Start(url);

// ASP.NET client:
// Response.Redirect(url);

// Windows client with url:
string rawReturnUrl = Console.ReadLine();
ReturnUrl returnUrl = new ReturnUrl(rawReturnUrl);
oauth.GetAccessToken(returnUrl.OAuthVerifier);

// Windows client with verification code (oob):
// string oauthVerifier = HttpUtility.UrlDecode(Console.ReadLine());
// oauth.GetAccessToken(oauthVerifier);

// ASP.NET client:
// ReturnUrl returnUrl = new ReturnUrl(Request.RawUrl);
// Retrieve oauth from permanent storage:
// GmailOAuth oauth = Cache[returnUrl.OAuthToken]
// oauth.GetAccessToken(returnUrl.OAuthVerifier);

GoogleApi google = new GoogleApi(oauth.ConsumerToken, oauth.AccessToken);

XmlDocument contacts = google.GetContacts();

XmlNamespaceManager nsmgr = new XmlNamespaceManager(contacts.NameTable);
nsmgr.AddNamespace(&quot;gd&quot;, &quot;http://schemas.google.com/g/2005&quot;);
nsmgr.AddNamespace(&quot;a&quot;, &quot;http://www.w3.org/2005/Atom&quot;);

foreach (XmlNode contact in contacts.GetElementsByTagName(&quot;entry&quot;))
{
    XmlNode title = contact.SelectSingleNode(&quot;a:title&quot;, nsmgr);
    XmlNode email = contact.SelectSingleNode(&quot;gd:email&quot;, nsmgr);

    Console.WriteLine(&quot;{0}: {1}&quot;,
        title.InnerText,
        email.Attributes[&quot;address&quot;].Value);
}

oauth.RevokeToken(oauth.AccessToken.Token);
</pre>
<pre class="brush: vb;">
' VB.NET

Dim oauth As New GmailOAuth(_consumerKey, _consumerSecret)

Dim scopes As New List(Of GoogleScope)() With { _
	GoogleScope.EmailAddressScope, _
	GoogleScope.ContactsScope _
}
Dim authUrl As String = oauth.GetAuthorizationUrl(&quot;http://localhost:64119/&quot;, scopes)

' ASP.NET client:
' Save oauth in permanent storage:
' Cache[oauth.RequestToken.Token] = oauth;

' Windows client:
Process.Start(url)

' ASP.NET client:
' Response.Redirect(url)

' Windows client with url:
Dim rawReturnUrl As String = Console.ReadLine()
Dim returnUrl As New ReturnUrl(rawReturnUrl)
oauth.GetAccessToken(returnUrl.OAuthVerifier)

' Windows client with verification code (oob):
' Dim oauthVerifier As String = HttpUtility.UrlDecode(Console.ReadLine())
' oauth.GetAccessToken(oauthVerifier)

' ASP.NET client:
' Dim returnUrl As New ReturnUrl(Request.RawUrl)
' Retrive oauth from permanent storage:
' Dim oauth As GmailOAuth = Cache(returnUrl.OAuthToken)
' oauth.GetAccessToken(returnUrl.OAuthVerifier)

Dim google As New GoogleApi(oauth.ConsumerToken, oauth.AccessToken)
Dim contacts As XmlDocument = google.GetContacts()

Dim nsmgr As New XmlNamespaceManager(contacts.NameTable)
nsmgr.AddNamespace(&quot;gd&quot;, &quot;http://schemas.google.com/g/2005&quot;)
nsmgr.AddNamespace(&quot;a&quot;, &quot;http://www.w3.org/2005/Atom&quot;)

For Each contact As XmlNode In contacts.GetElementsByTagName(&quot;entry&quot;)
	Dim title As XmlNode = contact.SelectSingleNode(&quot;a:title&quot;, nsmgr)
	Dim email As XmlNode = contact.SelectSingleNode(&quot;gd:email&quot;, nsmgr)
	Console.WriteLine(&quot;{0}: {1}&quot;, _
            title.InnerText, _
            email.Attributes(&quot;address&quot;).Value)
Next

oauth.RevokeToken(oauth.AccessToken.Token)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.limilabs.com/blog/get-google-contacts/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create HTML from plain text email</title>
		<link>http://www.limilabs.com/blog/create-html-from-plain-text-email?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=create-html-from-plain-text-email</link>
		<comments>http://www.limilabs.com/blog/create-html-from-plain-text-email#comments</comments>
		<pubDate>Thu, 12 Apr 2012 09:23:07 +0000</pubDate>
		<dc:creator>Limilabs support</dc:creator>
				<category><![CDATA[Component]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Mail.dll]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://www.limilabs.com/blog/?p=2629</guid>
		<description><![CDATA[Mail.dll MIME and email component may be used to retrieve plain-text body or HTML body from an email message. If a message contains HTML, no conversion is necessary. You just need to use HTML property of IMail interface. If however an email does not contain HTML and only plain-text content is available, many times plain-text [...]]]></description>
			<content:encoded><![CDATA[<p>Mail.dll MIME and <a href="http://www.limilabs.com/mail">email component</a> may be used to retrieve plain-text body or HTML body from an email message.</p>
<p>If a message contains HTML, no conversion is necessary. You just need to use <em>HTML </em>property of <em>IMail </em>interface.</p>
<p>If however an email does not contain HTML and only plain-text content is available, many times plain-text needs be converted to HTML.</p>
<p>You can use <strong>GetBodyAsHtml</strong> method that<strong> always returns body in HTML format</strong> (it uses <em>IMail.HTML</em> property or creates valid HTML from <em>IMail.Text</em>).</p>
<pre class="brush: csharp;">
// C#

IMail email = ...

string html = email.GetBodyAsHtml();
Console.WriteLine(html);
</pre>
<pre class="brush: vb;">
' VB.NET

Dim email As IMail = ...

Dim html As String = email.GetBodyAsHtml()
Console.WriteLine(html)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.limilabs.com/blog/create-html-from-plain-text-email/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Label message with Gmail system label (e.g. Starred)</title>
		<link>http://www.limilabs.com/blog/label-message-with-gmail-system-label-starred?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=label-message-with-gmail-system-label-starred</link>
		<comments>http://www.limilabs.com/blog/label-message-with-gmail-system-label-starred#comments</comments>
		<pubDate>Sat, 31 Mar 2012 07:08:40 +0000</pubDate>
		<dc:creator>Limilabs support</dc:creator>
				<category><![CDATA[Component]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[Mail.dll]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[X-GM-LABELS]]></category>

		<guid isPermaLink="false">http://www.limilabs.com/blog/?p=2565</guid>
		<description><![CDATA[If you want to use user-defined label please read label message with user defined label. There are two ways of labeling message with Gmail system label (e.g. Starred) Imap.GmailLabelMessageByUID method GmailLabelMessageByUID method uses Gmail&#8217;s X-GM-LABELS extension to the IMAP protocol. You need to provide a folder flag name for it to work correctly e.g. @&#8221;\Starred&#8221;. [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to use user-defined label please read <a href="http://www.limilabs.com/blog/label-message-with-gmail-label">label message with user defined label</a>.</p>
<p>There are two ways of labeling message with Gmail system label (e.g. Starred)</p>
<h2>Imap.GmailLabelMessageByUID method</h2>
<p><em>GmailLabelMessageByUID </em>method uses Gmail&#8217;s <strong>X-GM-LABELS</strong> extension to the IMAP protocol. You need to provide a folder flag name for it to work correctly e.g. @&#8221;\Starred&#8221;.</p>
<p>You can use FolderFlag class static properties to get common flags:<br />
<em>FolderFlag.XImportant</em>, <em>FolderFlag.XSpam</em>, <em>FolderFlag.XStarred</em>.</p>
<pre class="brush: csharp;">
// C#

using (Imap imap = new Imap())
{
    imap.ConnectSSL(&quot;imap.gmail.com&quot;);
    imap.Login(&quot;pat@gmail.com&quot;, &quot;password&quot;);

    imap.SelectInbox();
    long last = imap.GetAll().Last();

    imap.GmailLabelMessageByUID(last, FolderFlag.XStarred.Name);

    imap.Close();
}
</pre>
<pre class="brush: vb;">
' VB.NET

Using imap As New Imap()
    imap.ConnectSSL(&quot;imap.gmail.com&quot;)
    imap.Login(&quot;pat@gmail.com&quot;, &quot;password&quot;)

    imap.SelectInbox()
    Dim last As Long = imap.GetAll().Last()

    imap.GmailLabelMessageByUID(last, FolderFlag.XStarred.Name)

    imap.Close()
End Using
</pre>
<h2>Imap.CopyByUID method</h2>
<p>The second method basis on the fact that <strong>Gmail treats labels as regular IMAP folders</strong>.<br />
You just need to know correct folder name and copy the message to this folder.</p>
<p>You can use <em>CommonFolders </em>class to get common folders:</p>
<pre class="brush: csharp;">
// C#

using (Imap imap = new Imap())
{
    imap.ConnectSSL(&quot;imap.gmail.com&quot;);
    imap.Login(&quot;pat@gmail.com&quot;, &quot;password&quot;);

    List&lt;FolderInfo&gt; folders = imap.GetFolders();

    imap.SelectInbox();
    long last = imap.GetAll().Last();

    imap.CopyByUID(last, new CommonFolders(folders).Starred);

    imap.Close();
}
</pre>
<pre class="brush: vb;">
' VB.NET

Using imap As New Imap()
    imap.ConnectSSL(&quot;imap.gmail.com&quot;)
    imap.Login(&quot;pat@gmail.com&quot;, &quot;password&quot;)

    Dim folders As List(Of FolderInfo) = imap.GetFolders()

    imap.SelectInbox()
    Dim last As Long = imap.GetAll().Last()

    imap.CopyByUID(last, New CommonFolders(folders).Starred)

    imap.Close()
End Using
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.limilabs.com/blog/label-message-with-gmail-system-label-starred/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Send vCard business card</title>
		<link>http://www.limilabs.com/blog/send-vcard-business-card?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=send-vcard-business-card</link>
		<comments>http://www.limilabs.com/blog/send-vcard-business-card#comments</comments>
		<pubDate>Sat, 10 Mar 2012 18:53:04 +0000</pubDate>
		<dc:creator>Limilabs support</dc:creator>
				<category><![CDATA[Component]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Mail.dll]]></category>
		<category><![CDATA[SMTP]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[vCard]]></category>

		<guid isPermaLink="false">http://www.limilabs.com/blog/?p=2548</guid>
		<description><![CDATA[Mail.dll .NET email component makes sending vCard business cards easy. MailBuilder class contains AddVCard method, that can be used to add vCard business card as a attachment to your email. You can use VCard class to create VCARD business card. It provides easy to use API to add phone, email and address information. Here&#8217;s the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.limilabs.com/mail">Mail.dll .NET email component</a> makes sending vCard business cards easy.</p>
<p><em>MailBuilder</em> class contains <em>AddVCard</em> method, that can be used to add vCard business card as a attachment to your email.<br />
You can use <em>VCard</em> class to create VCARD business card. It provides easy to use API to add phone, email and address information.</p>
<p>Here&#8217;s the simple sample showing how to send email with VCard business card:</p>
<pre class="brush: csharp;">
// C#

// Create VCard business card

VCard vCard = new VCard();

vCard.FullName = &quot;John Doe&quot;;
vCard.Name = new VCardName(&quot;John&quot;, &quot;Doe&quot;);
vCard.Organization = new VCardOrganization(&quot;Example&quot;);
vCard.Title = &quot;CEO&quot;;
vCard.Url = &quot;http://www.example.com&quot;;

VCardEmail workEmail = new VCardEmail(&quot;john.doe@example.com&quot;);
workEmail.MarkWork();
workEmail.MarkPreferred();
vCard.Emails.Add(workEmail);

VCardEmail homeEmail = new VCardEmail(&quot;john.doe@gmail.com&quot;);
homeEmail.MarkHome();
vCard.Emails.Add(homeEmail);

VCardAddress workAddress = new VCardAddress(&quot;&quot;, &quot;&quot;, &quot;501 E. Middlefield Rd.&quot;, &quot;Mountain View&quot;, &quot;CA&quot;, &quot;94043&quot;, &quot;U.S.A.&quot;);
workAddress.MarkWork();
vCard.Addresses.Add(workAddress);

VCardAddress homeAddress = new VCardAddress(&quot;&quot;, &quot;&quot;, &quot;6544 Battleford Drive&quot;, &quot;Raleigh&quot;, &quot;NC&quot;, &quot;27613-3502&quot;, &quot;U.S.A.&quot;);
homeAddress.MarkHome();
vCard.Addresses.Add(homeAddress);

VCardPhone homePhone = new VCardPhone(&quot;+1-919-676-9515&quot;);
homePhone.MarkHome();
vCard.Phones.Add(homePhone);

VCardPhone workPhone = new VCardPhone();
workPhone.AsUri(&quot;tel:+1-919-676-9564&quot;);
workPhone.MarkWork();
workPhone.MarkFax();
workPhone.MarkVoice();
vCard.Phones.Add(workPhone);

// Create email message

MailBuilder builder = new MailBuilder();
builder.From.Add(new MailBox(&quot;john.doe@example.com&quot;));
builder.To.Add(new MailBox(&quot;bob@example.com&quot;));
builder.Text = &quot;Business card&quot;;
builder.Text = &quot;Here's my business card.&quot;;
builder.AddVCard(vCard);
IMail email = builder.Create();

// Send email message using SMTP protocol

using(Smtp smtp  = new Smtp())
{
    smtp.ConnectSSL(&quot;imap.example.com&quot;);
    smtp.UseBestLogin(&quot;user&quot;, &quot;password&quot;);
    smtp.SendMessage(email);
    smtp.Close();
}
</pre>
<pre class="brush: vb;">
' VB.NET

' Create VCard business card

Dim vCard As New VCard()

vCard.FullName = &quot;John Doe&quot;
vCard.Name = New VCardName(&quot;John&quot;, &quot;Doe&quot;)
vCard.Organization = New VCardOrganization(&quot;Example&quot;)
vCard.Title = &quot;CEO&quot;
vCard.Url = &quot;http://www.example.com&quot;

Dim workEmail As New VCardEmail(&quot;john.doe@example.com&quot;)
workEmail.MarkWork()
workEmail.MarkPreferred()
vCard.Emails.Add(workEmail)

Dim homeEmail As New VCardEmail(&quot;john.doe@gmail.com&quot;)
homeEmail.MarkHome()
vCard.Emails.Add(homeEmail)

Dim workAddress As New VCardAddress(&quot;&quot;, &quot;&quot;, &quot;501 E. Middlefield Rd.&quot;, &quot;Mountain View&quot;, &quot;CA&quot;, &quot;94043&quot;, _
	&quot;U.S.A.&quot;)
workAddress.MarkWork()
vCard.Addresses.Add(workAddress)

Dim homeAddress As New VCardAddress(&quot;&quot;, &quot;&quot;, &quot;6544 Battleford Drive&quot;, &quot;Raleigh&quot;, &quot;NC&quot;, &quot;27613-3502&quot;, _
	&quot;U.S.A.&quot;)
homeAddress.MarkHome()
vCard.Addresses.Add(homeAddress)

Dim homePhone As New VCardPhone(&quot;+1-919-676-9515&quot;)
homePhone.MarkHome()
vCard.Phones.Add(homePhone)

Dim workPhone As New VCardPhone()
workPhone.AsUri(&quot;tel:+1-919-676-9564&quot;)
workPhone.MarkWork()
workPhone.MarkFax()
workPhone.MarkVoice()
vCard.Phones.Add(workPhone)

' Create email message

Dim builder As New MailBuilder()
builder.From.Add(New MailBox(&quot;john.doe@example.com&quot;))
builder.[To].Add(New MailBox(&quot;bob@example.com&quot;))
builder.Text = &quot;Business card&quot;
builder.Text = &quot;Here's my business card.&quot;
builder.AddVCard(vCard)
Dim email As IMail = builder.Create()

' Send email message using SMTP protocol

Using smtp As New Smtp()
	smtp.ConnectSSL(&quot;imap.example.com&quot;)
	smtp.UseBestLogin(&quot;user&quot;, &quot;password&quot;)
	smtp.SendMessage(email)
	smtp.Close()
End Using
</pre>
<p>Such <a href="http://www.limilabs.com/blog/receive-vcard-business-card">email can be parsed and VCard extracted</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limilabs.com/blog/send-vcard-business-card/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Receive vCard business card</title>
		<link>http://www.limilabs.com/blog/receive-vcard-business-card?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=receive-vcard-business-card</link>
		<comments>http://www.limilabs.com/blog/receive-vcard-business-card#comments</comments>
		<pubDate>Sat, 03 Mar 2012 12:18:25 +0000</pubDate>
		<dc:creator>Limilabs support</dc:creator>
				<category><![CDATA[Component]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[Mail.dll]]></category>
		<category><![CDATA[POP3]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[vCard]]></category>

		<guid isPermaLink="false">http://www.limilabs.com/blog/?p=2535</guid>
		<description><![CDATA[Mail.dll .NET email component makes receiving vCard business cards easy. IMail object exposes VCards collection that contains all vCard business cards that were found while parsing an email. You can use both IMAP or POP3 protocol to download email from the server. Here&#8217;s the simple sample showing how to process VCard business cards: // C# [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.limilabs.com/mail">Mail.dll .NET email component</a> makes receiving vCard business cards easy.</p>
<p><em>IMail</em> object exposes <em>VCards</em> collection that contains all vCard business cards that were found while parsing an email.</p>
<p>You can use both IMAP or POP3 protocol to <a href="http://www.limilabs.com/blog/receive-unseen-emails-using-imap">download email from the server</a>.</p>
<p>Here&#8217;s the simple sample showing how to process VCard business cards:</p>
<pre class="brush: csharp;">
// C#

IMail email = new MailBuilder().CreateFromEml(client.GetMessageByUID(uid));

foreach (VCard vCard in email.VCards)
{

    Console.WriteLine(&quot;first name: &quot; + vCard.Name.FirstName);
    Console.WriteLine(&quot;last name: &quot; + vCard.Name.LastName);
    Console.WriteLine(&quot;full name: &quot; + vCard.FullName);

    Console.WriteLine(&quot;email: &quot; + vCard.Email);
    Console.WriteLine(&quot;work phone: &quot; + vCard.WorkPhone);
    Console.WriteLine(&quot;home phone: &quot; + vCard.HomePhone);

    if (vCard.WorkAddress != null)
    {
        Console.WriteLine(vCard.WorkAddress.PostOfficeBox);
        Console.WriteLine(vCard.WorkAddress.ApartmentNumber);
        Console.WriteLine(vCard.WorkAddress.Street);
        Console.WriteLine(vCard.WorkAddress.City);
        Console.WriteLine(vCard.WorkAddress.Region);
        Console.WriteLine(vCard.WorkAddress.PostalCode);
        Console.WriteLine(vCard.WorkAddress.Country);
    }
    if (vCard.HomeAddress != null)
    {
        //...
    }

    foreach (VCardPhone phone in vCard.Phones)
    {
        Console.WriteLine(&quot;phone: &quot; + phone.Value);
    }
    foreach (VCardAddress address in vCard.Addresses)
    {
        Console.WriteLine(&quot;street: &quot; + address.Street);
    }
    foreach (VCardEmail mail in vCard.Emails)
    {
        Console.WriteLine(&quot;email: &quot; + mail.Value);
    }
}
</pre>
<pre class="brush: vb;">
' VB.NET

Dim email As IMail = New MailBuilder().CreateFromEml(client.GetMessageByUID(uid))

For Each vCard As VCard In email.VCards

	Console.WriteLine(&quot;first name: &quot; + vCard.Name.FirstName)
	Console.WriteLine(&quot;last name: &quot; + vCard.Name.LastName)
	Console.WriteLine(&quot;full name: &quot; + vCard.FullName)

	Console.WriteLine(&quot;email: &quot; + vCard.Email)
	Console.WriteLine(&quot;work phone: &quot; + vCard.WorkPhone)
	Console.WriteLine(&quot;home phone: &quot; + vCard.HomePhone)

	If vCard.WorkAddress IsNot Nothing Then
		Console.WriteLine(vCard.WorkAddress.PostOfficeBox)
		Console.WriteLine(vCard.WorkAddress.ApartmentNumber)
		Console.WriteLine(vCard.WorkAddress.Street)
		Console.WriteLine(vCard.WorkAddress.City)
		Console.WriteLine(vCard.WorkAddress.Region)
		Console.WriteLine(vCard.WorkAddress.PostalCode)
		Console.WriteLine(vCard.WorkAddress.Country)
	End If
			'...
	If vCard.HomeAddress IsNot Nothing Then
	End If

	For Each phone As VCardPhone In vCard.Phones
		Console.WriteLine(&quot;phone: &quot; + phone.Value)
	Next
	For Each address As VCardAddress In vCard.Addresses
		Console.WriteLine(&quot;street: &quot; + address.Street)
	Next
	For Each mail As VCardEmail In vCard.Emails
		Console.WriteLine(&quot;email: &quot; + mail.Value)
	Next
Next
</pre>
<p>You can learn here how to <a href="http://www.limilabs.com/blog/send-vcard-business-card">send email with VCard</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limilabs.com/blog/receive-vcard-business-card/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Download unseen emails from Gmail using IMAP video</title>
		<link>http://www.limilabs.com/blog/download-unseen-emails-from-gmail-using-imap-video?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=download-unseen-emails-from-gmail-using-imap-video</link>
		<comments>http://www.limilabs.com/blog/download-unseen-emails-from-gmail-using-imap-video#comments</comments>
		<pubDate>Wed, 01 Feb 2012 14:34:31 +0000</pubDate>
		<dc:creator>Limilabs support</dc:creator>
				<category><![CDATA[Component]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[Mail.dll]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.limilabs.com/blog/?p=2425</guid>
		<description><![CDATA[In this video you&#8217;ll learn how to: Create new application that references Mail.dll IMAP component. Configure Gmail to allow IMAP access. Connect and login to Gmail using SSL secured channel. Search and download unseen emails. Parse downloaded email messages. and finally access most common email properties like subject, sender, attachments. Enjoy:]]></description>
			<content:encoded><![CDATA[<p>In this video you&#8217;ll learn how to:</p>
<ul>
<li>Create new application that references Mail.dll <a href="http://www.limilabs.com/mail">IMAP component</a>.</li>
<li>Configure Gmail to allow IMAP access. </li>
<li>Connect and login to Gmail using SSL secured channel.</li>
<li>Search and download unseen emails.</li>
<li>Parse downloaded email messages.</li>
<li>and finally access most common email properties like subject, sender, attachments.</li>
</ul>
<p>Enjoy:</p>
<p><object type="application/x-shockwave-flash" style="width:640px; height:505px;" data="http://www.youtube.com/v/SxFuw1OBKlc?rel=0&amp;showsearch=0&amp;version=3&amp;modestbranding=1"><param name="movie" value="http://www.youtube.com/v/I16OVFIKQzM?rel=0&amp;showsearch=0&amp;version=3&amp;modestbranding=1" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.limilabs.com/blog/download-unseen-emails-from-gmail-using-imap-video/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Receive iCalendar meeting request</title>
		<link>http://www.limilabs.com/blog/receive-icalendar-meeting-request?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=receive-icalendar-meeting-request</link>
		<comments>http://www.limilabs.com/blog/receive-icalendar-meeting-request#comments</comments>
		<pubDate>Mon, 30 Jan 2012 09:16:46 +0000</pubDate>
		<dc:creator>Limilabs support</dc:creator>
				<category><![CDATA[Component]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[iCalendar]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[Mail.dll]]></category>
		<category><![CDATA[POP3]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://www.limilabs.com/blog/?p=2533</guid>
		<description><![CDATA[Mail.dll .NET email component makes receiving iCalendar meeting request fairly easy. IMail object exposes Appointments collection that contains all appointments that were found while parsing an email. You can use both IMAP or POP3 protocol to download email from the server. Here&#8217;s the simple sample showing how to process iCalendar appointments: // C# IMail email [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.limilabs.com/mail">Mail.dll .NET email component</a> makes receiving iCalendar meeting request fairly easy.</p>
<p><em>IMail</em> object exposes <em>Appointments</em> collection that contains all appointments that were found while parsing an email.</p>
<p>You can use both IMAP or POP3 protocol to <a href="http://www.limilabs.com/blog/receive-unseen-emails-using-imap">download email from the server</a>.</p>
<p>Here&#8217;s the simple sample showing how to process iCalendar appointments:</p>
<pre class="brush: csharp;">
// C#

IMail email = new MailBuilder().CreateFromEml(client.GetMessageByUID(uid));

foreach (Appointment appointment in email.Appointments)
{
    if (appointment.Method == Method.Request)
    {
        // appointment was created
        string summary = appointment.Event.Summary;
        DateTime? start = appointment.Event.Start;
        DateTime? end = appointment.Event.End;
        string location = appointment.Event.Location;

        Console.WriteLine(&quot;{0} at {1} ({2}-{3})&quot;, summary, location, start, end);

        foreach (Participant participant in appointment.Event.Participants)
        {
            Console.WriteLine(&quot;Common name: &quot; + participant.Cn);
            Console.WriteLine(&quot;Email: &quot; + participant.Email);
            Console.WriteLine(&quot;Participation status: &quot; + participant.Status);
        }
    }
    else if (appointment.Method == Method.Cancel)
    {
        // appointment was canceled
        Console.WriteLine(&quot;Event was cancelled: &quot; + appointment.Event.UID);

    }
    else if (appointment.Method == Method.Reply)
    {
        // someone replied to the request
        foreach (Participant participant in appointment.Event.Participants)
        {
            if (participant.Status == ParticipationStatus.Accepted)
                Console.WriteLine(&quot;Event was accepted by: &quot; + participant.Email);
            else if (participant.Status == ParticipationStatus.Declined)
                Console.WriteLine(&quot;Event was declined by: &quot; + participant.Email);
        }

    }
}
</pre>
<pre class="brush: vb;">
' VB.NET

Dim email As IMail = New MailBuilder().CreateFromEml(client.GetMessageByUID(uid))

For Each appointment As Appointment In email.Appointments
	If appointment.Method = Method.Request Then
		' appointment was created
		Dim summary As String = appointment.[Event].Summary
		Dim start As System.Nullable(Of DateTime) = appointment.[Event].Start
		Dim [end] As System.Nullable(Of DateTime) = appointment.[Event].[End]
		Dim location As String = appointment.[Event].Location

		Console.WriteLine(&quot;{0} at {1} ({2}-{3})&quot;, summary, location, start, [end])

		For Each participant As Participant In appointment.[Event].Participants
			Console.WriteLine(&quot;Common name: &quot; + participant.Cn)
			Console.WriteLine(&quot;Email: &quot; + participant.Email)
			Console.WriteLine(&quot;Participation status: &quot; + participant.Status)
		Next
	ElseIf appointment.Method = Method.Cancel Then
		' appointment was canceled

		Console.WriteLine(&quot;Event was cancelled: &quot; + appointment.[Event].UID)
	ElseIf appointment.Method = Method.Reply Then
		' someone replied to the request
		For Each participant As Participant In appointment.[Event].Participants
			If participant.Status = ParticipationStatus.Accepted Then
				Console.WriteLine(&quot;Event was accepted by: &quot; + participant.Email)
			ElseIf participant.Status = ParticipationStatus.Declined Then
				Console.WriteLine(&quot;Event was declined by: &quot; + participant.Email)
			End If

		Next
	End If
Next
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.limilabs.com/blog/receive-icalendar-meeting-request/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Archive email in Gmail</title>
		<link>http://www.limilabs.com/blog/archive-email-in-gmail?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=archive-email-in-gmail</link>
		<comments>http://www.limilabs.com/blog/archive-email-in-gmail#comments</comments>
		<pubDate>Fri, 06 Jan 2012 10:54:01 +0000</pubDate>
		<dc:creator>Limilabs support</dc:creator>
				<category><![CDATA[Component]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[Mail.dll]]></category>

		<guid isPermaLink="false">http://www.limilabs.com/blog/?p=2240</guid>
		<description><![CDATA[First remember to enable IMAP in Gmail. You need to use DeleteMessageByUID method. Messages will be still available in All Mail folder. // C# using(Imap imap = new Imap()) { imap.ConnectSSL(&#34;imap.gmail.com&#34;); imap.Login(&#34;user&#34;, &#34;password&#34;); // Find all emails we want to delete imap.SelectInbox(); List&#60;long&#62; uids = imap.Search( Expression.Subject(&#34;email to archive&#34;)); imap.DeleteMessageByUID(uids); imap.Close(); } ' VB.NET Using [...]]]></description>
			<content:encoded><![CDATA[<p>First remember to <a href="http://www.limilabs.com/blog/enable-imap-in-gmail">enable IMAP in Gmail</a>.</p>
<p>You need to use DeleteMessageByUID method. Messages will be still available in All Mail folder.</p>
<pre class="brush: csharp;">
// C#

using(Imap imap = new Imap())
{
	imap.ConnectSSL(&quot;imap.gmail.com&quot;);
	imap.Login(&quot;user&quot;, &quot;password&quot;);

	// Find all emails we want to delete
	imap.SelectInbox();
	List&lt;long&gt; uids = imap.Search(
		Expression.Subject(&quot;email to archive&quot;));

	imap.DeleteMessageByUID(uids);

	imap.Close();
}
</pre>
<pre class="brush: vb;">
' VB.NET

Using imap As New Imap()
	imap.ConnectSSL(&quot;imap.gmail.com&quot;)
	imap.Login(&quot;user@gmail.com&quot;, &quot;password&quot;)

	' Find all emails we want to delete
	imap.SelectInbox()
	Dim uids As List(Of Long) = imap.Search(_
		Expression.Subject(&quot;email to archive&quot;))

	imap.DeleteMessageByUID(uids)

	imap.Close()
End Using
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.limilabs.com/blog/archive-email-in-gmail/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

