<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>SocketLabs Email Delivery Blog</title>
	
	<link>http://www.socketlabs.com/blog</link>
	<description>Everything about Email Deliverability, Hurricane Server, SMTP Express, MTAs, etc...  Sponsored by SocketLabs, Inc.</description>
	<lastBuildDate>Fri, 02 Oct 2009 17:49:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/socketlabs" type="application/rss+xml" /><feedburner:emailServiceId>socketlabs</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>New Deliverability Boosting Suppression List Feature Now In Beta</title>
		<link>http://feedproxy.google.com/~r/socketlabs/~3/cmu_b0nYBL8/</link>
		<comments>http://www.socketlabs.com/blog/2009/10/new-deliverability-boosting-suppression-list-feature-now-in-beta/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 17:46:10 +0000</pubDate>
		<dc:creator>John Alessi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=462</guid>
		<description><![CDATA[

I am very excited to announce that our new suppression list feature is currently in beta.  This new feature goes way beyond what is normally thought of when we think of suppression lists.  Typically, suppression lists are used to prevent future mailings to addresses that have unsubscribed.  Our suppression lists can do [...]]]></description>
			<content:encoded><![CDATA[<div style="padding-top:25px; padding-bottom:10px;"><object width="480" height="295"><param name="movie" value="http://www.youtube.com/v/YDW1Z3h_AQM&#038;hl=en&#038;fs=1&#038;rel=0&#038;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/YDW1Z3h_AQM&#038;hl=en&#038;fs=1&#038;rel=0&#038;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object>
</div>
<p>I am very excited to announce that our new suppression list feature is currently in beta.  This new feature goes way beyond what is normally thought of when we think of suppression lists.  Typically, suppression lists are used to prevent future mailings to addresses that have unsubscribed.  Our suppression lists can do that, but also much, much more.  Please read on&#8230;</p>
<p><strong>This feature will skyrocket your deliverability, and cut loads of administrative work out of the process.</strong>  </p>
<h3>It Will Dramatically Increase Deliverability</h3>
<p>How will it increase deliverability?  Because, in addition to giving you the ability to specify and block addresses which have unsubscribed, this new functionality will:</p>
<ul>
<li>Automatically block email to addresses which have previously hard bounced</li>
<li>Automatically block email to any recipient which has previously complained about one of your mailings</li>
</ul>
<p>Two things which will kill your deliverability are 1) repeatedly sending to invalid addresses and 2) sending to people who have complained about your email.  Imagine how deliverability will soar when Hurricane MTA Server takes charge and ensures that neither of these things will ever happen again!</p>
<p>This is really monumental release for us because it is the cumulation of so many things we have worked towards over the  years.  We have had cutting edge bounce handling in Hurricane MTA Server for years.  (btw, it is going to get even better soon, but you did not hear that from me)  Earlier this year we rolled out automatic feedback loop report processing.  Now the new suppression list feature harnesses the power of the bounce processing and feedback loop handling to protect your reputation and catapult your deliverability to new heights.</p>
<p><strong>By maintaing lists of all hard bounce addresses, and addresses associated with feedback loop complaints, Hurricane MTA Server can automatically suppress redelivery to those same addresses.</strong></p>
<h3>It Will Reduce Development and Administration</h3>
<p>How will it reduce development and administration?  Because&#8230;</p>
<p><u>It will no longer be necessary for you to do your own list hygiene &#8211; Hurricane MTA Server will do it for you &#8211; automatically, and accurately.</u></p>
<p>That is right.  This is fully automatic suppression lists on steroids!</p>
<p>Suppression lists can be set at the account level, globally, shared between accounts, etc&#8230;  It is all very flexible and very automatic.  Suppression lists are stored as standard CSV files, so it is easy to interface them with your existing data.  Our suppression lists support both plain text and MD5 encoded addresses for extra security.  </p>
<p>This new feature is currently available in our latest beta build.</p>
<p>If you are a SocketLabs customer, and would like to participate in our beta program, please log into your support console and create a ticket, requesting beta access.  </p>
<p>If you are not a SocketLabs customer, but would like to be, please <a href="https://www.socketlabs.com/home/contact?slLinkSrc=blog">contact us</a> to discuss it.</p>
<p>Be sure to check out the video above for a walkthrough.</p>
<img src="http://feeds.feedburner.com/~r/socketlabs/~4/cmu_b0nYBL8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.socketlabs.com/blog/2009/10/new-deliverability-boosting-suppression-list-feature-now-in-beta/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.socketlabs.com/blog/2009/10/new-deliverability-boosting-suppression-list-feature-now-in-beta/</feedburner:origLink></item>
		<item>
		<title>Bounce Codes for Major ISPs</title>
		<link>http://feedproxy.google.com/~r/socketlabs/~3/O-i9ojYBT2A/</link>
		<comments>http://www.socketlabs.com/blog/2009/08/bounce-codes-for-major-isps/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 18:47:02 +0000</pubDate>
		<dc:creator>John Alessi</dc:creator>
				<category><![CDATA[Deliverability]]></category>
		<category><![CDATA[bounce]]></category>
		<category><![CDATA[eec]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=456</guid>
		<description><![CDATA[There are so many bounce codes used by the various ISPs and receivers that it&#8217;s hard to keep them all straight. 
Now there is a great resource for most of the known bounce codes to help simplify your tracking and processing.  The eec&#8217;s Deliverability Roundtable has put together a repository of common and available [...]]]></description>
			<content:encoded><![CDATA[<p>There are so many bounce codes used by the various ISPs and receivers that it&#8217;s hard to keep them all straight. </p>
<p>Now there is a great resource for most of the known bounce codes to help simplify your tracking and processing.  The <a href="http://emailexperience.org/" target="_blank">eec&#8217;s</a> Deliverability Roundtable has put together a repository of common and available bounce strings senders might see from current ISPs (email receivers). </p>
<p>The forum is setup on Get Satisfaction as a dynamic and interactive site that allows users to request information and update bounce strings as they change. The ISP serving the bounce, the bounce string text and next steps for a sender are written out by bounce code here. </p>
<p><a href="http://www.getsatisfaction.com/deliverability/tags/bounce_codes" target="_blank">http://www.getsatisfaction.com/deliverability/tags/bounce_codes</a> </p>
<img src="http://feeds.feedburner.com/~r/socketlabs/~4/O-i9ojYBT2A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.socketlabs.com/blog/2009/08/bounce-codes-for-major-isps/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.socketlabs.com/blog/2009/08/bounce-codes-for-major-isps/</feedburner:origLink></item>
		<item>
		<title>Over 17% of Email is Sucked into the Black Hole</title>
		<link>http://feedproxy.google.com/~r/socketlabs/~3/TtaZ3XoyebQ/</link>
		<comments>http://www.socketlabs.com/blog/2009/07/over-17-of-email-is-sucked-into-the-black-hole/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 22:27:43 +0000</pubDate>
		<dc:creator>John Alessi</dc:creator>
				<category><![CDATA[Deliverability]]></category>
		<category><![CDATA[returnpath]]></category>
		<category><![CDATA[stats]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=447</guid>
		<description><![CDATA[According to a  Return Path&#8217;s latest Deliverability Benchmark Report, of the 21% of email that is not delivered to the inbox, only 3.3% is sent to a &#8220;junk mail&#8221; folder and 17.4% is not delivered at all &#8211; it just vanishes!
Return Path did not state where they believe the email to be, but we [...]]]></description>
			<content:encoded><![CDATA[<p>According to a  Return Path&#8217;s latest Deliverability Benchmark Report, of the 21% of email that is not delivered to the inbox, only 3.3% is sent to a &#8220;junk mail&#8221; folder and 17.4% is not delivered at all &#8211; it just vanishes!</p>
<p>Return Path did not state where they believe the email to be, but we suspect that it is floating in deep space, possibly captured in the crystal prison of the three Krypton prisoners from Superman.  </p>
<p>Some other notable points from the study:</p>
<ul>
<li>It is easier to deliver to US ISPs than Canadian ISPs.  Inbox placements of mail sent to US ISPs was 82% in contrast to 75% sent to Canadian ISPs.</li>
<li>B2B delivery rates are less than that of B2C email 72% vs 79%.  This is in strong opposition to what has normally believed to be the case.  Accounting for this is the fact that businesses are being protected by ever advancing systems like Postini, Synamtec and MessageLabs.</li>
<li>In the US, Gmail is the hardest ISP to penetrate and Cox is the easiest.</li>
<li>In Canada, Primus.ca was the hardest ISP to penetrate and Telus was the easiest.</li>
</ul>
<p>I encourage you to download the full study, which is brief but very informative, and includes colorful charts and graphs:</p>
<p><a href="http://www.returnpath.net/landing/deliverabilitybenchmark/">Return Path Deliverability Benchmark Report</a></p>
<img src="http://feeds.feedburner.com/~r/socketlabs/~4/TtaZ3XoyebQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.socketlabs.com/blog/2009/07/over-17-of-email-is-sucked-into-the-black-hole/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.socketlabs.com/blog/2009/07/over-17-of-email-is-sucked-into-the-black-hole/</feedburner:origLink></item>
		<item>
		<title>Bounce and Feedback Loop Test Addresses</title>
		<link>http://feedproxy.google.com/~r/socketlabs/~3/Lia-AK_x6bM/</link>
		<comments>http://www.socketlabs.com/blog/2009/07/bounce-and-feedback-loop-test-addresses/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 21:28:34 +0000</pubDate>
		<dc:creator>John Alessi</dc:creator>
				<category><![CDATA[Deliverability]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Hurricane MTA Server]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[bounce]]></category>
		<category><![CDATA[fbl]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=443</guid>
		<description><![CDATA[We built an auto-responder that can be used to test your bounce and feedback loop processing systems.  Feel free to use it for your testing purposes.
fbl-test@service.socketlabs.com
Auto responds to From address with a feedback loop report in ARF format.
bounce-test@service.socketlabs.com
Auto responds to the Return-Path with a bounce message.
As a side note, the autoresponder was built using [...]]]></description>
			<content:encoded><![CDATA[<p>We built an auto-responder that can be used to test your bounce and feedback loop processing systems.  Feel free to use it for your testing purposes.</p>
<p>fbl-test@service.socketlabs.com<br />
Auto responds to From address with a feedback loop report in ARF format.</p>
<p>bounce-test@service.socketlabs.com<br />
Auto responds to the Return-Path with a bounce message.</p>
<p>As a side note, the autoresponder was built using the .Net API in Hurricane MTA Server.</p>
<img src="http://feeds.feedburner.com/~r/socketlabs/~4/Lia-AK_x6bM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.socketlabs.com/blog/2009/07/bounce-and-feedback-loop-test-addresses/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.socketlabs.com/blog/2009/07/bounce-and-feedback-loop-test-addresses/</feedburner:origLink></item>
		<item>
		<title>New Smart Delivery Rule Update</title>
		<link>http://feedproxy.google.com/~r/socketlabs/~3/j8F1mX8rxyc/</link>
		<comments>http://www.socketlabs.com/blog/2009/07/new-smart-delivery-rule-update/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 22:09:38 +0000</pubDate>
		<dc:creator>John Alessi</dc:creator>
				<category><![CDATA[Deliverability]]></category>
		<category><![CDATA[Hurricane MTA Server]]></category>
		<category><![CDATA[dynamicblockrules]]></category>
		<category><![CDATA[smartdeliveryrules]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=432</guid>
		<description><![CDATA[We just released a new production release of Hurricane MTA Server and there are two things you should know about it:
First, now our new Dynamic Block Rules are a part of the Smart Delivery Rules.  Now, protecting your reputation is automatic.  You can read more about Dynamic Block Rules here.
Second, Smart Delivery Rules [...]]]></description>
			<content:encoded><![CDATA[<p>We just released a new production release of Hurricane MTA Server and there are two things you should know about it:</p>
<p><strong>First</strong>, now our new Dynamic Block Rules are a part of the Smart Delivery Rules.  Now, protecting your reputation is automatic.  You can read more about Dynamic Block Rules <a href="http://www.socketlabs.com/blog/2009/07/protect-your-email-reputation-with-new-dynamic-block-rules/">here</a>.</p>
<p><strong>Second</strong>, Smart Delivery Rules can now be updated easily from within the Hurricane MTA Server interface without having to update the entire application.  </p>
<p><a href="http://www.socketlabs.com/blog/wp-content/uploads/2009/07/hms-smart-rule-updater.jpg" rel="lightbox"><img src="http://www.socketlabs.com/blog/wp-content/uploads/2009/07/hms-smart-rule-updater-475x389.jpg" alt="hms-smart-rule-updater" title="hms-smart-rule-updater" width="475" height="389" class="aligncenter size-large wp-image-438" /></a></p>
<p>The Administrative configuration page has a new option to download and apply the latest set of Smart Delivery Rules directly from our database.</p>
<p>With these two enhancements it is now easier than ever to leave things up to us and still be assured of the highest deliverability possible.  Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/socketlabs/~4/j8F1mX8rxyc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.socketlabs.com/blog/2009/07/new-smart-delivery-rule-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.socketlabs.com/blog/2009/07/new-smart-delivery-rule-update/</feedburner:origLink></item>
		<item>
		<title>Protect your Email Reputation with New Dynamic Block Rules</title>
		<link>http://feedproxy.google.com/~r/socketlabs/~3/DtphKKFL9C0/</link>
		<comments>http://www.socketlabs.com/blog/2009/07/protect-your-email-reputation-with-new-dynamic-block-rules/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 15:03:59 +0000</pubDate>
		<dc:creator>John Alessi</dc:creator>
				<category><![CDATA[Deliverability]]></category>
		<category><![CDATA[Hurricane MTA Server]]></category>
		<category><![CDATA[blacklist]]></category>
		<category><![CDATA[block]]></category>
		<category><![CDATA[rbl]]></category>
		<category><![CDATA[reputation]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=386</guid>
		<description><![CDATA[Protecting your email reputation is getting harder and harder, yet it is critical to successfully delivering marketing or transactional email.  A large part of protecting your reputation includes honoring the requests of a seemingly infinite number of ISPs.  So what is an emailer to do?

The new Dynamic Block Rules in Hurricane MTA Server [...]]]></description>
			<content:encoded><![CDATA[<p>Protecting your email reputation is getting harder and harder, yet it is critical to successfully delivering marketing or transactional email.  A large part of protecting your reputation includes honoring the requests of a seemingly infinite number of ISPs.  So what is an emailer to do?</p>
<div class="callout">
The new Dynamic Block Rules in Hurricane MTA Server provide an easy and automatic solution to protecting your reputation by automatically, temporarily suppressing delivery at the request of an ISP.
</div>
<p>Dynamic Block Rules are a new part of Hurricane MTA Server&#8217;s Delivery Rule system.  Hurricane MTA Server&#8217;s Delivery Rules enable traffic shaping to specific ISPs. The new Dynamic Block Rules are a subset of a Delivery Rule.  The Dynamic Block Rule system scans ISP responses for known codes and text which indicate that the ISP wants you to pause sending them email.  The Dynamic Block System then automatically pauses delivery to that ISP for the time period setup in the block rule.  </p>
<p><a href="http://www.socketlabs.com/blog/wp-content/uploads/2009/07/dbr.png" rel="lightbox"><img src="http://www.socketlabs.com/blog/wp-content/uploads/2009/07/dbr-391x475.png" alt="dbr" title="dbr" width="391" height="475" class="aligncenter size-large wp-image-407" /></a></p>
<p>Multiple Dynamic Block Rules may be specified for each Delivery Rule and they are evaluated in the order of their priority, top-down, until a match is made, in which event that rule is activated.  Only one rule can ever be active at one time.  Each time a Dynamic Block Rule is activated, a Delivery Alert will be posted to the Hurricane MTA Server alert system.  There is also a Dynamic Block Rule option to &#8220;Only Alert&#8221; without pausing delivery.<br />
Each rule consists of the following pieces of information:</p>
<table class="post">
<tr class="post">
<th>Setting</th>
<th>Description</th>
</tr>
<tr class="post">
<td>Enabled</td>
<td>Specifies whether the rule is enabled.  If a rule is not enabled it will be ignored by Hurricane MTA Server.</td>
</tr>
<tr class="post">
<td>Priority</td>
<td>Specifies the ordinal position of the rule in the list.  Rules are evaluated from top to bottom until a match is made.  1 is the highest priority.</td>
</tr>
<tr class="post">
<td>Match</td>
<td>A regular expression that will be matched against responses from the ISP being handled by the Delivery Rule.  If a match is made, the rule will be activated.</td>
</tr>
<tr class="post">
<td>Action</td>
<td>Possible values:<br />Alert Only &#8211; Generate an alert, but do not alter delivery<br />Defer &#8211; Defer all mail to this ISP for the specified Duration<br />Fail &#8211; Fail all mail to this ISP for the specified Duration</td>
</tr>
<tr class="post">
<td>Duration</td>
<td>Number of minutes this rule should remain in force once activated.  This value is ignored if Action is set to &#8220;Alert Only&#8221;.</td>
</tr>
</table>
<p>So what are some of the reasons why an ISP would want you to stop delivering mail?  This could be the result of sending too much mail per hour, receiving too many complaints about your email, trying to deliver to bad email addresses or various other reasons.  The important thing is that the ISP wants you to pause sending and failure to do so can damage your reputation.</p>
<p>The Dynamic Block Rule system is a part of the latest release of Hurricane MTA Server. There is also a new Dynamic Block Rule log file that can be enabled via the log settings for each account.  A future post will outline that log file and show you how it can be used to analyze the effectiveness of your Dynamic Block Rules and and fine tune them to obtain the highest deliverability possible.</p>
<p>Within the next month we will incorporate block rules into Hurricane MTA Server&#8217;s Smart Delivery Rule list.  Smart Delivery Rules are a set of Delivery Rules defined and periodically updated by SocketLabs to properly shape traffic to the large ISPs.</p>
<p>Until then, you can try your hand at creating your own Dynamic Block Rules to get a feel for how the system works.</p>
<img src="http://feeds.feedburner.com/~r/socketlabs/~4/DtphKKFL9C0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.socketlabs.com/blog/2009/07/protect-your-email-reputation-with-new-dynamic-block-rules/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.socketlabs.com/blog/2009/07/protect-your-email-reputation-with-new-dynamic-block-rules/</feedburner:origLink></item>
		<item>
		<title>Webinar to Highlight New Features of Hurricane MTA Server</title>
		<link>http://feedproxy.google.com/~r/socketlabs/~3/BUOd6U7G5vM/</link>
		<comments>http://www.socketlabs.com/blog/2009/07/webinar-to-highlight-new-features-of-hurricane-mta-server/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 20:05:27 +0000</pubDate>
		<dc:creator>John Alessi</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Hurricane MTA Server]]></category>
		<category><![CDATA[webinar]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=247</guid>
		<description><![CDATA[Please join us for a free webinar which will highlight the new features of Hurricane MTA Server released in June and how they can be used to protect your reputation and increase your email deliverability.  The webinar will be offered at two dates/times:
Tuesday July 14th 4PM EDT (click here to register)
Tuesday July 21st 9AM [...]]]></description>
			<content:encoded><![CDATA[<p>Please join us for a free webinar which will highlight the new features of Hurricane MTA Server released in June and how they can be used to protect your reputation and increase your email deliverability.  The webinar will be offered at two dates/times:</p>
<p>Tuesday July 14th 4PM EDT (<a href="https://www2.gotomeeting.com/register/954400154">click here to register</a>)<br />
Tuesday July 21st 9AM EDT (<a href="https://www2.gotomeeting.com/register/483734658">click here to register</a>)<br />
Wednesday July 29th 2PM EDT <a href="https://www2.gotomeeting.com/register/677775075">click here to register</a>)</p>
<p><strong>Space is limited, so please reserve your seat now.</strong></p>
<img src="http://feeds.feedburner.com/~r/socketlabs/~4/BUOd6U7G5vM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.socketlabs.com/blog/2009/07/webinar-to-highlight-new-features-of-hurricane-mta-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.socketlabs.com/blog/2009/07/webinar-to-highlight-new-features-of-hurricane-mta-server/</feedburner:origLink></item>
		<item>
		<title>Feedback Loop Processing and Reporting in Hurricane MTA Server</title>
		<link>http://feedproxy.google.com/~r/socketlabs/~3/hQS08ZsVtUs/</link>
		<comments>http://www.socketlabs.com/blog/2009/07/feedback-loop-processing-and-reporting-in-hurricane-mta-server/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 19:41:45 +0000</pubDate>
		<dc:creator>John Alessi</dc:creator>
				<category><![CDATA[Deliverability]]></category>
		<category><![CDATA[Hurricane MTA Server]]></category>
		<category><![CDATA[fbl]]></category>
		<category><![CDATA[reporting]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=252</guid>
		<description><![CDATA[One of the biggest updates in the new release of Hurricane MTA Server is built in feedback loop report processing.  If you are not familiar with feedback loops, it is primarily used as a mechanism for ISPs to notify senders of the recipients that are reporting their mail as spam.  Since these spam [...]]]></description>
			<content:encoded><![CDATA[<p>One of the biggest updates in the new release of Hurricane MTA Server is built in feedback loop report processing.  If you are not familiar with feedback loops, it is primarily used as a mechanism for ISPs to notify senders of the recipients that are reporting their mail as spam.  Since these spam complaints damage your reputation and hurt your deliverability, it is imperative that the recipients responsible for the complaints be removed from your list immediately.</p>
<p>This has not been an easy task in the past, but with the new features in Hurricane MTA Server it just became a whole lot easier.  Hurricane MTA Server is now capable of intercepting feedback loop report messages from ISPs, which it will automatically analyze and process.  The results of the analysis of each feedback loop report received are logged, passed to <a href="http://www.socketlabs.com/blog/2009/07/handling-feedback-loop-reports-with-a-plugin/">a new plugin API event</a> and also included on the brand new built-in feedback loop report.</p>
<div align=center><div id="attachment_262" class="wp-caption center" style="width: 310px"><a href="http://www.socketlabs.com/blog/wp-content/uploads/2009/07/picture-11.png" rel="lightbox"><img src="http://www.socketlabs.com/blog/wp-content/uploads/2009/07/picture-11-300x251.png" alt="Feedback Loop Report" title="Feedback Loop Report" width="300" height="251" class="size-medium wp-image-262" /></a><p class="wp-caption-text">Feedback Loop Report</p></div></div>
<p>A <a href="http://www.socketlabs.com/blog/2009/07/handling-feedback-loop-reports-with-a-plugin/">new plugin API event</a> (courtesy of the <a href="http://www.socketlabs.com/blog/2009/07/new-plugin-api…ial-infinitely/">new IDynamic plugin interface</a>) can also be handled to push the results right out to your own databases in real-time.</p>
<div class="callout">Hurricane MTA Server&#8217;s <a href="http://www.socketlabs.com/blog/2009/07/handling-feedback-loop-reports-with-a-plugin/">feedback loop API</a> makes it possible to have the recipients that flag your mail as spam, removed from your address list in real-time!  Imagine what that will do for your deliverability!</div>
<p>Hurricane MTA Server has the ability to process feedback loop reports that are in the Abuse Feedback Reporting Format (<a href="http://tools.ietf.org/id/draft-shafranovich-feedback-report-07.txt" target="_blank">ARF</a>) such as Aol, Yahoo, Comcast and others as well as non ARF feedback loop reports from Hotmail and MSN.  </p>
<p>Feedback loop reports are specific to each ISP so you must sign up with each ISP separately.   Normally you are required to fill out a form on each ISP&#8217;s web site proving that you are the owner of the IP addresses you wish to monitor and providing an email address to send the reports to.  Once your feedback loop is setup with the ISP, you must configure Hurricane MTA Server to accept and process the messages.</p>
<p>The email address you choose must have its mail exchange set to the IP of your Hurricane MTA Server and Hurricane MTA Server must be configured with the same address so that it knows to accept the messages.  Feedback loops are configured in Hurricane MTA Server in the new FBL tab of the account settings.  Once setup correctly Hurricane MTA Server will start accepting the reports and parsing them.</p>
<div align=center><div id="attachment_273" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.socketlabs.com/blog/wp-content/uploads/2009/07/hurricane-mta-server-1.jpg" rel="lightbox"><img src="http://www.socketlabs.com/blog/wp-content/uploads/2009/07/hurricane-mta-server-1-300x135.jpg" alt="Feedback Loop Configuration" title="Feedback Loop Configuration" width="300" height="135" class="size-medium wp-image-273" /></a><p class="wp-caption-text">Feedback loop configuration is per account.</p></div></div>
<p>When feedback loops are processed the results can also be put into a feedback loop log file (enabled in account log file settings) or processed by your code in real time with the <a href="http://www.socketlabs.com/blog/2009/07/handling-feedback-loop-reports-with-a-plugin/">new feedback loop plugin API event</a></p>
<p>See our list of <a href="http://www.socketlabs.com/blog/2009/07/feedback-loop-signup-links/">feedback loop signup links</a>.</p>
<p>Good luck!</p>
<img src="http://feeds.feedburner.com/~r/socketlabs/~4/hQS08ZsVtUs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.socketlabs.com/blog/2009/07/feedback-loop-processing-and-reporting-in-hurricane-mta-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.socketlabs.com/blog/2009/07/feedback-loop-processing-and-reporting-in-hurricane-mta-server/</feedburner:origLink></item>
		<item>
		<title>New Plugin API Interface for Hurricane MTA Server Expands Integration Potential Infinitely</title>
		<link>http://feedproxy.google.com/~r/socketlabs/~3/KFEUEf9sg8Y/</link>
		<comments>http://www.socketlabs.com/blog/2009/07/new-plugin-api-interface-for-hurricane-mta-server-expands-integration-potential-infinitely/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 19:04:00 +0000</pubDate>
		<dc:creator>John Alessi</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Hurricane MTA Server]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=267</guid>
		<description><![CDATA[Hurricane MTA Server&#8217;s event-driven plugin API has long been one of its greatest features and strengths.  It enables real-time event-driven integration and data push capabilities never before seen in an MTA.  Interfaces like IOutboundSMTPConncetion and its OnSent(), OnFail() and OnDefer() event methods allow developers to handle real-time events with .Net code just as [...]]]></description>
			<content:encoded><![CDATA[<p>Hurricane MTA Server&#8217;s event-driven plugin API has long been one of its greatest features and strengths.  It enables real-time event-driven integration and data push capabilities never before seen in an MTA.  Interfaces like IOutboundSMTPConncetion and its OnSent(), OnFail() and OnDefer() event methods allow developers to handle real-time events with .Net code just as easy as handling an OnClick() or Page_Load() event in other .Net apps.</p>
<p>These &#8220;pre-casted&#8221; event methods are easy to use, but unfortunately they are pretty much immutable.  Due to the limitations imposed by the architecture of .Net we can not extend these methods or interfaces without breaking the original interface and forfeiting its backwards compatibility &#8211; and the backwards compatibility of the Hurricane MTA Server plugins you have developed.</p>
<p>Our answer to this is the new IDynamic plugin interface.  Unlike the other interfaces supported by the Hurricane MTA Server plugin API, the IDynamic interface contains only one method, OnDynamicEvent().</p>
<pre class="code">
object OnDynamicEvent(DynamicEventId eventId, ref Dictionary<string, object> eventParams)
</pre>
<p>OnDynamicEvent() and its parameters are generic.  Hurricane MTA Server can trigger this method for any type of event, which it identifies by the <em>eventId</em> parameter and can pass an unlimited number of parameters via the <em>eventParams</em> dictionary object.  </p>
<p>Additionally since <em>eventParams</em> is passed by reference, plugins can add to or modify the values it contains as a way of instructing Hurricane MTA Server to do something differently.  The return value of OnDynamicEvent is an object type which further enables plugins to return rich information to Hurricane MTA Server where applicable.  </p>
<div class="callout">
IDynamic is much less rigid than the other Hurricane MTA Server API interfaces and the benefit becomes clear when you realize that now we can add infinite levels of functionality to the API without breaking the interface &#8211; or your existing code!
</div>
<p>Lets take a look at a simple implementation of the IDynamic interface.</p>
<pre class="code">
public class Feedbackloop : PluginBase, IDynamic
{
     public object OnDynamicEvent(DynamicEventId eventId, ref Dictionary<string, object> eventParams)
     {
         if (eventId == DynamicEventId.Init)
         {
             eventParams["OnFirstConnection"] = 1;
         }
         if (eventId == DynamicEventId.OnFirstConnection)
         {
             //do work here to handle OnFirstConnection event
         }
         return null;
    }
}
</pre>
<p>The first thing you will notice is that since the OnDynamicEvent() method can be called for any number of events, we are checking the <em>eventId</em> parameter to see which event is actually being fired.</p>
<p>One event that we must handle in every OnDymanicEvent() implementation is Init.  OnDynamicEvent() will be called with the <em>eventId</em> parameter set to DynamicEventId.Init the first time OnDynamicEvent() is called after the plugin is loaded.  The Init event must be handled to instruct Hurricane MTA Server to call OnDynamicEvent() for other events that you want to handle.  This is for performance as it would not be efficient for Hurricane MTA Server to call OnDynamicEvent() for every event it supports, even if you are not building a handler for it.  </p>
<p>When the Init event is fired, <em>eventParams</em> will contain an item for each of the events supported by OnDynamicEvent().  You must handle the Init event and set the value to 1 for each event you want fired.</p>
<p>In the above example we are setting the value of the <em>eventParams</em> dictionary item OnFirstConnection to 1, to indicate that we are going to handle the OnFirstConnection event.  OnFirstConnection is an event that is fired just before a new connection is made to an ISP. </p>
<pre class="code">
             eventParams["OnFirstConnection"] = 1;
</pre>
<p>This is how we tell Hurricane MTA Server to fire OnDynamicEvent().  Below is another way of doing the same thing.  It is not as clean looking but is more error proof because the event identifier is being taken from a predefined enumeration.</p>
<pre class="code">
             eventParams[DynamicEventId.OnFirstConnection.ToString()] = 1;
</pre>
<p>Lets expand the sample with some more code that will actually do something each time the  OnFirstConnection event is fired.  First, I need to tell you a bit more about the OnFirstConnection event.</p>
<div class="callout">
Keep in mind that OnFirstConnection is one of many events that can be handled by the IDynamic interface and was randomly chosen for this example.  IDynamic can also be used to handle OnFail, OnSent, etc&#8230;  as well as other events.  The power of IDynamic is that we are now able to add more events, and extend existing events the plugin API without disturbing backwards compatibility.  In that same spirit, all of the old API interfaces such as IBounceProcess and IOutboundSMTPConnection, are all still supported so your old plugins will continue to run as usual.
</div>
<p>OnFirstConnection is called when a connection is about to be made to an ISP. The <em>eventParams</em> parameter will contain the following items:</p>
<table class="post">
<tr class="post">
<th>Key</th>
<th>Value</th>
</tr>
<tr class="post">
<td>(out string) AccountId</td>
<td>The id of the account making the connection.</td>
</tr>
<tr class="post">
<td>(out string) Domain</td>
<td>The domain the connection is being made to.</td>
</tr>
<tr class="post">
<td>(out string) LocalIp</td>
<td>The local ip address that is connecting out.</td>
</tr>
<tr class="post">
<td>(in/out StringDictionary) DeliveryRule</td>
<td>The delivery rule settings being used.</td>
</tr>
</table>
<p>By handling the OnFirstConnection event, we can modify the DeliveryRule dictionary object, changing the delivery rule for this ISP in real time.</p>
<pre class="code">
public class Feedbackloop : PluginBase, IDynamic
{
     public object OnDynamicEvent(DynamicEventId eventId, ref Dictionary<string, object> eventParams)
     {
         //Tell the system we only want to get feedback loop events.
         if (eventId == DynamicEventId.Init)
         {
             eventParams["OnFirstConnection"] = 1;
         }
         if (eventId == DynamicEventId.OnFirstConnection)
         {
             if (someConditionExists)
             {
                 <b>StringDictionary rule = eventParams["DeliveryRule"];
                 rule["Action"]="Defer";</b>
             }
         }
         return null;
     }
}
</pre>
<p>In this example, if the variable <em>someConditionExists</em> evaluates to true, then we set the delivery rule action to &#8220;Defer&#8221;.  This changes the delivery rule in the Hurricane MTA Server process to defer all email which is subject to this delivery rule until the action is changed back to &#8220;Normal&#8221;.  Keep in mind that this only affects the delivery rule <em>in memory</em> and not the value in the configuration file for this rule.  That means that restarting the server will cause the action to revert back to the value in the config file (since the config file is reloaded when the server starts), which is in most cases &#8220;Normal&#8221;.</p>
<p>So, you might be asking, why would I want to write a plugin to change a delivery rule&#8217;s action to &#8220;Defer&#8221;?  Well one reason would be if you wanted to write some code to monitor the responses you receive from ISPs and change your delivery rules based on those responses.  For example you could also handle the OnFail event to monitor the responses and then keep some state as to how you want to change the delivery rule for that ISP the next time a connection attempt is made.  If an ISP response indicated that you were being blocked, you might want to automatically start deferring email to that ISP.  By coding this way you can add your own strategic logic to the delivery process.  Not all of our customers get this involved with the API, but a few power users do &#8211; and exploit it to great benefits.  </p>
<div class="callout">
Our goal is to make it possible to extend the software according to customer needs, and each of our customers have different needs.  The IDynamic interface allows us to satisfy our customers diverse, yet important needs today and far into the future.
</div>
<p>The IDynamic interface is a part of the current SDK which is included in the latest production version of Hurricane MTA Server released in June 09.  Its documentation and samples can be found in the plugins directory of your Hurricane MTA Server installation.</p>
<img src="http://feeds.feedburner.com/~r/socketlabs/~4/KFEUEf9sg8Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.socketlabs.com/blog/2009/07/new-plugin-api-interface-for-hurricane-mta-server-expands-integration-potential-infinitely/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.socketlabs.com/blog/2009/07/new-plugin-api-interface-for-hurricane-mta-server-expands-integration-potential-infinitely/</feedburner:origLink></item>
		<item>
		<title>Handling Feedback Loop Reports with a Plugin</title>
		<link>http://feedproxy.google.com/~r/socketlabs/~3/8uOtkPS9rPc/</link>
		<comments>http://www.socketlabs.com/blog/2009/07/handling-feedback-loop-reports-with-a-plugin/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 21:41:39 +0000</pubDate>
		<dc:creator>John Alessi</dc:creator>
				<category><![CDATA[Deliverability]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Hurricane MTA Server]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[fbl]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=277</guid>
		<description><![CDATA[One of the cool new events supported by the new IDynamic plugin API interface is OnFeedbackLoopParsed which can be fired each time a feedback loop report is received and processed by Hurricane MTA Server.
The following code illustrates how the event can be handled by your code.  If you have not read about the new [...]]]></description>
			<content:encoded><![CDATA[<p>One of the cool new events supported by the <a href="http://www.socketlabs.com/blog/2009/07/new-plugin-api-interface-for-hurricane-mta-server-expands-integration-potential-infinitely/">new IDynamic plugin API interface</a> is OnFeedbackLoopParsed which can be fired each time a feedback loop report is received and processed by Hurricane MTA Server.</p>
<p>The following code illustrates how the event can be handled by your code.  If you have not read about the <a href="http://www.socketlabs.com/blog/2009/07/new-plugin-api-interface-for-hurricane-mta-server-expands-integration-potential-infinitely/">new IDynamic plugin API interface</a> yet I would suggest that you do because it contains the basic information on the OnDynamicEvent() method which is used to fire the feedback loop events. </p>
<pre class="code">
public class Feedbackloop : PluginBase, IDynamic
{

     public object OnDynamicEvent(DynamicEventId eventId, ref Dictionary<string, object> eventParams)
     {
         //Tell the system we only want to get feedback loop events
         if (eventId == DynamicEventId.Init)
         {
             eventParams[DynamicEventId.OnFeedbackLoopParsed.ToString()] = 1;
         }
         //Handle feedback loop event
         if (eventId == DynamicEventId.OnFeedbackLoopParsed)
         {
             string OrignalRecipient = eventParams["OriginalRecipient"].ToString();
             string OrignalMessageId = eventParams["SystemMessageID"].ToString();
             string CustomMailingID = eventParams["CustomMailingID"].ToString();
             string CustomMessageID = eventParams["CustomMessageID"].ToString();
             string UserAgent = eventParams["User-Agent"].ToString();
             string Type = eventParams["Type"].ToString();

             /// To-do: Do database work to unsubscribe user.

         }
         return null;
     }

}
</pre>
<p>Also, in cash you missed it, find out all the info on the <a href="http://www.socketlabs.com/blog/2009/07/feedback-loop-processing-and-reporting-in-hurricane-mta-server/">new feedback loop processing and reporting</a> in Hurricane MTA Server.</p>
<img src="http://feeds.feedburner.com/~r/socketlabs/~4/8uOtkPS9rPc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.socketlabs.com/blog/2009/07/handling-feedback-loop-reports-with-a-plugin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.socketlabs.com/blog/2009/07/handling-feedback-loop-reports-with-a-plugin/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.332 seconds -->
