Quantcast
Channel: Advanced Intellect Blog
Viewing all 14 articles
Browse latest View live

aspNetPOP3 and aspNetEmail: Creating an email "Proxy" to process and resend email

$
0
0

Ian (on the forums) had a question about how to download email from a POP3 server, process it using his own custom rules, and then resending it.

The trick to resending it, is that he wanted to the original email to be resent and unmodified. This is a little different than the usual request. Usually, developers need to modify the original email in some fashion, rebuild it, and resend it.

In this example, Ian wanted to resend the email, as if it's never been sent. It needs to dynamically determine who to send it to, and forward it on. This makes his application work like an email proxy of sorts.

Below is a code example that would get Ian started on something like this.

As always, if anyone has any questions about this, feel free to use the Contact Us page, to send any questions.

Thanks,
Dave

Here is the code

void Execute()
{
	//connect to the pop3 server
	POP3 pop = new POP3();
	pop.Server = "mail.blah.com";
	pop.Username = "dave@blah.com";
	pop.Password = "test";

	//enable logging
	pop.LogPath = "c:\\pop.log";

	//login
	pop.Login();

	//get the first message as text
	string content = pop.GetMessageAsText(0);

	//process the message
	Process( content );
	
	ResendAsOriginal( content );

	//if we want to delete the message, uncomment the following lines
	//pop.Delete(0);
	//pop.CommitDeletes();

	//disconnect
	pop.Disconnect();
}

void Process( string emailContent )
{
	//create the MimeMessage
	MimeMessage m = MimeMessage.ParseString( emailContent );

	//do whatever we need to with the extracted data
	if( m.Subject  != null )
	{
		string subject = m.Subject.Value;
	}
}

void ResendAsOriginal( string emailContent )
{
	//create the EmailMessage object
	EmailMessage msg = new EmailMessage();

	//set the server
	msg.Server = "192.168.1.106";

	//set the TO and FROM values
	//these may need to be dynamic, and depend up on the
	//value of emailContent
	//for this example, they are hard coded

	msg.To = "CustomerService@blah.com";
	msg.FromAddress = "proxy@myserver.com";
	msg.SmtpData = emailContent;

	msg.Send();
}



iCalendar: Using HTML in the iCalendar Description Field

$
0
0

I recently had a request of how to use HTML formatted content in the description field of an iCalender.

Background: By default, the iCalendar specification only allows plain text to be used in the description of an iCal object. Starting with Outlook 2010, Outlook can now recognize HTML formatted content in an iCalendar. However, this is actually supported via an additional field in the iCalendar object called "X-ALT-DESC", rather than the existing field. This does 2 things:

a) Preserves background compatibility
b) Requires the developer to now set 2 description fields (the original plain text description, along with the Html description field).

Below is a code example that demonstrates creating HTML formatted content in an iCalender.

EmailMessage msg = new EmailMessage( "127.0.0.1" );
msg.From = "me@mycompany.com";
msg.To= "you@yourcompany.com";

//have a meeting tomorrow, from 10 - 11 am.
DateTime startAt= DateTime.Now.AddDays( 1 );
startAt = new DateTime( startAt.Year, startAt.Month, startAt.Day, 10, 0,0 );
DateTime endAt = startAt.AddHours( 1 );


iCalendar ical = new iCalendar(  "100 main", "Progress report meeting", "Weekly progress report update across departments.", startAt, endAt, iCalendarType.iCal );

ical.OptimizedFormat = OptimizedFormat.Exchange2003;

//Outlook uses a custom property to display HTML called the X-ALT-DESC property
string html = "<font color=#ff0000>This is some text that will be displayed in red, in newer versions of Outlook</font>";
CustomCalendarProperty htmlProp = new CustomCalendarProperty( "X-ALT-DESC", html );
htmlProp.AddParameter( "FMTTYPE", "text/html" );
ical.Event.Properties.Add( htmlProp );

//write out the iCal to a file (if we wanted to, we could also stream it to a browser
ical.WriteToFile( "c:\\temp\\", iCalendarType.iCal  );

//add it to the EmailMessage object, to be sent
msg.AddCalendar( ical );

//as a test, just save the entire Email content to a file
msg.SaveToFile( "c:\\temp\\" );

//send the email
msg.Send();

As always, if anyone has any questions, feel free to content me using the Contact Us page.

Thanks,
Dave Wanta

 

 

aspNetMime: Using it in a ASP (COM) Applicatioin

$
0
0

An evaluator, Chuck, had a request to use aspNetMime from a classic ASP (COM) application.

Normally, aspNetMime is used in .NET application (C#, VB.NET, etc.. winforms, windows services, and ASP.NET applications). However, occasionally a developer will need to use our assemblies (in this example, aspNetMime) from classic COM applications.

To do this, we must first download the aspNetMime.dll from the website (www.advancedintellect.com)

By default, when you run the aspNetMime.msi install file, it will be installed in the GAC (global assembly cache). However, if you want to manually do this (or if you moved the aspNetMime.dll to a new server), you can use the gacutil.exe (provided by VS.NET).

From a command prompt, call:

        gacutil.exe /I aspNetMime.dll

Once aspNetMime is installed in the GAC, it must be exposed for COM (ASP, VBScript, VB4+). To do this, you need to use the regasm.exe tool (also provided by VS.NET).

To do this, again from a command prompt, execute the following command:

        regasm.exe aspNetMime.dll

Regasm.exe will create a COM wrapper around the aspNetMime.dll, and install the required registry entries, so that aspNetMime can be called for COM.

Once that is done, aspNetMime can now be used in a classic ASP page.  Here is an example, that reads in an email file, and displays the subject and body on a page:

<% Option Explicit%>

<%
Dim mime
Dim lic
Dim subject
Dim plainText
Dim htmlText

'Load the license file
 Set lic = Server.CreateObject( "aspNetMime.MimeMessageLicense" )
 lic.LoadLicenseFile  "c:\aspNetMime.xml.lic"  'loads the license in memory
 
'create the MimeMessage object
 Set mime = Server.CreateObject( "aspNetMime.MimeMessage" )

'load the test email
mime.LoadFromFile( "c:\temp\aspTest.eml")

'read the subject
subject = mime.Subject.Value
Response.Write("<BR>Subject: " + subject)

'get the plain text body (if one exists)
if( not mime.TextMimePart is Nothing ) then
 plainText= mime.TextMimePart.DecodedText
 Response.Write("<HR>")
 Response.Write(plainText)
End if

'get the Html body (if one exists)
if( not mime.HtmlMimePart is Nothing ) then
 htmlText = mime.HtmlMimePart.DecodedText
 Response.Write("<HR>")
 Response.Write(htmlText)
End if
%>

As always, if anyone has any questions, feel free to contact me using the Contact Us page, and referene this article.

Thanks!
Dave Wanta

aspNetMime: Handling InLine Parts

$
0
0

Every few months, I get a question from a developer about aspNetMime not properly finding all the attachments in an email.

Almost all of the time, these attachments are actually In-Line parts. Rather than sending files as attachments, some mail clients will actually sent these 'attachments' as In-Line parts.

To reference these parts, use the MimeMessage.InLineParts collection. Another way to reference all attachments and in-line parts is too call the MimeMessageAttachmentInLineParts() method. This method will find every attachment + in-line part. Below is a code example to demonstrate this functionality.

 

string path = "c:\\temp\\sample.eml";
MimeMessage m = MimeMessage.ParseFile( path );

//get attachments and in-line parts
MimePartCollection mpc = m.AttachmentInLineParts();
Response.Write( "total parts: " + m.RetrieveAllParts().Count.ToString

//loop through the attachments+in-line parts, write out the name
foreach( MimePart mp in mpc)
{
	Response.Write( mp.AttachmentName() );
}

As always, if anyone has any questions, feel free to email me using the Contact Us page.

Thanks,
Dave Wanta

aspNetMX 3.0 Released

$
0
0

We are proud to announce the release of aspNetMX 3.0. This version has been a while in the making. It has a number of new notable features. Easily the biggest in the new MailBoxChecker class, that provides multithreaded functionality for mailbox checking.

Here is a listing of the new features.

New Multi-Threaded MailboxChecker Class
Probably the biggest feature added to aspNetMX is the MailboxChecker class. This is a multithread class, loaded with configurable options, to check millions of email addresses. The MailboxChecker class will check email addresses all the way to the mailbox level, in a mult-threaded environment, with built in throttling. If you need to validate 10,000 emails or 1,000,000 emails, this is the class for you.

New Licensing System
Starting with version 3.0, aspNetMX now uses a simple license key system. We've heard developers feedback, to get away from license files. Now, using a simple key, you can enable aspNetMX in your applications. When moving from server to server, you no longer have to worry about license files being left behind.

Extended the EmailValidator Web Validation Control
We've extended this validation control Additional new features allow you to check the last level of validation achieved, along with ignoring empty email addresses, and accessing the in-memory log.

Move Syntax Validation Options
In previous versions of aspNetMX, the email address syntax was simply checked by using complicated regular expressions. This allowed for edge case email address formats to be incorrectly discarded. New options allow you to select which set of rules you want to implement when syntactically validating email addresses.

Timed Validation Options
aspNetMX now includes the option for timed validation. This option allows the developer to attempt to validate the email address in a set number of milliseconds (configurable by the developer). No longer do you have to wait for unresponsive DNS or Mail servers before you get a result back.

Greylisting
aspNetMX now includes the option to check for greylisting validation. Mail servers that implement greylisting can be flagged, and then marked for later follow-up.

Proxy Server Functionality
aspNetMX now has support for proxy servers. Configure the MXProxy class for email validation from behing SOCKS proxies.

Better COM/ASP Support
aspNetMX now supports COM and classic ASP environments. Wrapper classes make it easier to call methods, that normally wouldn't be available to the COM world.

 

aspNetDns Update Released

$
0
0

We are proud to release a long time coming, aspNetDns update. This update features new, easier to use methods in the aspNetDns, aspNetPing, aspNetTraceRoute and aspNetWhois namespaces, making your job, as the developer, quicker, and easier.

New Easier Methods
The DnsQuery class has new easier-to-use methods for returning the most popular DNS records. Simply fetch records with a single line of code.  Simply call DnsQuery.XXRecords, where "XX" is the type of record you want to fetch. For example "A"or "MX" or "CName".

Added new PTR Record Lookkup Functionalty
aspNetDns now supports recursive Pointer record lookup capability.

Automatic Whois Server Lookup
aspNetWhois now contains the internal methods to dynamically lookup existing Whois server, in case the end user or developer does not know which existing Whois server to use.

Whois Recursive Query Lookups
aspNetWhois now contains the capability to recursively query Whois servers.

New Local Endpoint Exposed
The aspNetPing classes now allow you to specify what local endpoints to be used. This is especially useful in multi nic environments.

aspNetTraceRoute CName Additions
aspNetTraceRoute now has the capability to include CName results along with the IPs of returned trace routes.

New Logging
Even newer and better logging was added to the ICMP functionality of aspNetPing and aspNetTraceRoute.

Newer, Easier Licensing
aspNetDns now uses license keys. This allows for easier upgrades between minor versions. Simply download the latest aspNetDns.dll, and all minor version will work with your existing license key.

 

 

 

aspNetIMAP and Message Count in Gmail

$
0
0

Message count in Gmail using aspNetIMAP

I recently had a customer pulling their hair out over this issue, so I thought I post something about it.

Sometimes when using aspNetIMAP (or any other IMAP client for that matter), the message count returned for a folder will not match what you actually see as a count in Gmail's web interface. The discrepancy is due to the conversational view. Gmail has an option to view messages as conversations. If you turn that option off (found under General | Settings in Gmail), you will get the true message count of messages in that folder.

 

aspNetIMAP: Now supports the IDLE command.

$
0
0

aspNetIMAP Supports the IDLE Command

The IDLE command is a little different than the other IMAP commands. When the IDLE command is used, aspNetIMAP turns into a listening component. It listens for updates from the IMAP server. IMAP servers will usually send an Idle update response back, if messages are deleted, or new messages come in.  When a update is sent back, from the server to aspNetIMAP, the IdleResponse event is raised.  While aspNetIMAP is in Idle mode, no other commands can be sent against the server, until .IdleStop() is called.

The following steps are used to implement the Idle command (full code can be found below).

1)First we select a folder, in this example, the Inbox

            MailFolder inbox = imap.SelectInbox();

2)Then we wire up the event, that will get called every time an Idle update is sent to aspNetIMAP
            //wire up the idle event
            inbox.IdleResponse += new IdleResponseEventHandler(OnIdleResponse);

3) Start Idling
            inbox.Idle();

4)Now we wait. In this example, we are looping through a command promprt, until the user enters the word "stop". We could have just as easily implemented this in a windows form, in a button click event. And, subsequently, clicked another button to stop idling.
            string line = Console.ReadLine().ToLower();
            while (line != "stop")
            {

                line = Console.ReadLine().ToLower();
            }

5) Stop Idling
            inbox.IdleStop();


6)Get the last unseen message (usually the message that just came in, and caused the Idle event to be raised).
            //get the latest messges that just came in
            string unSeenSet = inbox.SearchClient.NotSeenSet();


The full example can be found below. In this example, we are creating a console.exe application. We could also convert this to windows form code just as easily.

[C#]

//in this example, use a console application, to wait for IDLE updates
private string gmailUsername = "test@gmail.com";
 private string gmailPassword = "secret";
 void IMAPGmail2IdleTest()
 {
     IMAP4 imap = OpenIMAPGmail();

     //get the inbox folder
     MailFolder inbox = imap.SelectInbox();

     //wire up the idle event
     inbox.IdleResponse += new IdleResponseEventHandler(OnIdleResponse);

     Console.WriteLine("starting to idle...");

     inbox.Idle();

     string line = Console.ReadLine().ToLower();
     while (line != "stop")
     {

         line = Console.ReadLine().ToLower();
     }

     Console.WriteLine("Stopping Idling...");
     inbox.IdleStop();

     //get the latest messges that just came in
     string unSeenSet = inbox.SearchClient.NotSeenSet();

     if ((unSeenSet != null) && (unSeenSet.Trim().Length > 0))
     {

         //convert to an array
         int[] unseenUnquieIds = inbox.MessageClient.ToUniqueIds(unSeenSet);

         int latestUniqueId = unseenUnquieIds[unseenUnquieIds.Length - 1];
         //download the latest uniqueId message
         MimeMessage message = inbox.FetchClient.Message(latestUniqueId, IndexType.UniqueId, true);

         if (message != null)
         {
             if (message.Subject != null)
             {
                 Console.WriteLine(message.Subject.Value);
             }
             else
             {
                 Console.WriteLine("No subject");
             }
         }

     }

     imap.Disconnect();
 }


 private IMAP4 OpenIMAPGmail()
 {
     IMAP4 imap = new IMAP4("imap.gmail.com");


     //create and load the ssl socket
     AdvancedIntellect.Ssl.SslSocket ssl = new AdvancedIntellect.Ssl.SslSocket();
     ssl.IgnoreInvalidCertificates = true;

     imap.LoadSslSocket(ssl);

     //logging on the ssl socket
     ssl.Logging = true;
     ssl.LogPath = "c:\\temp\\ssl.log";


     //rest of the IMAP properties
     imap.Port = 993;

     //any logging for troubleshooting
     imap.Logger = new IMAPLog();
     imap.Logger.Path = "c:\\temp\\imap.log";
     imap.Logger.Overwrite = true;

     imap.Connect();


     imap.Username = gmailUsername;
     imap.Password = gmailPassword;
     imap.Login();

     return imap;
 }
 void OnIdleResponse(object sender, IdleResponseEventArgs e)
 {
     //write out the response sent from the server
     string response = System.Text.Encoding.ASCII.GetString(e.Data, 0, e.DataCount);
     Console.WriteLine(response);
 }

[VB.NET]

'in this example, use a console application, to wait for IDLE updates

Private gmailUsername As String = "test@gmail.com"
Private gmailPassword As String = "secret"

Private Sub IMAPGmail2IdleTest()
	Dim imap As IMAP4 = OpenIMAPGmail()

	'get the inbox folder
	Dim inbox As MailFolder = imap.SelectInbox()

	'wire up the idle event
	AddHandler inbox.IdleResponse, AddressOf Me.OnIdleResponse

	Console.WriteLine("starting to idle...")

	inbox.Idle()

	Dim line As String = Console.ReadLine().ToLower()
	While line <> "stop"

		line = Console.ReadLine().ToLower()
	End While

	Console.WriteLine("Stopping Idling...")
	inbox.IdleStop()

	'get the latest messges that just came in
	Dim unSeenSet As String = inbox.SearchClient.NotSeenSet()

	If (unSeenSet IsNot Nothing) AndAlso (unSeenSet.Trim().Length > 0) Then

		'convert to an array
		Dim unseenUnquieIds As Integer() = inbox.MessageClient.ToUniqueIds(unSeenSet)

		Dim latestUniqueId As Integer = unseenUnquieIds(unseenUnquieIds.Length - 1)
		'download the latest uniqueId message
		Dim message As MimeMessage = inbox.FetchClient.Message(latestUniqueId, IndexType.UniqueId, True)

		If message IsNot Nothing Then
			If message.Subject IsNot Nothing Then
				Console.WriteLine(message.Subject.Value)
			Else
				Console.WriteLine("No subject")
			End If

		End If
	End If

	imap.Disconnect()
End Sub

Private Function OpenIMAPGmail() As IMAP4
	Dim imap As New IMAP4("imap.gmail.com")


	'create and load the ssl socket
	Dim ssl As New AdvancedIntellect.Ssl.SslSocket()
	ssl.IgnoreInvalidCertificates = True

	imap.LoadSslSocket(ssl)

	'logging on the ssl socket
	ssl.Logging = True
	ssl.LogPath = "c:\temp\ssl.log"


	'rest of the IMAP properties
	imap.Port = 993

	'any logging for troubleshooting
	imap.Logger = New IMAPLog()
	imap.Logger.Path = "c:\temp\imap.log"
	imap.Logger.Overwrite = True

	imap.Connect()


	imap.Username = gmailUsername
	imap.Password = gmailPassword
	imap.Login()

	Return imap
End Function

Private Sub OnIdleResponse(sender As Object, e As IdleResponseEventArgs)
	'write out the response sent from the server
	Dim response As String = System.Text.Encoding.ASCII.GetString(e.Data, 0, e.DataCount)
	Console.WriteLine(response)
End Sub

As always, if anyone has any questions, feel free to contact me using the Contact Us page found at this link.
Thanks!
Dave Wanta


ListNanny 3.0 Released

$
0
0

 

We are proud to announce the release of ListNanny 3.0. This version has been a while in the making. It has a number of new notable features. Some that are exposed to developers, and some not. By far the biggest upgrade, is the internal pattern matching system.
Here is a listing of the new features.

New Internal Pattern Matching System
The internal system has now been extended to included decision branching trees.  As NDRs are pattern matched, they can take different internal tree branches, to better match NDR bounce patterns.

New Licensing System
Starting with version 3.0, ListNanny now uses a simple license key system. We've heard developers feedback, to get away from license files. Now, using a simple key, you can enable ListNanny in your applications. When moving from server to server, you no longer have to worry about license files being left behind.

Remap NDR Classifications
If you don’t agree with ListNanny’s classification system, you can now tell it to reclassify bounces to a different category.  For example, perhaps you think a SoftBounce should really be a HardBounce. Now you can reclassify the entire decision tree for that single bounce’s pattern matching branch, and just remap it to a different bounce category.

ARF Report Functionality
Now ListNanny will recognize ARF (Abuse Reporting Format). It allows developers to natively get at the ARF embedded data, in an object orientated manner.

New AOL Bounce Formats
ListNanny can now handle the new AOL bounce formats.

New NDR Web Notifications
Now, you can automatically callback to web applications, each time a bounce is processed.

XMail Support
ListNanny will natively support XMail bounce formats, for fast native processing, without needing to use the POP3 or IMAP protocol.

SmarterMail Support
ListNanny natively supports the SmarterMail grp file format. Automatically, and natively parse SmarterMail grp files for bounces, without needing to use the POP3 or IMAP protocol.

QMail Support
ListNanny nateively supports Qmail message formats. Automatically, and natively parse QMail files, without needing to use the POP3 or IMAP protocol.

Better COM/ASP Support
ListNanny supports COM and classic ASP environments. Wrapper classes make it easier to call methods, that normally wouldn't be available to the COM world.

Many New Methods and Properties
Besides these major code improvments, ListNanny has been expanded to better meet customer needs. Many new additional classes, methods and properties has been added to allow better access to NDR object for developer to quickly, and more efficiently get at data.

Download the latest eddition of <a href="http://www.advancedintellect.com/download.aspx">ListNanny here</a>.

Note:If you purchased a license of ListNanny between April 26, 2012 and Oct 26, 2012 you are eligable for a free upgrade. Simply forward your order number to support@advancedintellect.com requesting a free upgrade. Be sure to reference this post in your email.

aspNetMHT v2 Released

$
0
0

What’s new in aspNetMHT v2

aspNetMHT v2 has been in development for almost 2 years. During that time frame we've had multiple customer requests. Many of these new features are directly related to those requests. If you ever see a MHT need, that aspNetMHT does not fulfill, we would love to hear about it. Be sure to send all feature suggestions to support@advancedintellect.com

New Events
aspNetMHT exposes some new events for more granular control. The most useful will probably be the BeforeParseMHTPart event. This event is raised before the MHTPart is parsed, allowing the developer to control different aspects of the part.

New, easier to use Methods
Some new static methods have been exposed, allowing you to create MHT documents in a single line of code.

Attachment Support
aspNetMHT now supports the capability to add attachments to the MHT document. This is especially useful in those instances where you need to add PDFs to your MHT documents.

New Extractor Support
aspNetMHT now provides the capability to extract a MHT document into it’s individual parts. This allows you to take an existing MHT document, and convert it back into all it’s individual pieces, and still have all the links work correctly.

Better CSS Support
There have been numerous enhancements in this area. Some where minor, but some were quite major. They include, better support for the data: format. Better handling of style tags. Better processing of @import statements. Especially nested @import statements.

More Utility Methods
More utility methods have been added to the MHTPart object. These methods allow you to check for specific types, for example: .IsJavascript(), or .IsImage(), where these methods will tell you if the object is a javascript part or an image part. Additional methods are also exposed for easily determining content types.

Compression Support
aspNetMHT now has the capability to decode GZip compressed data coming over Http.

Better Local Filesystem Support
aspNetMHT can better parse local Html sources. Especially better support for UNC (\\server name\\share name) referenced content such as images.

Better Image Detection Support
aspNetMHT now has better image detection support, to better recognize images that may be mis-labeled by the server.

Better Encoding Support
aspNetMHT provides the developer with more Html encoding options, for more granular control.

Why are the CHM (Help) files Blank?

$
0
0

If you open the help file, and you see something like "Navigation to the webpage was canceled", or it’s just plain blank (see below).

 


This is due to Microsoft changing the security behavior on .chm files.


To fix this, right-click on the .chm file, select Properties, and then click "Unblock".


That's it.

aspNetIMAP v3 Released

$
0
0

There have been quite a few upgrades for aspNetIMAP since version 2.0 Some of these include:

.NET Support
aspNetIMAP runs under all releases of .NET.

IDLE Support
aspNetIMAP now supports the IDLE command. This allows you to wait for the IMAP server to notify you when messages have been received, rather than actively polling for new messages.

Added OAuth Support
aspNetIMAP now supports the OAuth authentication protocol, for better flexibility and delegated authorization.

Added OAuth Support for Gmail
We’ve also added Gmail specific classes that support the OAuth protocol. Authenticate against Gmail with only a few lines of code.

Better BodyStructure Parsing
Expanded the BodyStructure parsing routine to account for rare literal line length structures.

Appending Messages
Modified the Append() method to be more friendly towards Microsoft Exchange and it's CrLf requirements.

ID Commands
Added support for the ID command.

NTLM Support
Added NTLM Challenge authentication support for Microsoft Exchange servers.

Cram-MD5
Support for the Cram-MD5 authentication protocol, for better flexibility and security.

AppendUID Functionality
Added the AppendUID functionality for those servers that support RFC 2359.

Better Tag Support
Exposed the TagLength property to allow the developer to specify the length of Tags to be used in communicating with the IMAP server.

Better Non-RFC Support
Expanded the internal flexibility of aspNetIMAP to handle non-RFC internal date responses.

Better Searching
Expanded the search capabilities of aspNetIMAP to better search against those IMAP servers that support RFC searching.

Local End Point Capability
Exposed support for the developer to specify the local endpoint of network calls.

Serialization
Expanded serialization support to the MessageSet and Proxy classes.

MimeEnvelope Handling
Created an exposed a MimeEnvelope class for those developers wanting to create a summary of Mime messages, commonly used in web applications.

Read more about the complete feature list on the aspNetIMAP Product Page.

Breaking Changes

When upgrading to v3 of aspNetIMAP, the only breaking changes will be relating to how licensing is enabled.
With v3, we did away with digitally signed license files, and went to license keys. This will make it easier on customers when moving their applications.
The following methods went away:
LoadLicenseFile(…)
LoadLicenseString(…)
LoadLicenseStream(…)
LoadLicenseResource(…)
These methods were replaced by the single
LoadLicenseKey(…)
method, that simply loads the license key.  For more information on how licensing works, visit our License Page.

aspNetPOP3 v3 Released

$
0
0

The upgrades for aspNetPOP3 have been limited, but yet important. Constantly serving customer needs, these upgrades are driven by our customers to do more with less code.

Some of the features of this version of aspNetPOP3 include:

.NET Support
aspNetPOP3 runs under all releases of .NET.

Switched to License Keys from License files
aspNetPOP3 has moved to license keys for easier deployment. We did away with the older, digitally signed files, to make it easier on the developers when moving their applications.

NTLM Support
aspNetPOP3 supports connecting to Exchange over NTML authentication protocol.

More Login Methods
Exposed the Login method for additional options for developers to authenticate against a wider range of servers.

64Bit Servers
Increased the flexibility for aspNetPOP3 to run under different variations of servers.

AutoLoadFromConfigKey Property
Automatically set properties from your .config file, without changing a line of compiled code. aspNetPOP3 can automatically recognize these values.

Better UTF-8 Support
Due to some of the internal behavior of .NET, and UTF-8 characters, it was possible for the .NET framework to drop some of the higher end, surrogate characters. aspNetPOP3 will gracefully handle those characters.

Streaming
Added additional options for streaming messages out of POP3 servers to different stream objects.

SSL Support
With the release of the AdvancedIntellect.Ssl.dll, aspNetPOP3 now support secure SSL connections. With as little as 2 additional lines of code you can enable your application to securely communicate with your mail server. The AdvancedIntellect.Ssl.dll can be downloaded from http://www.advancedintellect.com/download.aspx at no charge.

Be sure to see the complete list of features on our aspNetPOP3 Product Page.

Breaking Changes

When upgrading to v3 of aspNetPOP3, the only breaking changes will be relating to how licensing is enabled.

With v3, we did away with digitally signed license files, and went to license keys. This will make it easier on customers when moving their applications.

The following methods went away:
LoadLicenseFile(…)
LoadLicenseString(…)
LoadLicenseStream(…)
LoadLicenseResource(…)

These methods were replaced by the single
LoadLicenseKey(…)
method, that simply loads the license key.  For more information on how licensing works, visit our License Page.

aspNetMime v3 Released

$
0
0

There have been quite a few upgades to aspNetMime since our v2 release. Just a few of these upgrades are listed below.

NET Support
aspNetMime runs under all releases of .NET.

S/Mime Parsing Support 
aspNetMime also supports parsing S/Mime documents to allow you to securely extract data from S/Mime formatted content.

MimeToHtml Class 
The new MimeToHtml class allows you to easily convert a Mime message to a Html document or string for display in a browser. Allow aspNetMime to handle converting embedded images, to extracted images, and handle all the attachment and image link conversions, to preserve the format of the message.

aspNetMime is Writable 
aspNetMime is writable. This allows you to read in an existing Mime document, or create your own, and modify it as required. You can then output it back to the file system, a stream, string, or a byte array.

Added the MimeReader Class
The MimeReader class, allows you to read the Mime messages in a forward looking manner. This allows for faster parsing, and lower memory footprint. It is especially helpful, when you need to extract large attachments from a message, without incurring extra CPU cycles.

Added Static MimePart.Create(…) methods
These methods allow you to easily create, and add Mime parts to a Mime message from byte arrays, files, streams or strings.

HeaderCollection.Parse(…) methods 
Easily parse the header content and lines from documents using the HeaderCollection.Parse(…) methods, making all data in the headers easily accessible.

Easier support for modifying existing MIME documents
Besides being able to easily add additional parts, attachments, and images to a Mime message, you can easily append both plain text, and Html content to Mime parts, and allow aspNetMime to handle all of the complicated encoding.

Easier Searching for parts. 
New methods allow you easily and quickly find more parts of the message. These methods include FindByExtension, GetByConentId,GetByContentLocation, or by ContentType.

RFC 2231 Support
Expanded support for non-ASCII charactersets found in parameters.

MBX Support
Expanded the internal MBX support by aspNetMime to parse MBX files.

InLine Parts
Added and exposed additional methods for extracting InLine content-disposition types.

Force Garbage Collection
Exposed the functionality for developers to force Garbage Collection on the MimeReader class.

GMT Offset
Added the ability to allow the developer to calculated GMT Offsets.

TNEF (winmail.data) RTF Support
Added the capability for aspNetMime to find and extract RTF data created by Outlook.

Header Support
Expanded the support for determining different properties on collections of headers.

Saving Parts
Expanded the support for saving individual parts off of the MimeReader class.

Expanded Charactersets
Expanded the capability of aspNetMime to recognize Windows specific charactersets that are non-RFC standard.

TNEF Support
Added support for aspNetMime to find and extract TNEF (winmail.dat) parts. aspNetMime can also find attachments found within these parts.

Be sure to see a more complete list of the aspNetMime features over at the aspNetMime Product Page.

Breaking Changes

When upgrading to v3 of aspNetMime, there are a few small, but important, breaking changes.

Licensing
With v3, we did away with digitally signed license files, and went to license keys. This will make it easier on customers when moving their applications.
The following methods went away:
LoadLicenseFile(…)
LoadLicenseString(…)
LoadLicenseStream(…)
LoadLicenseResource(…)
These methods were replaced by the single
LoadLicenseKey(…)
method, that simply loads the license key.  For more information on how licensing works, visit our License Page.

Parsing MBX Files
Originally, when parsing MBX files, aspNetMime would create a calculated filename, and set it on the MimeMessage object. This behavior went away. Due to edge cases, the filename is no longer set, as it had the possibility of changing the underlying message characteristics in edge cases.

.RawText Property
The RawText property is now null on the multi-part part. To get the RawText value, iterate over the multi-part children and combine their RawText values. This was done to decrease the memory footprint of large emails.

Address.EmailAddress Value
The EmailAddress value no longer returns the “<” and the “>” before and after the actual EmailAddress value.

Viewing all 14 articles
Browse latest View live