<?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>GeakeIT</title>
	<atom:link href="http://www.geakeit.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.geakeit.co.uk</link>
	<description>Email Marketing, eCommerce &#38; SEO</description>
	<lastBuildDate>Fri, 30 Jul 2010 21:50:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>The ultimate database email address validating/processing/correcting script</title>
		<link>http://www.geakeit.co.uk/2010/07/30/the-ultimate-database-email-address-validatingprocessingcorrecting-script/</link>
		<comments>http://www.geakeit.co.uk/2010/07/30/the-ultimate-database-email-address-validatingprocessingcorrecting-script/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 15:15:53 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Email Marketing]]></category>
		<category><![CDATA[bad email format]]></category>
		<category><![CDATA[correcting human error]]></category>
		<category><![CDATA[email marketing]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.geakeit.co.uk/?p=122</guid>
		<description><![CDATA[Ok, so you want to start emailing/have acquired a database/looked at your own database of email addresses that you ultimately want to email. If humans have inputted the data without any verification stage it will contain all manner of errors, human error is understandable and unavoidable. What kind of mistakes could these “data inputers” have [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, so you want to start emailing/have acquired a database/looked at your own database of email addresses that you ultimately want to email. If humans have inputted the data without any verification stage it will contain all manner of errors, human error is understandable and unavoidable.</p>
<p>What kind of mistakes could these “data inputers” have made? It’s best illustrated by an example&#8230;</p>
<p>If Alice was taking down a customer’s email address, say Reginald@hotmail.com they could have typed the following&#8230;</p>
<ul>
<li>Reginald@@hotmail.com – typed a single character or letter twice</li>
<li>Reginald@htmail.com – neglected to type a character</li>
<li>Reginald@htomail.com – typed all characters but in the wrong order</li>
</ul>
<p>Having noticed this problem in BrightMinds’ database I wrote a TSQL script to identify and correct these human errors.</p>
<p>The script reads your existing email database and identifies domains whose emails have recently been read. These are inserted into the table domainKey. Next, these domains are read sequentially in a cursor and the human error domains created. A reference table is then created – domainSynRef with two columns – realdomain and errordomain.</p>
<p>Of course some rearranged domains could well be real domains, the script checks for this but could do with some development. Clearly if anyone else wishes to use the it will need some light table name or structure modifications. The basic string manipulations though are still entirely valid.</p>
<p>So here’s an example for what it generates with the domain aol.co.uk&#8230;</p>
<table style="height: 532px;" border="0" cellspacing="0" cellpadding="0" width="139">
<tbody>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">.aol.co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">@aol.co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">..aol.co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aolcouk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aolco.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.couk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol@co@uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol@co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.co@uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">l.co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">ao.co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.co.u</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.co.</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">ol.co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">al.co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.o.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.c.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.co.k</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aaol.co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aool.co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aoll.co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol..co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.cco.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.coo.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.co..uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">alo.co.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">ao.lco.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aolc.o.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.oc.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.c.ouk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.cou.k</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.co.ku</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">a.loco.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aoc.lo.uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aoloc..uk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol..ocuk</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.cu.ok</span></td>
</tr>
<tr>
<td width="64" valign="bottom"><span style="color: #0000ff;">aol.co.uk</span></td>
<td width="75" valign="bottom"><span style="color: #0000ff;">aol.coku.</span></td>
</tr>
</tbody>
</table>
<p>Quite comprehensive I think, could it be edited to introduce double errors such as <a href="mailto:Reginald@hhotmail..com">Reginald@hhotmail..com</a>? Sure, if you then write some more string statements after the cursor. Although there’s probably a stage when one has to think – if someone’s made this many errors, can we assume we can fix it?!</p>
<p>As always, suggestions/modifications/improvements very much welcome. I imagine a single run script and subsequent checking function would be better for a single email address input and would probably work better than my stored procedure, this is just what fitted best into our environment (checking c.300,000 email addresses).</p>
<p>The result? We gained over 1500 now valid email addresses. Try it out for yourself, <a href="http://www.geakeit.co.uk/ultimate_email_script.sql">download the stored procedure here</a>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.geakeit.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.geakeit.co.uk/2010/07/30/the-ultimate-database-email-address-validatingprocessingcorrecting-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The essential guide to building strong email sender reputation</title>
		<link>http://www.geakeit.co.uk/2010/07/30/the-essential-guide-to-building-strong-email-sender-reputation/</link>
		<comments>http://www.geakeit.co.uk/2010/07/30/the-essential-guide-to-building-strong-email-sender-reputation/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 15:08:41 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[eCommerce]]></category>
		<category><![CDATA[email marketing]]></category>
		<category><![CDATA[sender reputation]]></category>

		<guid isPermaLink="false">http://www.geakeit.co.uk/?p=117</guid>
		<description><![CDATA[If you’ve chosen to send your own marketing emails without an ESP you’ll already understand the importance of gaining good sender reputation with ISPs and webmail domains. Choose not to follow their guidelines and your emails will likely end up in junk/spam folders or worse still your IPs blacklisted. Unfortunately there’s no easy “X number [...]]]></description>
			<content:encoded><![CDATA[<p>If you’ve chosen to send your own marketing emails without an ESP you’ll already understand the importance of gaining good sender reputation with ISPs and webmail domains. Choose not to follow their guidelines and your emails will likely end up in junk/spam folders or worse still your IPs blacklisted.</p>
<p>Unfortunately there’s no easy “X number of steps” way to gain instantly great email sending reputation with ISPs. What’s required is to follow massive amounts of guidelines in your email processing, design and send stages with strict attention to detail.</p>
<p>So to help us all I’ve put together a broad but detailed 7 step guide to gaining great email sender reputation. It’s a compilation of all major ISP and webmail provider’s bulk mail sender guidelines and will, if executed fully, lead to very good sender reputation.</p>
<p><strong><em><span style="text-decoration: underline;">Design &amp; Setup &#8211; Before you start sending</span></em></strong><em> </em></p>
<p><em>1. </em><em><span style="text-decoration: underline;">SMTP Mail Server.</span></em></p>
<p>When building your SMTP Server, whether using Windows or UNIX/Linux you’ll need to ensure it’s on a separate, fixed IP address to your business and transactional emails. You’ll also need to setup a reverse DNS record against its domain. E.g if your fixed sender IP is 89.98.252.65 then ask your ISP to setup the reverse DNS record email.yourdomain.com and ‘point it to’ 89.98.252.65<em>.</em> The SMTP server also needs to send authenticated emails using the SPF/SenderID and DKIM/DomainKeys frameworks. A few months ago I wrote a post describing <a href="http://www.geakeit.co.uk/2010/01/14/getting-the-email-authentication-methods-dkim-domain-keys-senderid-and-spf-working-on-a-microsoft-exchange-server/">how to integrate DKIM/DomainKeys into Microsoft Exchange Server</a>. There are plenty of guides out there explaining how to set both of these up on UNIX/Linux.</p>
<p><em>2. </em><em><span style="text-decoration: underline;">Clean Lists</span></em></p>
<p>Design your newsletter subscribes process to follow a ‘double opt-in’ mechanism to minimise junk/wrong/spam-trapping email addresses. In other words ensure that when someone signs up to your service, send them an initial email that contains a verification link. When clicked the user’s email address is verified and added to the mailing list. This stops us trying to send emails to <a href="mailto:fictionaladdress@hotmail.com">fictionaladdress@hotmail.com</a> and punishing our reputation when we receive a hard bounce from hotmail.com. Don’t know what a hard bounce is? You’ll want to learn about them.<em> </em></p>
<p><em>3. </em><em><span style="text-decoration: underline;">Unsubscribes, bounces and bad formats</span></em></p>
<p>Double, triple and quadruple check that your system processes unsubscribe requests quickly and correctly. Likewise for soft and hard bounces; ISPs are well known to assess sender credibility heavily on the number of bounces they generate. Lots of bounces means a poorly compiled or maintained emailing list.</p>
<p>If you collect email addresses by phone, post or acquisition make sure you have some form of bad format checking in place to prevent typical errors like <a href="mailto:barry@hotmail..com">barry@hotmail..com</a> or barry@@hotmail.com. If you want to get extra fancy, script it to dynamically replace historical (pre double opt-in) email addresses like <em>homail, ohtmail, hptmail</em> with hotmail. I’ve written my own in TSQL and will publish it shortly.</p>
<p>Monitor your new subscribers for spamflag addresses – abuse@, postmaster@ and nospam@ addresses should all be automatically unsubscribed.<em> </em></p>
<p><em>4. </em><em><span style="text-decoration: underline;">Sign up to email feedback loops (FBLs) and whitelist services.</span></em></p>
<p>FBLs simply notify the email sender when the recipient clicks on the ‘This is Spam’ button while reading your email. Since these recipients have deemed our email to be spam (and the ISP concerned knows this) we need to unsubscribe them to ensure we build good reputation. Many of you will have signed up with the big ones AOL, Hotmail and Yahoo but do make the very small effort in signing up for the rest. <a href="http://blog.wordtothewise.com/isp-information/">Word to the wise</a> maintains a good list of all known feedback loops and whitelists along with a script to make processing their spam notifications a little easier. If processing these FBL notifications becomes a drag be sure to <a href="http://www.geakeit.co.uk/2010/06/25/automating-email-feedback-loop-fbl-processing-and-getting-around-aol%e2%80%99s-recipient-email-address-issue/">read my solution on how to automate it.</a></p>
<p><strong><em><span style="text-decoration: underline;">Starting up – When you start sending</span></em></strong><em> </em></p>
<p><em>5. </em><em><span style="text-decoration: underline;">Test your messages</span></em></p>
<p>Use design tools such as <a href="http://www.emailonacid.com">Email on Acid</a> and <a href="http://litmusapp.com/">Litmus</a> to test your designs in multiple email clients to ensure they all look the same. Also paste the HTML into content checkers to get a “spam score” as well as suggestions on how to avoid the spam filters. <a href="http://www.swiftpage.com/deliverability/spamcheck.htm">SpamCheck</a> and <a href="http://www.contactology.com/check_mqs.php">Contactology</a> are both pretty useful.</p>
<p><em>6. </em><em><span style="text-decoration: underline;">Start small and often</span></em></p>
<p>Nobody wants to hear this, especially when they’re planning on sending 250,000 emails a week but it really is very important for those first few weeks. ISPs are fully aware of your sending trends and will consider a sudden increase in sending rates highly suspicious. Try to send small to begin with and slowly raise the sending rate.</p>
<p>Try also to be consistent with the times you send your emails. This may be difficult, especially if you occasionally respond to current affairs or the weather etc. Sending zero emails on Monday followed by 50,000 on Tuesday looks like a potential email server hijacking and may result in your mail servers being temporarily blocked by ISPs. Is there anything wrong with some people receiving ‘Monday Newsletter’, some ‘Tuesday Newsletter’ etc? Of course not, in fact depending on seasonality, staffing levels and demand it’s arguably quite appealing.<em></em></p>
<p><em>7. </em><em><span style="text-decoration: underline;">Design well</span></em></p>
<p>Follow CAN-SPAM requirements. It’s a complex list of requirements laid down in 2003 that were meant to stop SPAM. Clearly it failed but for us non-spammers that simply want our messages read by our subscribers we need to comply. <a href="http://www.openmoves.com/blog/?p=666">OpenMoves</a> is a decent post outlining the basic requirements.</p>
<p>Send Multi-part MIME emails rather than just HTML; ISPs look at simple HTML emails as likely manifesting covert “Click here for FREE Viagra” banners. Likewise, low text/html ratios look suspicious so ensure you pack a great deal of text into your emails. Product descriptions bulked out with product reviews works very well.  Avoid using attachments and keep your “From Name” and “From Address” consistent. Never link to another domain or port from within your emails.</p>
<p>Design for when images are enabled and disabled and use your imagination to think about how best to push your message. If you use a broad image in a table then don’t <em>just</em> use alt text, place &lt;font&gt; tags around the image to enlarge the alt text and make it unmissable. Look at the images below – which one do you think will get more clicks?</p>
<div id="attachment_118" class="wp-caption alignright" style="width: 310px"><a href="http://www.geakeit.co.uk/wp-content/uploads/2010/07/badalt.jpg"><img class="size-medium wp-image-118" title="Rubbish, bland alt tags" src="http://www.geakeit.co.uk/wp-content/uploads/2010/07/badalt-300x174.jpg" alt="" width="300" height="174" /></a><p class="wp-caption-text">Rubbish, bland alt tags</p></div>
<div id="attachment_119" class="wp-caption alignright" style="width: 310px"><a href="http://www.geakeit.co.uk/wp-content/uploads/2010/07/altgood.jpg"><img class="size-medium wp-image-119" title="Vibrant Alt Tags" src="http://www.geakeit.co.uk/wp-content/uploads/2010/07/altgood-300x175.jpg" alt="" width="300" height="175" /></a><p class="wp-caption-text">Vibrant Alt Tags</p></div>
<p>Beyond the technical design, good, well thought out and tested design results in better customer engagement – better open rates, click throughs and conversions. Importantly though it also results in far fewer unsubscribe requests. Ensure you send genuinely <em>engaging</em> emails. Weekly <em>“Hey look at our samey products that we’ve sent you a million times before”</em> will pull in reliable revenue but you’ll likely see the clickers and converters are not your most recent or valuable customers. Likewise, people won’t be engaged if <em>you</em> just talk solely about <em>your</em> products with wholly one-sided conversation (there are curious <a href="http://www.lakeland.co.uk/">exceptions</a>).</p>
<p>Where’s this leading? Well webmail clients compile and analyse email open rates and click through rates by domain and judge your spam content on this. If 80% of GoogleMail recipients open an email from yourdomain.com then GoogleMail will deem yourdomain.com to be highly engaging and so decrease its likelihood of ending up in the Spam/Junk folder. If only 5% of them open the email, GoogleMail can assume that what you send is not really worth cluttering their inboxes. The lesson here? Only send your emails to those that want to read them.</p>
<p><em><span style="text-decoration: underline;">Keeping that reputation</span></em></p>
<p>As already mentioned, try to remain consistent with broadcast levels and times. Does sending 50,000 emails on Monday and 10 across the rest of the week look suspicious? Yes, very, so stagger the send. The time of day you send is more likely to influence the open rate rather than directly affect your reputation. For example I know that most of my emails are opened at about 9.30pm, even if I send them at 2am. So I can achieve a better open and click through rate by sending them at around 9pm. Better open and click rates mean better reputation. For other businesses, especially B2B, it’s likely to be different.</p>
<p>Should you send all your marketing emails from one IP? Yes, to begin with at least because it simplifies IP reputation assessments by the ISPs. However, once you’re up to speed it’s worth sending through a second IP via another ISP. Imagine if your ISP suddenly changed your IP range, went bust or just felt like being irritating – you could lose your IP and so all that built up good reputation – disaster! So like with the first IP, create a reverse DNS record and begin sending low volume. Slowly build the volume and split the sending across both IPs.</p>
<p>Monitor your deliverability across domains by collating the number of emails sent and comparing it to the number of emails opened by domain. This, monitored weekly, gives a great view into your deliverability by domain. To increase the definition, look at the same data over a single day. This will reveal whether you’re reaching short term sending limits with some domains. To check whether you have any long term issues, be sure to check <a href="http://www.mxtoolbox.com/blacklists.aspx">MX Toolbox’s Blacklist Checker</a>.</p>
<p>Sending emails is not an easy exercise to get right but as with so many things in life, if we tick all the boxes and follow the correct guidelines, we can create really very successful email marketing programmes.</p>
<p>If anyone feels like contributing to this then please email me and I’ll add your suggestions!</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.geakeit.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.geakeit.co.uk/2010/07/30/the-essential-guide-to-building-strong-email-sender-reputation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Automating Email Feedback Loop (FBL) processing and getting around AOL’s &#8220;redacted&#8221; recipient email address issue.</title>
		<link>http://www.geakeit.co.uk/2010/06/25/automating-email-feedback-loop-fbl-processing-and-getting-around-aol%e2%80%99s-recipient-email-address-issue/</link>
		<comments>http://www.geakeit.co.uk/2010/06/25/automating-email-feedback-loop-fbl-processing-and-getting-around-aol%e2%80%99s-recipient-email-address-issue/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 12:16:54 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[aol]]></category>
		<category><![CDATA[automate email feedback loop]]></category>
		<category><![CDATA[email fbl]]></category>
		<category><![CDATA[email marketing]]></category>
		<category><![CDATA[email2db]]></category>

		<guid isPermaLink="false">http://www.geakeit.co.uk/?p=104</guid>
		<description><![CDATA[If a recipient using AOL, Yahoo! Or Hotmail (see here for a full list) deems your email to be spam may click on the &#8220;This is Spam&#8221; button. This generally logs a black mark against the sender’s domain/IP and also sends a detailed notification to the sender’s abuse@ email account (assuming the sender’s signed up [...]]]></description>
			<content:encoded><![CDATA[<p>If a recipient using AOL, Yahoo! Or Hotmail (<a href="http://wiki.wordtothewise.com/ISP_Summary_Information">see here for a full list</a>) deems your email to be spam may click on the <em>&#8220;This is Spam&#8221;</em> button. This generally logs a black mark against the sender’s domain/IP and also sends a detailed notification to the sender’s <a href="mailto:abuse@company.com" target="_blank">abuse@</a> email account (assuming the sender’s signed up to the FBL). The accepted practise is that then the sender unsubscribes the recipient. If the sender then sends further emails to that recipient then bigger black marks are logged against them and their reputation falls. It’s a good system and if you’re handling your own email broadcasts in-house then you’ll want to sign up and configure them. <a href="http://wiki.wordtothewise.com/ISP_Summary_Information">Word to the Wise has a comprehensive list of all available email FBLs with their respective signup pages.</a></p>
<p>However, a problem arises when you send 150,000+ emails per week. You can then expect to receive around 200+ FBL emails per week, a frustrating unsubscribe routine. This is made worse by the completely informal FBL email structure. Yahoo! send their FBL email with a text file attachment that lists the recipient. Hotmail however just attach the original email in .msg format. AOL though are the most annoying – they attach the original .msg like Hotmail but strip out the recipient information and replace it with “&lt;redacted&gt;”. In the FBL body they state the original messageid, hence you need to query your SMTP server for the recipient’s email address. The inconsistency between FBL implementations just means it all takes up more precious time and it needs to be automated&#8230;but can it? It can! And I’ll show you how I did it.</p>
<p>Firstly, a brief outline of what I do. I send emails using Arialsoft’s Campaign Enterprise mated to SQL Server 2008 with Exchange as the SMTP server. I use Outlook as my general mail client. All run on Server 2008/Windows 7.</p>
<p>The FBLs are sent from Hotmail etc to <a href="mailto:abuse@domain.com" target="_blank">abuse@</a> and processed by an open Outlook session to append their attachments .dat/.msg/.txt {etc} to their message body. They’re then read by a terrific application called <a href="http://www.email2db.com/">Email2DB by Parker Software</a> which reads the email body and extracts recipient information. Email2DB then runs a query against the SQL Server to unsubscribe the recipient. Email2DB is not free, however once you get to grips with its interface you’ll realise that you can perform some <a href="http://www.email2db.com/sampleuses.aspx">pretty funky things</a> with it and well worth the price.</p>
<p>So where do you start? Assuming you’ve signed up to (and configured/confirmed functional) all the email FBLs&#8230;</p>
<p>Firstly, to get around AOL’s annoying &lt;redacted&gt; feature, alter your email templates to include the recipient’s email address somewhere in the body. For example, amend the footer to read something like ‘This email has been sent to {email_address} because&#8230;’</p>
<p>Now download and install <a href="http://www.dimastr.com/redemption/">Outlook Redemption</a> – this allows us to run VB scripts within Outlook that can access the data within .msg format attachments. To get things up and working get the developer edition.</p>
<p>Next setup a rule in Outlook that moves emails received from the FBL addresses to a specific folder &#8211; “FBL Queue”. Now setup a further rule, beneath the previous rule, that performs a script. Use the script below, you will need to set Outlook’s macro security to low to run the code.</p>
<p><a href="http://www.geakeit.co.uk/AppendEmail.vb">AppendEmail.vb (v.0.1)</a></p>
<p>The code, if you don’t know VBS, pulls out the attachments and stores them in a temporary folder. It then reads them and appends them as plain text to the original email body. Inside the message body’s are of course the recipient’s email addresses.</p>
<p>Now download, install and start-up Email2DB.Set it up to store the messages however you wish, it doesn’t really matter how, I chose to use the internal database. Setup an account called “FBLs” and point it, using MAPI to read your FBL Queue folder. Set it to move read emails to another folder called “Processed FBLs”. Now we need to setup the triggers.</p>
<p>Setup a new trigger called “Hotmail” and set the “From address” to “<span style="text-decoration: underline;"><a href="mailto:staff@hotmail.com">staff@hotmail.com</a>”</span>. Click on the tab called ‘Field Extraction’, click ‘Add Field’ and paste a copy of your newsletter/triggered email HTML in the textbox on the right. Now, in the textbox on the left titled ‘Look For’ type in the text preceding the recipient’s email address (red in the example below). Then in the ‘Extract Data’ tab, ‘Until These Characters’ box, type in the text following the user’s email address (left in the example below).</p>
<p align="center">“<span style="color: #ff0000;">This email has been sent to</span> example@emailaddress.com <span style="color: #0000ff;">because&#8230;</span>”</p>
<p>If you now click on the General tab the email address should be highlighted, indicating that it will extract that data. Click OK to go back to the Hotmail trigger and OK again to go back to the trigger icons list. In exactly the same way setup further triggers to extract data from AOL and Yahoo! FBLs only remembering to change the from address for filtering to <a href="mailto:scomp@aol.net">scomp@aol.net</a> etc.</p>
<p>Once they’re setup, go back into each trigger and ensure the ‘After this trigger has processed a message’ is set to the following trigger. So for example, once the ‘Hotmail’ trigger has been executed, it follows on to process the ‘AOL’ trigger etc.</p>
<p>Now we have a system that executes a script on each FBL entering the inbox, appends its .msg attachment to the message body and extracts the recipients’ email address. All that’s left is to setup Email2DB to do something to unsubscribes people!</p>
<p>In my SQL database I simply insert the records into a table called fbl_unsubscribes with fields email_address, fbl_domain and dt_created. I then use a stored procedure within the database to change the subscribe list later. This means I can create historical reports to view abuse notifications by domain over time. Email2DB supports a wide range of database protocols, for details on how to deal with SQL inserts see <a href="http://www.email-2-db.com/help/Content/Updating_A_SQL_Database.htm">here</a>.</p>
<p>So there you have it – a 100% automated feedback loop unsubscribe system.</p>
<p>Limitations? My Outlook script is rather weak because it stores msg attachments as draft emails (required for reading). It could do with deleting them afterwards. It also requires an open Outlook session. Improvement suggestions always welcome!</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;"><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>EN-GB</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--><!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:0 0 0 0 0 0 0 0 0 0; 	mso-font-charset:1; 	mso-generic-font-family:roman; 	mso-font-format:other; 	mso-font-pitch:variable; 	mso-font-signature:0 0 0 0 0 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-520092929 1073786111 9 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} a:link, span.MsoHyperlink 	{mso-style-priority:99; 	color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{mso-style-noshow:yes; 	mso-style-priority:99; 	color:purple; 	mso-themecolor:followedhyperlink; 	text-decoration:underline; 	text-underline:single;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoPapDefault 	{mso-style-type:export-only; 	margin-bottom:10.0pt; 	line-height:115%;} @page Section1 	{size:595.3pt 841.9pt; 	margin:72.0pt 72.0pt 72.0pt 72.0pt; 	mso-header-margin:35.4pt; 	mso-footer-margin:35.4pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} --> <!--[endif]--></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">If a recipient using AOL, Yahoo! Or Hotmail (see here for a full list) deems your email to be spam may click on the ‘This is Spam’ button. This generally logs a black mark against the sender’s domain/IP and also sends a detailed notification to the sender’s </span><a href="mailto:abuse@company.com" target="_blank"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">abuse@company.com</span></a><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> email account (assuming the sender’s signed up to the FBL). The accepted practise is that then the sender unsubscribes the recipient. If the sender then sends further emails to that recipient then bigger black marks are logged against them and their reputation falls. It’s a good system and if you’re handling your own email broadcasts in-house then you’ll want to sign up and configure them. Word to the Wise has a comprehensive list of all available email FBLs with their respective signup pages.</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">However, a problem arises when you send 150,000+ emails per week. You can then expect to receive around 200+ FBL emails per week, a frustrating unsubscribe routine. This is made worse by the completely informal FBL email structure. Yahoo! send their FBL email with a text file attachment that lists the recipient. Hotmail however just attach the original email in .msg format. AOL though are the most annoying – they attach the original .msg like Hotmail but strip out the recipient information and replace it with “&lt;redacted&gt;”. In the FBL body they state the original messageid, hence you need to query your SMTP server for the recipient’s email address. The inconsistency between FBL implementations just means it all takes up more precious time and it needs to be automated&#8230;but can it? It can! And I’ll show you how I did it.</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Firstly, a brief outline of what I do. I send emails using Arialsoft’s Campaign Enterprise mated to SQL Server 2008 with Exchange as the SMTP server. I use Outlook as my general mail client. All run on Server 2008/Windows 7.</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">The FBLs are sent from Hotmail etc to </span><a href="mailto:abuse@domain.com" target="_blank"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">abuse@</span></a><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> and processed by an open Outlook session to append their attachments .dat/.msg/.txt {etc} to their message body. They’re then read by a terrific application called Email2DB by Parker Software which reads the email body and extracts recipient information. Email2DB then runs a query against my SQL Server to unsubscribe the recipient. Email2DB is not free, however once you get to grips with its interface you’ll realise that you can perform some pretty funky things with it and well worth the price.</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">So where do you start? Assuming you’ve signed up to (and configured/confirmed functional) all the email FBLs&#8230;</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Firstly, to get around AOL’s annoying &lt;redacted&gt; feature, alter your email templates to include the recipient’s email address somewhere in the body. For example, amend the footer to read something like ‘This email has been sent to {email_address} because&#8230;’</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Now download and install Outlook Redemption – this allows us to run VB scripts within Outlook that can access the data within .msg format attachments. To get things up and working get the developer edition.</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Next setup a rule in Outlook that moves emails received from the FBL addresses to a specific folder &#8211; “FBL Queue”. Now setup a further rule, beneath the previous rule, that performs a script. Copy and paste the below, you will need to set Outlook’s macro security to low to run the code.</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">&lt;code&gt;</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">The code, if you don’t know VBS and don’t enjoy reading comments, pulls out the attachments and stores them in a temporary folder. It then reads them and appends them as plain text to the original email body. Inside the message body’s are of course the recipient’s email addresses.</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Now download, install and start-up Email2DB.Set it up to store the messages however you wish, it doesn’t really matter how, I chose to use the internal database. Setup an account called “FBLs” and point it, using MAPI to read your FBL Queue folder. Set it to move read emails to another folder called “Processed FBLs”. Now we need to setup the triggers.</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Setup a new trigger called “Hotmail” and set the “From address” to “<span style="text-decoration: underline;"><span style="color: blue;"><a href="mailto:staff@hotmail.com">staff@hotmail.com</a>”</span></span>. Click on the tab called ‘Field Extraction’, click ‘Add Field’ and paste a copy of your newsletter/triggered email HTML in the textbox on the right. Now, in the textbox on the left titled ‘Look For’ type in the text preceding the recipient’s email address (red in the example below). Then in the ‘Extract Data’ tab, ‘Until These Characters’ box, type in the text following the user’s email address (left in the example below).</span></p>
<p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">“<span style="color: red;">This email has been sent to</span> example@emailaddress.com <span style="color: #0070c0;">because&#8230;</span>”</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">If you now click on the General tab the email address should be highlighted, indicating that it will extract that data. Click OK to go back to the Hotmail trigger and OK again to go back to the trigger icons list. In exactly the same way setup further triggers to extract data from AOL and Yahoo! FBLs only remembering to change the from address for filtering to </span><a href="mailto:scomp@aol.net"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">scomp@aol.net</span></a><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> etc.</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Once they’re setup, go back into each trigger and ensure the ‘After this trigger has processed a message’ is set to the following trigger. So for example, once the ‘Hotmail’ trigger has been executed, it follows on to process the ‘AOL’ trigger etc.</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Now we have a system that executes a script on each FBL entering the inbox, appends its .msg attachment to the message body and extracts the recipients’ email address. All that’s left is to setup Email2DB to do something to unsubscribes people!</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">In my SQL database I simply insert the records into a table called fbl_unsubscribes with fields email_address, fbl_domain and dt_created. I then use a stored procedure within the database to change the subscribe list later. This means I can create historical reports to view abuse notifications by domain over time. Email2DB supports a wide range of database protocols and more can be read here.</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">So there you have it – a 100% automated feedback loop unsubscribe system.</span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Limitations? My Outlook script is rather weak because it stores msg attachments as draft emails (required for reading). It could do with deleting them afterwards. It also requires an open Outlook session. Improvement suggestions always welcome!<span style="color: #17365d;"> </span></span></p>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.geakeit.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.geakeit.co.uk/2010/06/25/automating-email-feedback-loop-fbl-processing-and-getting-around-aol%e2%80%99s-recipient-email-address-issue/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Alt tags for marketing emails? Think strategically.</title>
		<link>http://www.geakeit.co.uk/2010/06/24/alt-tags-for-marketing-emails-think-strategically/</link>
		<comments>http://www.geakeit.co.uk/2010/06/24/alt-tags-for-marketing-emails-think-strategically/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 20:28:03 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[alt tags]]></category>
		<category><![CDATA[email marketing]]></category>

		<guid isPermaLink="false">http://www.geakeit.co.uk/?p=99</guid>
		<description><![CDATA[One of the biggest nightmares for email marketing folk is email client image blocking. It&#8217;s a security feature designed to stop email senders from tempting their recipients&#8217; computers into downloading unknown content. Could someone wrap a virus into JPG, embedded in an HTML email? Sure. It also helps stop kinky viagra spam emails being viewed [...]]]></description>
			<content:encoded><![CDATA[<p>One of the biggest nightmares for email marketing folk is email client image blocking. It&#8217;s a security feature designed to stop email senders from tempting their recipients&#8217; computers into downloading unknown content. Could someone wrap a virus into JPG, embedded in an HTML email? <a title="JPG virus" href="http://forums.cnet.com/5208-6132_102-0.html?threadID=353176">Sure.</a> It also helps stop kinky viagra spam emails being viewed by little Timmy.</p>
<p>Ignoring the expensive options to guarantee image blocking is switched off (Goodmail etc) we can only really do two things. Firstly, we can encourage recipients to disable image blocking on one of our emails early in the relationship. Once image blocking is disabled for the sender, that setting will normally be saved permanently. The other option is to take full advantage of Alt tags. These are the short blurbs of text or &#8216;Micro-copy&#8217; shown instead of images when the images are unavailable or blocked.</p>
<p>Annoyingly, not all email clients/web clients actually support showing Alt tags (grumble). Here is a list of most current email clients and whether they support displaying Alt tags&#8230;</p>
<table border="0">
<tbody>
<tr>
<th>Supports Alt Tag Display</th>
<th>Doesn&#8217;t support Alt Tag Display</th>
</tr>
<tr>
<td>Hotmail Desktop Client</td>
<td>Entourage 2004</td>
</tr>
<tr>
<td>Outlook 2003</td>
<td>Entourage 2008</td>
</tr>
<tr>
<td>Outlook Express</td>
<td>Mac Mail</td>
</tr>
<tr>
<td>Thunderbird 2</td>
<td>Outlook 2007</td>
</tr>
<tr>
<td>Thunderbird 3</td>
<td>Outlook 2010</td>
</tr>
<tr>
<td>AOL Online</td>
<td>Windows Mail</td>
</tr>
<tr>
<td>Gmail Online</td>
<td>Hotmail Online</td>
</tr>
<tr>
<td>Yahoo Classic Online</td>
<td></td>
</tr>
<tr>
<td>Yahoo New Online</td>
<td></td>
</tr>
<tr>
<td>iPhone Client</td>
<td></td>
</tr>
</tbody>
</table>
<p>The important things to point out are that Outlook 2007 and 2010 do not show Alt tags and neither do any of the Mac clients. On the bright side though all the webmail clients do show them. As a random observation, isn&#8217;t it a little strange that whilst the Microsoft Hotmail Client displays Alt tags, Hotmail online does not?!</p>
<p>So here are my suggestions for getting your recipients to permanently disable image blocking&#8230;</p>
<ul>
<li>For one of your first communication triggered emails, try sending something with a tempting subject line and a body made almost wholly of 1 image. Include text above the image politely reminding the user to disable image blocking. Simple but some recipients will disable image blocking.</li>
<li>Instead of using dull, informative Alt tags like &#8216;logo&#8217; and &#8216;menu image&#8217; try using &#8216;Disable Image Blocking&#8217; for every alt tag seen in a typical email client viewing pane. This is clearly a powerful call to action and I&#8217;ll be running a randomised test of precisely this very soon. I will post the results.</li>
<li>Remember to think long term and ensure you write your Alt tags to get your recipients to do <span style="text-decoration: underline;">what you want them to do</span>. If you write &#8217;50% off&#8217; you&#8217;re clearly more likely to get a click than a disabled image block. Do you think &#8216;unbeatable offer image&#8217; or &#8216;disable image blocking&#8217; would perform better? Which will provide better long term click through for future email campaigns?</li>
<li>As ever &#8211; experiment, measure and experiment again.</li>
</ul>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.geakeit.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.geakeit.co.uk/2010/06/24/alt-tags-for-marketing-emails-think-strategically/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Location Aware Applications, THE big thing for 2010.</title>
		<link>http://www.geakeit.co.uk/2010/01/19/location-aware-applications-the-big-thing-for-2010/</link>
		<comments>http://www.geakeit.co.uk/2010/01/19/location-aware-applications-the-big-thing-for-2010/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 22:45:04 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[location aware application]]></category>

		<guid isPermaLink="false">http://www.geakeit.co.uk/?p=96</guid>
		<description><![CDATA[Just a short entry this time, pointing at a recent article on Location Aware Applications printed in CXO magazine and also available online. Hope you enjoy it, 64 Diggs so far!]]></description>
			<content:encoded><![CDATA[<p>Just a short entry this time, pointing at an article I recently wrote on <a href="http://www.cxo.eu.com/editors-blog/location-aware-applications/">Location Aware Applications</a> printed in CXO magazine and also available online.</p>
<p>Hope you enjoy it, 64 Diggs so far!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geakeit.co.uk/2010/01/19/location-aware-applications-the-big-thing-for-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting email authentication methods DKIM, Domain Keys, SenderID and SPF working on a Microsoft Exchange Server</title>
		<link>http://www.geakeit.co.uk/2010/01/14/getting-the-email-authentication-methods-dkim-domain-keys-senderid-and-spf-working-on-a-microsoft-exchange-server/</link>
		<comments>http://www.geakeit.co.uk/2010/01/14/getting-the-email-authentication-methods-dkim-domain-keys-senderid-and-spf-working-on-a-microsoft-exchange-server/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 22:21:38 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DKIM]]></category>
		<category><![CDATA[DomainKeys]]></category>
		<category><![CDATA[Exchange]]></category>
		<category><![CDATA[SenderID]]></category>
		<category><![CDATA[SPF]]></category>

		<guid isPermaLink="false">http://www.geakeit.co.uk/?p=91</guid>
		<description><![CDATA[If you&#8217;re sending marketing emails then you&#8217;ll naturally want to do everything you can to get those emails into people&#8217;s inboxes. Sending emails used to be simple however then came the fraudsters and so in the interests of security, email verification and authentication technologies were introduced. These are Domain Keys, DKIM, SPF and SenderID. Enabling [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re sending marketing emails then you&#8217;ll naturally want to do everything you can to get those emails into people&#8217;s inboxes.</p>
<p>Sending emails used to be simple however then came the fraudsters and so in the interests of security, email verification and authentication technologies were introduced. These are Domain Keys, DKIM, SPF and SenderID.</p>
<p>Enabling these authentication methods is a significant and important step in helping our marketing emails hit peoples inboxes. See <a href="http://www.mailchimp.com/page/authentication/">MailChimp&#8217;s</a> page for a demonstration of how many significant domains rely on these different authentication schemes to verify email senders. It&#8217;s a great article.</p>
<p><em>So, lets start with SPF and SenderID&#8230;</em></p>
<p>Firstly, skipping the long explanation, they&#8217;re 99% the same. Very basically, when a recipient reads an email from yourdomain.com it cross references the originating IP with yourdomain.com&#8217;s DNS server to verify that the email server&#8217;s IP is allowed to send emails. Simple.</p>
<p>To get this working go to <a href="http://old.openspf.org/wizard.html?mydomain=example.com&amp;submit=Go!">http://www.openspf.org</a> and complete their SPF record creation wizard. You&#8217;ll end up with something looking like&#8230;</p>
<pre>"v=spf1 ~all"</pre>
<p>Email this to the company that looks after your domain and ask them to add it to your DNS server as a text record. SPF &#8211; done.</p>
<p><em>Moving on to Domain Keys and DKIM&#8230;</em></p>
<p>These are again very similar but differ from SPF/SenderID in that rather than simply verify sending rights, they dig a little deeper.</p>
<p>When sending the email, the email server attaches an encrypted digital signature to its header. The recipient then processes this signature by cross referencing it to a text record held on yourdomain.com&#8217;s DNS server. Hence the recipient can again verify that the server sending the emails is genuine and legitimate, a little more securely.</p>
<p><em>So, getting it to work in Exchange&#8230;</em></p>
<p>Exchange doesn&#8217;t actually support DKIM or Domain Keys so you need to buy an after market software package. <a href="http://www.emailarchitect.net/">AdminSystem</a> sell it, and it&#8217;s a not-so-cheap $799 for the Enterprise version (allows a number of servers to use it for the same domain). It supports not only Exchange but also IIS SMTP server so you can use it in several environments. <a href="http://www.emailarchitect.net/domainkeys/">The product is here</a> and called (aptly) &#8220;EA DomainKeys/DKIM for IIS SMTP Service and Exchange Server&#8221;. It may look like an amateur website selling a fake product but it really works!</p>
<p>Installation is simple: download the MSI, install it, restart and voila&#8230;almost. Mid way through you need to create the DNS record and luckily for all of us there&#8217;s a video on youtube explaining exactly how you do this. <a href="http://www.youtube.com/watch?v=98oc_5bjjkc">It&#8217;s here</a>, try to ignore the terrible music in the background. There&#8217;s also almost a minute of pointless pause at the end so be prepared to ignore it.</p>
<p>Once you have the text record you&#8217;ll again need to send this on to your DNS host for them to add to youdomain.com.</p>
<p>Lastly we need to test!</p>
<p>For Domain Keys/DKIM, send go to <a href="http://www.mailradar.com/domainkeys/">Mail Radar</a> and send an email to the randomly generated address at the bottom. After a few seconds click view results for verification.</p>
<p>For SPF/SenderID we don&#8217;t even need to bother sending an email, just go to <a href="http://www.politemail.com/check-spf.aspx">PoliteMail</a> and type in your email address. PoliteMail will then verify the SPF record.</p>
<p>Bingo! DKIM, Domain Keys, SPF and SenderID all on an Exchange Server!</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.geakeit.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.geakeit.co.uk/2010/01/14/getting-the-email-authentication-methods-dkim-domain-keys-senderid-and-spf-working-on-a-microsoft-exchange-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Coding HTML Emails to look consistent in all email clients</title>
		<link>http://www.geakeit.co.uk/2010/01/05/creating-html-marketing-emails-that-look-the-same-in-all-email-clients/</link>
		<comments>http://www.geakeit.co.uk/2010/01/05/creating-html-marketing-emails-that-look-the-same-in-all-email-clients/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 23:56:19 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[eCommerce]]></category>
		<category><![CDATA[html email; html; ecommerce; css; table; email marketing]]></category>

		<guid isPermaLink="false">http://www.geakeit.co.uk/?p=68</guid>
		<description><![CDATA[FYI, before you read this post, you&#8217;ll need to know some HTML!&#8230; Designing and coding an HTML email is not like designing a simple web page. Ok so they&#8217;re both coded in HTML but the approach is entirely different. HTML emails could potentially be viewed in many different email clients &#8211; Outlook, Outlook Express, Windows [...]]]></description>
			<content:encoded><![CDATA[<p><em>FYI, before you read this post, you&#8217;ll need to know some HTML!&#8230;</em></p>
<p>Designing and coding an HTML email is not like designing a simple web page.</p>
<p>Ok so they&#8217;re both coded in HTML but the approach is entirely different.  HTML emails could potentially be viewed in many different email clients &#8211; Outlook, Outlook Express, Windows Mail, Mac Mail, Eudora&#8230;the list goes on not forgetting the hundreds of online services like Hotmail, Yahoo Mail and Google Mail. All these clients and webmail services have their own little quirks which when compiled and compared means coding with any kind of modern techniques is near impossible&#8230;</p>
<ul>
<li><span style="color: #000000;">CSS in the &lt;head&gt;? <em>Forget it.</em></span></li>
<li><span style="color: #000000;">CSS at all?! <em>Dodgy ground.<br />
</em></span></li>
<li><span style="color: #000000;"> JavaScript? <em>Goodness no. </em></span></li>
<li><span style="color: #000000;">Floating &lt;div&gt; elements? <em>Are you serious?!</em></span></li>
<li><span style="color: #000000;">&lt;div&gt; elements? <em>I wouldn&#8217;t&#8230;</em><br />
</span></li>
</ul>
<p>Outlook 2007 is what many cite as being a frustrating turning point in email client HTML rendering when Microsoft chose to switch the rendering engine from Internet Explorer (as it was in Outlook 2003) to Word 2007. Thus HTML rendering was crippled. Microsoft can&#8217;t take all the blame though, Google Mail refuses to interpret externally linked stylesheets and ignores numerous seemingly random inline CSS properties.</p>
<p>For a depressing comparison of Outlook 2010&#8242;s attempt to render to the same level as Outlook 2000 see below&#8230;</p>
<div id="attachment_88" class="wp-caption aligncenter" style="width: 540px"><img class="size-full wp-image-88" title="Outlook 2000 vs Outlook 2010" src="http://www.geakeit.co.uk/wp-content/uploads/2010/01/outlook2000-vs-2010-3.jpg" alt="Outlook 2000 vs Outlook 2010" width="530" height="400" /><p class="wp-caption-text">Outlook 2000 vs Outlook 2010</p></div>
<p>&#8230;this was, according to Microsoft, due to security concerns.</p>
<p>So, the question is&#8230;</p>
<p><em><strong>How can we design marketing emails that look great in all email clients, webmail and offline?</strong></em></p>
<p>Surprisingly, you&#8217;ve gotta code like it&#8217;s the year 2000, back when flashing text looked great and play.com was called play247.com (<a href="http://web.archive.org/web/20000301125522/http://www.play247.com/">and looked like this</a>).  This means &lt;table&gt; elements with all their dated and inflexible &lt;tbody&gt;, &lt;tr&gt; and &lt;td&gt; delights. Those dark times when web designers would need to use &lt;rowspan&gt; and &lt;colspan&gt; to create a grid of elements that couldn&#8217;t overlap.</p>
<p>My best practise tip is to physically draw a rough content grid for the email by pencil. As an example, below is an M&amp;S email from January 2009.</p>
<div id="attachment_69" class="wp-caption aligncenter" style="width: 318px"><img class="size-full wp-image-69" title="M&amp;S Marketing Email Jan 2009" src="http://www.geakeit.co.uk/wp-content/uploads/2010/01/mandsemail.jpg" alt="M&amp;S Marketing Email Jan 2009" width="308" height="510" /><p class="wp-caption-text">M&amp;S Marketing Email Jan 2009</p></div>
<p>The images are likely designed and sliced in Photoshop for convenience. Here&#8217;s an approximate HTML table grid&#8230;</p>
<div id="attachment_72" class="wp-caption aligncenter" style="width: 318px"><img class="size-full wp-image-72" title="HTML Layout Grid of M&amp;S Email" src="http://www.geakeit.co.uk/wp-content/uploads/2010/01/emailfade2.jpg" alt="HTML Layout Grid of M&amp;S Email" width="308" height="510" /><p class="wp-caption-text">HTML Layout Grid of M&amp;S Email</p></div>
<p>Different tables are shown as different colours, with the white background representing a parent table. Each row is a separate &lt;tr&gt; and each cell is a table element &lt;td&gt;. COLSPAN is used to force a table cell to bridge two or more columns and ROWSPAN to force a table cell to bridge two or more rows. I&#8217;ve labelled the colspan attribute as &#8216;<strong>cols</strong>&#8216; due to shortage of space.</p>
<p>This email can basically be pseudo-html-coded as&#8230;</p>
<pre>&lt;table&gt;
 &lt;table&gt;...table-elements...&lt;/table&gt;
 &lt;table&gt;...table-elements...&lt;/table&gt;
 &lt;table&gt;...table-elements...&lt;/table&gt;
&lt;/table&gt;</pre>
<p>For a full tutorial carrying all details of how to build HTML tables as seen in this email I&#8217;d recommend this <a href="http://personalweb.about.com/od/tables/ss/02tables.htm">about.com tutorial</a>. I would demo-code it myself, but it&#8217;s not even necessary as the full M&amp;S email and source code is available <a href="http://www2.marksandspencer.com/emails/090115_1a.htm">here</a>.</p>
<p>Once you create an HTML file with tables, table rows and table cells ensure you declare each table&#8217;s width and height where possible. It&#8217;s best to fill each cell with an &lt;img /&gt; and then link that image, otherwise it&#8217;s a potential wasted click i.e&#8230;</p>
<pre><span style="color: #ff0000;">&lt;td&gt;</span><span style="color: #0000ff;">&lt;a href="&lt;link&gt;"&gt;</span><span style="color: #008000;">&lt;img src="&lt;img-link&gt;" height="100" width="100" border="0" /&gt;</span><span style="color: #0000ff;">&lt;/a&gt;</span><span style="color: #ff0000;">&lt;/td&gt;</span></pre>
<p>Note: Always declare the image&#8217;s height and width in an &lt;img /&gt; tag. That way when the email lands in someones inbox the email actually looks readable/presentable before they click to &#8216;Allow Image Downloads&#8217;.</p>
<p>Generally, try to use solid background colours where possible as simple colours are better supported amongst email clients than background images. For cells where you want a background image and text content then use the background attribute. For example&#8230;</p>
<pre><span style="color: #888888;">&lt;td height="100" width="100" background="&lt;url&gt;"&gt;</span></pre>
<p>This will enable the background to be viewable in all most webmail providers. Using an inline style may not (Google Mail). In fact because support is so patchy avoid using inline styles as much as possible.</p>
<p>When formatting text don&#8217;t use inline CSS styles, instead use the ancient &lt;font&gt; tag e.g.</p>
<pre><span style="color: #888888;">&lt;font face="verdana" size="1"&gt;<span style="color: #ff0000;">Here is some Text</span>&lt;/font&gt;</span></pre>
<p>If you use Google Analytics then you&#8217;ll have a good idea which font your customers have from their declared operating systems. As with all web design it doesn&#8217;t make sense to put your entire email in &#8216;Arial&#8217; if 90% of browsers use Mac OSX.  It&#8217;s best to use a decent amount of body text to give spam filter&#8217;s the best chance of judging your marketing email as not being spam.</p>
<p>Generally, once you create a table/row/cell/sub-table/sub-table row/sub-table cell structure and fill it with linked/unlinked images and text then really there&#8217;s nothing else to it. Active content like videos are very poorly supported indeed and like I mentioned before JavaScript is a complete no-go.</p>
<p>For detailed and accessible documentation of which email clients/webmail providers support certain HTML/CSS properties then take a look at the <a href="http://www.email-standards.org/">Email Standards Project</a>. It clearly demonstrates that whilst many web designers are thoroughly fed up with having to code for IE6, many email clients are just as patchy and awkward.</p>
<p>Once happy with your layout, design, and text then before you send anything it&#8217;s important to <span style="color: #ff0000;">TEST, TEST, TEST</span> and see how it looks in as many email clients as possible. You could try <a href="http://litmusapp.com/">Litmus</a>, an absolutely fantastic service that lets you see how your email will render in a majority of the major clients/webmail services. It costs $50 a month but it&#8217;s worth it.</p>
<p>For those of you that don&#8217;t want to pay for seeing how your emails will look in different clients then take a look at <a href="http://www.emailonacid.com/">Email on Acid</a>. It doesn&#8217;t have as many options or clients as Litmus and may be a little patchy on result consistency but it&#8217;s still great for a free service.</p>
<p>So to summarise here are the important things to do when when creating an HTML marketing email&#8230;</p>
<ul>
<li>Design the email as a grid by pencil first and try to keep the width to 700 pixels or less. Ideally 600 or less, the M&amp;S one above was only 580px wide.</li>
<li>Code the email as a series of HTML tables and sub-tables. Avoid CSS. If CSS is a must then cross check the Email Standards Project with your house file for recipient compatibility. Test Test &amp; Retest.</li>
<li>Use Photoshop and the slicing technique to create the images and have them fit your table layout exactly.</li>
<li>Use COLSPAN to get a table cell to bridge two or more columns and ROWSPAN to get a table cell to bridge two or more rows.</li>
<li>An image without a link is a wasted opportunity.</li>
<li>Try to get a decent amount of text into the email so spam filters have an easier time passing it.</li>
<li>Use &lt;font&gt; for text styling rather than CSS.</li>
<li>Test Test Test your emails with Litmus or Email on Acid.</li>
<li>Setting hex color values without a # symbol causes issues in IE based rendering environments (Outlook Express, Outlook 2003 etc). <em>Thanks go to @dkurzius for that one!</em></li>
<li>NEVER send an email from one domain and have all the links pointing at another domain. That&#8217;s what the spam filters want you to do!</li>
</ul>
<h2>Update: 14/01/2009</h2>
<p><span style="text-decoration: underline;"><em>Email on Acid is nolonger free <img src='http://www.geakeit.co.uk/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  </em></span></p>
<p>However, it&#8217;s only $13 a month and so far better value for money than Litmus (who have been having some issues recently with webmail rendering). As such I&#8217;ve cancelled my subscription with Litmus. Sorry but EON is <em>way</em> faster and cheaper.</p>
<p style="text-align: center;">
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.geakeit.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.geakeit.co.uk/2010/01/05/creating-html-marketing-emails-that-look-the-same-in-all-email-clients/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Removing pesky double spaces from within strings in Microsoft SQL Server (TSQL)</title>
		<link>http://www.geakeit.co.uk/2009/12/26/remove-double-spaces-from-strings-in-microsoft-sql-server-tsql/</link>
		<comments>http://www.geakeit.co.uk/2009/12/26/remove-double-spaces-from-strings-in-microsoft-sql-server-tsql/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 19:15:45 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[double spaces]]></category>
		<category><![CDATA[Microsoft SQL Server]]></category>
		<category><![CDATA[strings]]></category>

		<guid isPermaLink="false">http://www.geakeit.co.uk/?p=50</guid>
		<description><![CDATA[Removing double spaces in MS SQL Server strings]]></description>
			<content:encoded><![CDATA[<h3>The Problem</h3>
<p>Double spaces in strings is a real pain. For those who can&#8217;t picture it see the example below&#8230;</p>
<p>A particular column in a row is declared as some kind of string (char etc) and the data one wants to store is something like:</p>
<pre>'John Smith'</pre>
<p>But due to a data entry/import error the following gets stored:</p>
<pre>'John  Smith'</pre>
<p>&#8230;or worse still&#8230;</p>
<pre>'John    Smith'</pre>
<p>This issue can be a real pain, especially when the data&#8217;s being used for marketing purposes. Nobody likes to receive postal mailings, especially when it&#8217;s addressed to &#8216;Mr John   Smith&#8217;.</p>
<h3>The Solution</h3>
<p>Firstly, the obvious will not work across all versions of SQL Server (notably 2000)&#8230;</p>
<pre>select * from table where string like '%  %'</pre>
<p>SQL 2000 and maybe 2003 will return every row with a single and double space. So instead we have to use the following&#8230;</p>
<pre>select * from table where string &lt;&gt; replace(replace(replace(string,' ','&lt;&gt;'),'&gt;&lt;',''),'&lt;&gt;',' ')</pre>
<p>That will list all the rows with double spaces in column &#8216;string&#8217; in table &#8216;table&#8217;. So to update the string and remove those bloomin double spaces run the following query&#8230;</p>
<pre>update table set string = replace(replace(replace(string,' ','&lt;&gt;'),'&gt;&lt;',''),'&lt;&gt;',' ')</pre>
<p>Bingo!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geakeit.co.uk/2009/12/26/remove-double-spaces-from-strings-in-microsoft-sql-server-tsql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting HTTP gzip compression working in IIS6</title>
		<link>http://www.geakeit.co.uk/2009/11/22/how-to-get-httpgzip-compression-working-in-iis6/</link>
		<comments>http://www.geakeit.co.uk/2009/11/22/how-to-get-httpgzip-compression-working-in-iis6/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 10:47:24 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[IIS]]></category>

		<guid isPermaLink="false">http://www.geakeit.co.uk/?p=39</guid>
		<description><![CDATA[Text files transferred by HTTP such as css, html, javascript etc are highly compressible – by their nature they can be compressed to a fraction of their original size quickly without much webserver CPU load.]]></description>
			<content:encoded><![CDATA[<p><em><span style="text-decoration: underline;">What is HTTP compression?</span></em></p>
<p>Text files transferred by HTTP such as css, html, javascript etc are highly compressible – by their nature they can be compressed to a fraction of their original size quickly without much webserver CPU load.</p>
<p>IIS can perform this compression on your <strong>original uncompressed </strong>css/html/javascript source files and transfer the compressed content to people&#8217;s web browsers. Their browsers then expand the compressed files whilst browsing saving a great deal of bandwidth/download time. Important to note is that the people browsing are never aware that they’re browsing a compressed website.</p>
<p><em><span style="text-decoration: underline;">Should I bother?</span></em></p>
<p><a href="http://www.brightminds.co.uk">Brightminds.co.uk</a> homepage download size shrank from 660KB to less than 400KB. This saving however includes image downloads and the real compression saving takes the page weight from <a href="http://www.whatsmyip.org/http_compression/?url=aHR0cDovL3d3dy5icmlnaHRtaW5kcy5jby51aw==">77KB down to only 12KB</a>. Thus less than a sixth of the page size is downloaded by a browser at a tiny CPU load cost. <em>End result?</em> Since expanding the page on the user’s browser requires practically no CPU load, everyone’s browsing experience is significantly faster. <em>But what about the webserver CPU cost?</em> It’s far smaller than the CPU cost of uploading a further 64KB to the user.</p>
<blockquote><p><strong><em><span style="text-decoration: underline;">The Bottom Line</span></em></strong> – HTTP compression is free and quick to enable. If you’re not using HTTP compression, you’re compromising your reader’s/customer&#8217;s experience and burning bandwidth.</p></blockquote>
<p><em><span style="text-decoration: underline;">Lets enable it!&#8230;</span></em></p>
<p>There’s a great deal of conflicting articles on the web about how to enable compression correctly in IIS6. Some say that you will need to edit the metabase whilst others say a simple cscript will do all. I’ve found you’ll need to do both and I’ll outline how below…</p>
<p>Make a backup of your existing IIS6 configuration by opening Computer Management, expanding IIS and then right clicking on it to All tasks – Backup/restore configuration.</p>
<div id="attachment_40" class="wp-caption aligncenter" style="width: 310px"><img class="size-full wp-image-40" title="Backing up IIS configuration" src="http://www.geakeit.co.uk/wp-content/uploads/2009/11/saveconfig.jpg" alt="Backing up IIS configuration" width="300" height="119" /><p class="wp-caption-text">Backing up IIS configuration</p></div>
<p>Click on Web Service Extensions within IIS, right click and select to add a new web service or extension. Call it HTTP Compression and add %systemroot%\System32\inetsrv\<em>gzip</em>.<em>dll </em><em>as a required file.</em><em> Select to allow the extension and click OK.</em></p>
<div id="attachment_41" class="wp-caption aligncenter" style="width: 310px"><img class="size-full wp-image-41" title="New IIS Service or Extension" src="http://www.geakeit.co.uk/wp-content/uploads/2009/11/new-service.jpg" alt="New IIS Service or Extension" width="300" height="175" /><p class="wp-caption-text">New IIS Service or Extension</p></div>
<p>Within IIS right click on ‘Websites’ and go to Properties. Click on the Service tab and tick the box to ‘Compress application files’ (this will compress files sent with the extensions .asp, .aspx etc) and also tick the box to ‘Compress static files’ (compressing .html, .css etc).</p>
<div id="attachment_42" class="wp-caption aligncenter" style="width: 310px"><img class="size-full wp-image-42" title="Enabling Compression in IIS6" src="http://www.geakeit.co.uk/wp-content/uploads/2009/11/websiteprops.jpg" alt="Enabling Compression in IIS6" width="300" height="291" /><p class="wp-caption-text">Enabling Compression in IIS6</p></div>
<p>If you want to specify a different directory to store the temporary files to then do. Specify a storage limit, although brightminds.co.uk have up to 250,000 compressible hits a day I’ve never seen the compression directory exceed a few MB. 1GB will be more than enough. Click OK.</p>
<p>Now we need to specify which file types are compressed by IIS. Individually copy, paste and run the following commands into the Run box.</p>
<pre>cscript c:\Inetpub\AdminScripts\adsutil.vbs SET W3SVC/Filters/Compression/deflate/HcFileExtensions htm html txt css js</pre>
<pre>cscript c:\Inetpub\AdminScripts\adsutil.vbs SET W3SVC/Filters/Compression/gzip/HcFileExtensions htm html txt css js</pre>
<pre>cscript c:\Inetpub\AdminScripts\adsutil.vbs SET W3SVC/Filters/Compression/deflate/HcScriptFileExtensions asp dll exe aspx asmx php</pre>
<pre>cscript c:\Inetpub\AdminScripts\adsutil.vbs SET W3SVC/Filters/Compression/gzip/HcScriptFileExtensions asp dll exe aspx asmx php</pre>
<p>These commands enable the compression formats <em>deflate</em> and <em>gzip</em> for the specified file types. So for example the last command enables gzip compression for files with the extensions .asp, .dll, .exe, .aspx, .asmx and .php. You may ask why not compress .jpg image types and indeed all web content. Simple answer &#8211; text files compress quickly and exceedingly well, images/videos etc don’t.</p>
<p>Right click on IIS again in Computer Management and stop all IIS services.</p>
<p>Now Run the following command from the Run box to edit the IIS Metabase…</p>
<pre>Notepad %systemroot%\system32\inetserv\metabase.xml</pre>
<div id="attachment_43" class="wp-caption aligncenter" style="width: 310px"><img class="size-full wp-image-43" title="Editing the IIS Metabase" src="http://www.geakeit.co.uk/wp-content/uploads/2009/11/text.gif" alt="Editing the IIS Metabase" width="300" height="280" /><p class="wp-caption-text">Editing the IIS Metabase</p></div>
<p>Find/search for the line that contains the following tag – ‘&lt;IIsCompressionScheme’. There should be two of them, one referring to <em>gzip</em> and another for <em>deflate </em>(the two compression methods). HcFileExtensions should state the static file extensions we want to compress – htm, html, txt, css and js. Likewise HcScriptFileExtensions should state the dynamic file extensions to be compressed – asp, dll, exe, aspx, asmx and php.</p>
<p>What we need to do is edit HcDynamicCompressionLevel=&#8221;0&#8243; for both <em>gzip</em> and <em>deflate</em> to be HcDynamicCompressionLevel=&#8221;9&#8243;. This defines the compression level on a scale between 0 and 10. 0 doesn’t compress and 10 uses far too much CPU load compressing, 9 is generally the best option.</p>
<p>Double check you have changed HcDynamicCompressionLevel for both <em>gzip</em> and <em>deflate</em> and save the file changes (File &gt; Save).</p>
<p>Again in Computer Management Right click on IIS Computer Management and start all IIS services.</p>
<p>Your IIS web server should now be serving a compressed website. Double check it by entering your domain into <a href="http://www.whatsmyip.org/http_compression/">http://www.whatsmyip.org/http_compression/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geakeit.co.uk/2009/11/22/how-to-get-httpgzip-compression-working-in-iis6/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Installing SQL Server 2005 on Windows 7 (x32 &amp; x64)</title>
		<link>http://www.geakeit.co.uk/2009/11/13/installing-sql-server-2005-on-windows-7-x32-x64/</link>
		<comments>http://www.geakeit.co.uk/2009/11/13/installing-sql-server-2005-on-windows-7-x32-x64/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 09:31:37 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://www.geakeit.co.uk/?p=34</guid>
		<description><![CDATA[No errors, just a fully working SQL Server on Windows 7.]]></description>
			<content:encoded><![CDATA[<p>SQL Server 2005 came out long before Windows 7 and (largely due to UAC) they don&#8217;t actually get on out of the box. Symptoms include prerequisite warnings about IIS7, getting an abrupt error when you finish the installation and although the SQL server service may start SQL Management Studio will not. This is simply what you need to do to get a working SQL Server 2005 including SQL Management Studio on Windows 7.</p>
<p>Download and install the latest x32/x64 <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d09c1d60-a13c-4479-9b91-9e8b9d835cdc&amp;displaylang=en">SQL native client</a><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d09c1d60-a13c-4479-9b91-9e8b9d835cdc&amp;displaylang=en"></a>.</p>
<p>Install SQL Server 2005 from your installation media and ensure that towards the end you select to NOT start the SQL service. Personally since I use SQL Server 2005 on my workstation as a test environment I’m happy assign it the Local System account.</p>
<p>Download and install <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ae7387c3-348c-4faa-8ae5-949fdfbe59c4&amp;displaylang=en">SQL Server 2005 SP3</a>&#8230;and just before it finishes installing you’ll see something like this…</p>
<div id="attachment_35" class="wp-caption aligncenter" style="width: 310px"><img class="size-full wp-image-35" title="SQL Server 2005 User Provisioning Tool for Vista" src="http://www.geakeit.co.uk/wp-content/uploads/2009/11/sql.png" alt="SQL Server 2005 User Provisioning Tool for Vista" width="300" height="209" /><p class="wp-caption-text">SQL Server 2005 User Provisioning Tool for Vista</p></div>
<p>This is the SQL Server 2005 User Provisioning Tool for Vista and it lets you know that admin users on the Vista workstation (Windows 7 in our case) will not have admin rights in SQL Server unless explicitly stated. Close it for now since because the SQL service is not running, any new users will not be saved. The SP3 installation will now finish, abruptly.</p>
<p>Reboot your workstation to allow the SQL services to start.</p>
<p>From the start menu run the ‘SQL Server 2005 Surface Area Configuration’ tool. Select the &#8220;Add New Administrator&#8221; link and select which users you wish to assign access to. There is no confirmation, the dialog just goes away without any error messages.</p>
<p>Start SQL Management Studio and you’ll now be able to login. No errors, just a fully working SQL Server on Windows 7 <img src='http://www.geakeit.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.geakeit.co.uk/2009/11/13/installing-sql-server-2005-on-windows-7-x32-x64/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
