<?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>SocketLabs Email Delivery Blog &#187; Development</title>
	<atom:link href="http://www.socketlabs.com/blog/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.socketlabs.com/blog</link>
	<description>Everything about Email Deliverability, Hurricane Server, SMTP Express, MTAs, etc...  Sponsored by SocketLabs, Inc.</description>
	<lastBuildDate>Thu, 10 Nov 2011 19:27:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>All new Suppression List management features now available!</title>
		<link>https://www.socketlabs.com/blog/2011/10/all-new-suppression-list-management-features-now-available/</link>
		<comments>https://www.socketlabs.com/blog/2011/10/all-new-suppression-list-management-features-now-available/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 15:08:42 +0000</pubDate>
		<dc:creator>brian.godiksen</dc:creator>
				<category><![CDATA[Deliverability]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Email On-Demand]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=799</guid>
		<description><![CDATA[SocketLabs is excited to announce some great new features to help you manage your Suppression List! If you are unfamiliar with the Suppression List page, it can be found in the Control Panel. Once you’ve selected a Server to manage just select Suppression List from the Config tab in the top menu bar. Upon arrival at [...]]]></description>
			<content:encoded><![CDATA[<p>SocketLabs is excited to announce some great new features to help you manage your Suppression List!</p>
<p>If you are unfamiliar with the Suppression List page, it can be found in the Control Panel. Once you’ve selected a Server to manage just select Suppression List from the Config tab in the top menu bar.</p>
<div id="attachment_800" class="wp-caption alignleft" style="width: 485px"><a href="http://www.socketlabs.com/blog/wp-content/uploads/2011/10/Suppression-Location.png" rel="lightbox"><img class="size-large wp-image-800 " src="http://www.socketlabs.com/blog/wp-content/uploads/2011/10/Suppression-Location-475x293.png" alt="Suppression List Management Link Location" width="475" height="293" /></a><p class="wp-caption-text">Once you have selected a Server to manage, the Suppression List is easy to find.</p></div>
<p>Upon arrival at the newly updated Suppression List page you will see your list of suppressed addresses.  You can now page through and see all of the addresses with the most recent additions first.  We have also added a download link in the top right corner of the data table, just like on the reporting pages.   This will make it easier than ever for you to scrub your lists of bad data, make improvements to your reputation, and improve deliverability.  See the screenshot below which highlights the new additions:</p>
<p><a href="http://www.socketlabs.com/blog/wp-content/uploads/2011/10/BlogImage2.png" rel="lightbox"><img class="size-large wp-image-805  alignleft" src="http://www.socketlabs.com/blog/wp-content/uploads/2011/10/BlogImage2-338x475.png" alt="Check Out All These Great New Features!" width="338" height="475" /></a></p>
<p>These great new facets have been added without sacrificing any of the previous features.   You have full control over the removal of any address that encountered a hard failure.  Also, the search feature is now a “Starts With&#8230;” search.  You can still filter your suppression list to find an individual address in just seconds.</p>
<p>In order to make all these great improvements we overhauled the way in which we store the data in our back-end.  The new optimized database will allow for further features to be developed around this data much more quickly and easily.  Do you have any ideas or suggestions?  Make sure you submit them on our <a title="feedback page" href="http://feedback.socketlabs.com/" target="_blank">feedback page</a>.</p>
<p>To help everyone understand how addresses end up on the Suppression List in the first place, we added a new <a title="knowledgebase article" href="https://support.socketlabs.com/kb/92/" target="_blank">knowledgebase article</a> that details how the Suppression features work.  If you have any further questions we are always glad to answer them, just contact us at <a href="mailto:Support@socketlabs.com">Support@socketlabs.com</a></p>
<p>We hope you enjoy the newest improvements! Check them out now by logging into the <a title="Control Panel" href="https://cp.socketlabs.com" target="_blank">Control Panel</a>.</p>
<p>Thank you,</p>
<p>The SocketLabs Team</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.socketlabs.com/blog/2011/10/all-new-suppression-list-management-features-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Search Features</title>
		<link>https://www.socketlabs.com/blog/2011/07/new-search-features/</link>
		<comments>https://www.socketlabs.com/blog/2011/07/new-search-features/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 15:31:57 +0000</pubDate>
		<dc:creator>brian.godiksen</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Email On-Demand]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=782</guid>
		<description><![CDATA[We are always hard at work trying to enhance your experience with our Email On-Demand service.  This week we released an update that contained some fantastic new enhancements.  If you haven’t already noticed, here is a quick overview of what we added. Searching in the Control Panel and API You will find it is much [...]]]></description>
			<content:encoded><![CDATA[<p>We are always hard at work trying to enhance your experience with our Email On-Demand service.  This week we released an update that contained some fantastic new enhancements.  If you haven’t already noticed, here is a quick overview of what we added.</p>
<p>Searching in the Control Panel and API</p>
<p>You will find it is much easier to find specific messages in the Email On-Demand Control Panel.  At the top of the report pages there is now a drop down list of search criteria that will filter your results.  This screenshot below highlights the new search fields:</p>
<p><a rel="attachment wp-att-783" href="http://www.socketlabs.com/blog/2011/07/new-search-features/screenshot/"><img class="aligncenter size-large wp-image-783" src="http://www.socketlabs.com/blog/wp-content/uploads/2011/07/screenshot-475x183.jpg" alt="Search Screenshot" width="475" height="183" /></a></p>
<p>This new search feature, combined with the ability to sort on an individual column, will enable you to find exactly what you are looking for quickly and easily.  We are continuing to work on this and hope to implement a full-text search in a future update.</p>
<p>Along with searching in the Control Panel, one of our most highly requested features has been the ability to filter the results of API calls.  Now the messagesFailed, messagesProcessed, messagesFblReported, and messagesOpenClick methods allow for filtering on the initial characters of the following fields: MessageID, MailingID, ToAddress, and FromAddress.</p>
<p>While we are excited about these great new search features, we also made improvements to the performance and reliability of our Control Panel, API, and delivery system.  We hope you enjoy your Email On-Demand account and if you have any ideas for improvements please make sure to post your suggestions on our feedback page: <a href="http://feedback.socketlabs.com">http://feedback.socketlabs.com</a></p>
<p>Thank you,</p>
<p>The SocketLabs Team</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.socketlabs.com/blog/2011/07/new-search-features/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hurricane MTA Server Updates</title>
		<link>https://www.socketlabs.com/blog/2010/11/hurricane-mta-server-updates/</link>
		<comments>https://www.socketlabs.com/blog/2010/11/hurricane-mta-server-updates/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 21:50:40 +0000</pubDate>
		<dc:creator>John Alessi</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Hurricane MTA Server]]></category>

		<guid isPermaLink="false">http://www.socketlabs.com/blog/?p=663</guid>
		<description><![CDATA[Over the past few months we have released some powerful new functionality into Hurricane MTA Server for our on-premise customers. Delivery Rule Overrides Delivery rule overrides enable you to globally override all delivery rules for an account. For example, if you wanted to change the throttling for an account to 50 messages per hour, per [...]]]></description>
			<content:encoded><![CDATA[<p style="clear: both">Over the past few months we have released some powerful new functionality into Hurricane MTA Server for our on-premise customers.</p>
<p style="clear: both"><strong>Delivery Rule Overrides</strong></p>
<p style="clear: both">Delivery rule overrides enable you to globally override all delivery rules for an account. For example, if you wanted to change the throttling for an account to 50 messages per hour, per domain, per IP, you can do it here.</p>
<p style="clear: both">Each delivery rule override gets overlaid on top of any existing delivery rules that would otherwise apply.</p>
<p style="clear: both"><a href="http://www.socketlabs.com/blog/wp-content/uploads/2010/11/Hurricane_MTA_Server.jpg" class="image-link" rel="lightbox"><img class="linked-to-original" src="http://www.socketlabs.com/blog/wp-content/uploads/2010/11/Hurricane_MTA_Server-thumb.jpg" height="302" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a><strong>Sender and Receiver Control</strong></p>
<p style="clear: both">It is now possible to independently control an accounts ability to accept new mail and/or to send mail already in queue.</p>
<p style="clear: both"><a href="http://www.socketlabs.com/blog/wp-content/uploads/2010/11/Hurricane_MTA_Server-1.jpg" class="image-link" rel="lightbox"><img class="linked-to-original" src="http://www.socketlabs.com/blog/wp-content/uploads/2010/11/Hurricane_MTA_Server-1-thumb1.jpg" height="275" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a><strong>New Bounce Processing Engine</strong></p>
<p style="clear: both">Under the hood is an entirely new bounce processing engine that is much more efficient and customizable than ever before. For most users this will be completely transparent, but for those of you who like to dive deep into bounce data, all of our bounces are categorized by codes now. The following KB article explains it more: <a href="http://www.socketlabs.com/78" target="_blank">http://www.socketlabs.com/78</a></p>
<p style="clear: both"><strong>Restarts on Config Changes Minimized</strong><br />We have optimized the internals so that far fewer restarts are required when making configuration changes.</p>
<p style="clear: both">If you have an up to date support contract and you would like to upgrade, with just a click you can easily grab the new builds, with these new features by using the built in Update option included with Hurricane MTA Server.</p>
<p><br class="final-break" style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>https://www.socketlabs.com/blog/2010/11/hurricane-mta-server-updates/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bounce and Feedback Loop Test Addresses</title>
		<link>https://www.socketlabs.com/blog/2009/07/bounce-and-feedback-loop-test-addresses/</link>
		<comments>https://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 [...]]]></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>
]]></content:encoded>
			<wfw:commentRss>https://www.socketlabs.com/blog/2009/07/bounce-and-feedback-loop-test-addresses/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Plugin API Interface for Hurricane MTA Server Expands Integration Potential Infinitely</title>
		<link>https://www.socketlabs.com/blog/2009/07/new-plugin-api-interface-for-hurricane-mta-server-expands-integration-potential-infinitely/</link>
		<comments>https://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 easy 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>
]]></content:encoded>
			<wfw:commentRss>https://www.socketlabs.com/blog/2009/07/new-plugin-api-interface-for-hurricane-mta-server-expands-integration-potential-infinitely/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Handling Feedback Loop Reports with a Plugin</title>
		<link>https://www.socketlabs.com/blog/2009/07/handling-feedback-loop-reports-with-a-plugin/</link>
		<comments>https://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>
]]></content:encoded>
			<wfw:commentRss>https://www.socketlabs.com/blog/2009/07/handling-feedback-loop-reports-with-a-plugin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

