<?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>ScottDotDot </title>
	<atom:link href="http://s.co.tt/tag/email/feed/" rel="self" type="application/rss+xml" />
	<link>http://s.co.tt</link>
	<description>Babblings of a computer curmudgeon.</description>
	<lastBuildDate>Mon, 26 Jan 2026 16:08:52 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.1</generator>
	<item>
		<title>JetBlue: Password Encryption is for Suckers</title>
		<link>http://s.co.tt/2016/02/20/jetblue-password-encryption-is-for-suckers/</link>
		<comments>http://s.co.tt/2016/02/20/jetblue-password-encryption-is-for-suckers/#comments</comments>
		<pubDate>Sat, 20 Feb 2016 19:42:41 +0000</pubDate>
		<dc:creator><![CDATA[Scott]]></dc:creator>
				<category><![CDATA[Rants]]></category>
		<category><![CDATA[angry rant]]></category>
		<category><![CDATA[computer]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[internet security]]></category>
		<category><![CDATA[JetBlue]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[stupid corporations]]></category>

		<guid isPermaLink="false">http://s.co.tt/?p=1441</guid>
		<description><![CDATA[The Background The Missus and I flew to Florida a couple of days ago, and as usual we took JetBlue. The only eventful part of the flight was a pleasant arrival 30 minutes ahead of schedule. The flight crew had mentioned that the satellite TV was out of commission, and that all in-flight movies would be free for the duration. I thought that was a good way of handling the issue, and figured that was the end of that. However, the next day we both received emails from JetBlue stating that we&#8217;d been signed up for their Travel Bank, and that a $15 credit had been applied to both of our Banks in exchange for the inconvenience of the malfunctioning … <a class="continue-reading-link" href="http://s.co.tt/2016/02/20/jetblue-password-encryption-is-for-suckers/"> Continue reading</a>]]></description>
				<content:encoded><![CDATA[<p><center><img src="http://s.co.tt.kisocdnb.net/wp-content/uploads/2016/02/JetBlue-Encryption-is-for-Suckers-740x309.jpg" alt="JetBlue: Encryption is for Suckers" width="740" height="309" class="aligncenter size-large wp-image-1446" /></center></p>
<h2>The Background</h2>
<p>The Missus and I flew to Florida a couple of days ago, and as usual we took JetBlue.  The only eventful part of the flight was a pleasant arrival <strong>30 minutes ahead of schedule</strong>.  The flight crew had mentioned that the satellite TV was out of commission, and that <strong>all in-flight movies would be free for the duration</strong>.</p>
<p>I thought that was a good way of handling the issue, and figured that was the end of that.</p>
<p>However, the next day we both received emails from JetBlue stating that we&#8217;d been signed up for their Travel Bank, and that <strong>a $15 credit had been applied to both of our Banks</strong> in exchange for the inconvenience of the malfunctioning TV service!  That kind of proactive customer service is fantastic, and one of the main reasons that we fly JetBlue.</p>
<blockquote><p>
Hello SCOTT </p>
<p>Thank you for choosing JetBlue.</p>
<p>The following credit has been applied to your Travel Bank account number: XXXXXXXXXXXXXXXXXX  <em><sup>(Ed. Note: Account # redacted)</sup></em></p>
<p>Service Credit: InFlight Entertainment 15.00</p>
<p>We‘re sorry that DIRECTV® service didn’t work during your flight—we know this is one of the many reasons our customers choose to fly with JetBlue. Please accept our sincere apologies and this flight credit for the inconvenience you recently experienced with us.</p>
<p>This credit, which expires 365 days from the date it is issued, is available for use on future travel with JetBlue and is non-transferable.</p>
<p>To book a flight using your Travel Bank credit, visit jetblue.com and choose Travel Bank as your form of payment.</p>
<p>You can check the balance and transactions of your Travel Bank account by clicking here. For more information about Travel Bank and your credits, please visit jetblue.com/help/travelbank. We thank you for your understanding and look forward to a future opportunity to welcome you onboard.</p>
<p>Sincerely,</p>
<p>JetBlue Airways
</p></blockquote>
<h2>Plain-Text Passwords</h2>
<p>Here&#8217;s where the story turns dark, <strong>at least from a security perspective</strong>:  Because this Travel Bank was a new service for both of us, and because JetBlue likewise had to create accounts for us, they sent us a password to get started.</p>
<p>Unlike &#8212; oh, I don&#8217;t know &#8212; <strong>every other website in the world</strong>, they didn&#8217;t send us randomly generated passwords.  No.</p>
<p><strong>THEY RE-USED OUR OUR TRUE BLUE ACCOUNT PASSWORDS, AND SENT THEM TO US IN PLAIN TEXT.</strong></p>
<p></p>
<div id="attachment_1444" style="width: 750px" class="wp-caption aligncenter"><a href="http://s.co.tt.kisocdnb.net/wp-content/uploads/2016/02/JetBlue-Travel-Bank-Password.jpg"><img src="http://s.co.tt.kisocdnb.net/wp-content/uploads/2016/02/JetBlue-Travel-Bank-Password-740x658.jpg" alt="JetBlue Travel Bank Password in Plain Text" width="740" height="658" class="size-large wp-image-1444" /></a><p class="wp-caption-text">Click on this image for the full-size version.</p></div>
<p>This is a big deal for three reasons, the last of which is maybe a little less than obvious to most:</p>
<p><strong>When emails are transmitted across the internet they are generally not encrypted.</strong>  This means that your password would be visible to any server or router between JetBlue and your email service.  It might be stored, intercepted, or otherwise snooped at any point along the journey.</p>
<p>Perhaps more importantly, <strong>anyone that gained access to your email account would know your password</strong>.  That may seem unlikely (after all, you probably don&#8217;t have a crack team of international hackers trailing your every move), but anyone that happened across your phone could see the password.</p>
<p>If that doesn&#8217;t sound important, then in my opinion this last point is the worst faux pas of all.  Wait, it&#8217;s not a faux pas.  It&#8217;s more an act of pure ignorance and/or negligence:  <strong>It&#8217;s obvious that JetBlue is storing your password in plain text, or at the very least with reversible encryption.</strong></p>
<p>This means that, were hackers to get access to JetBlue&#8217;s user account database (unlike you, JetBlue may indeed be targeted by their friendly neighborhood team of international hackers), they could see your password.</p>
<p><strong>And you may store your credit card info in your True Blue account.</strong>  If so, anyone with access to your account could book flights to your card.  Moreover, how secure is your card number if your password isn&#8217;t properly secured?  That&#8217;s the kind of question I shouldn&#8217;t have to ask of &#8220;New York&#8217;s favorite airline&#8221;.</p>
<p><strong>And I&#8217;m betting that you use that same True Blue password for at least one of your other accounts</strong>, perhaps even something critical like your banking or credit card accounts.</p>
<h2>Change your Password</h2>
<p>The moral of this story is that <strong>you should change your password</strong>.  Not just with JetBlue, but <strong>make sure you use a different password for JetBlue than any of your other accounts</strong>.</p>
<p>Actually, it&#8217;s a best practice to use different passwords for each of your online accounts.  Realistically that can be a huge pain in the ass, so even I don&#8217;t do it 100% of the time.</p>
<p>The moral of the story for JetBlue:  <strong>For the love of internet security, use non-reversible encryption to protect our account information!</strong>  You should never be able to know my password.  That principle comes straight out of a community college Web Design 101 course, and you&#8217;re an international airline!</p>
]]></content:encoded>
			<wfw:commentRss>http://s.co.tt/2016/02/20/jetblue-password-encryption-is-for-suckers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrating Bullhorn with Exchange 2003 Using Journaling and Forwarding</title>
		<link>http://s.co.tt/2014/08/26/integrating-bullhorn-with-exchange-2003-using-journaling-and-forwarding/</link>
		<comments>http://s.co.tt/2014/08/26/integrating-bullhorn-with-exchange-2003-using-journaling-and-forwarding/#comments</comments>
		<pubDate>Wed, 27 Aug 2014 01:59:39 +0000</pubDate>
		<dc:creator><![CDATA[Scott]]></dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Bullhorn]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Exchange Server]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://s.co.tt/blog/?p=829</guid>
		<description><![CDATA[Bullhorn vs. Exchange 2003 One of the companies for which I manage IT uses Bullhorn&#8217;s applicant tracking software for their recruitment workflow. That company also uses the now-ancient Exchange 2003 for their email. But, Bullhorn doesn&#8217;t officially support integration with Exchange 2003. What&#8217;s involved? First off, &#8220;integration&#8221; is a strong word. It implies that our servers will pass information back and forth and stay in some meaningfully synchronized state. That&#8217;s not the goal in this case. The integration simply consists of passing all emails that are sent and received by our recruiters to Bullhorn&#8217;s servers. Once Bullhorn receives the emails, they&#8217;re parsed and can be viewed in the Activity Center and/or under the contact record to which they apply (using … <a class="continue-reading-link" href="http://s.co.tt/2014/08/26/integrating-bullhorn-with-exchange-2003-using-journaling-and-forwarding/"> Continue reading</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://s.co.tt/blog/wp-content/uploads/2014/08/bullhorn_vs_exchange.png"><img src="http://s.co.tt.kisocdnb.net/blog/wp-content/uploads/2014/08/bullhorn_vs_exchange.png" alt="Bullhorn vs. Exchange" title="Bullhorn vs. Exchange" width="620" height="334" class="aligncenter size-full wp-image-845" /></a></p>
<h3>Bullhorn vs. Exchange 2003</h3>
<p>One of the companies for which I manage IT uses Bullhorn&#8217;s applicant tracking software for their recruitment workflow.</p>
<p>That company also uses the now-ancient Exchange 2003 for their email.</p>
<p>But, <strong>Bullhorn doesn&#8217;t officially support integration with Exchange 2003</strong>.</p>
<h3>What&#8217;s involved?</h3>
<p>First off, &#8220;integration&#8221; is a strong word.  It implies that our servers will pass information back and forth and stay in some meaningfully synchronized state.  That&#8217;s not the goal in this case.  The integration simply consists of passing all emails that are sent and received by our recruiters to Bullhorn&#8217;s servers.</p>
<p>Once Bullhorn receives the emails, they&#8217;re parsed and can be viewed in the Activity Center and/or under the contact record to which they apply (using email address matching).</p>
<h3>Exchange journaling</h3>
<p>The integration path I wanted to take was to use message journaling in Exchange.  In essence this forwards a copy of every single message sent and received on our server to Bullhorn.  There are other more convoluted options, but this seemed to be the most straightforward from a sysadmin perspective.</p>
<p>Unlike later versions, Exchange 2003 doesn&#8217;t support journaling rules.  Those would have allowed me to journal messages that were to/from a particular user or set of users.</p>
<p>Instead Exchange 2003 supports mailbox store-level journaling.  In other words, every email to/from a mailbox on a particular store is &#8220;forwarded&#8221;.  (It&#8217;s technically different than forwarding, but is conceptually similar enough for this discussion, so I&#8217;ll drop the quotes going forward.)</p>
<p>This isn&#8217;t a problem in my case;  Our organization is relatively small, and so it was trivial to move all of my Bullhorn users to one mailbox store, and move some other users out.</p>
<h3>Resources</h3>
<p>I&#8217;m not going to go into depth regarding setting up journaling because there are quite a few good resources available on the subject:</p>
<p><a href="http://www.msexchange.org/articles-tutorials/exchange-server-2003/management-administration/Implementing-Exchange-2003-Message-Journaling.html" target="_blank">MSExchange.org &#8211; Implementing Exchange 2003 Message Journaling</a></p>
<p><a href="http://technet.microsoft.com/en-us/library/bb124953(v=exchg.65).aspx" target="_blank">Microsoft Technet &#8211; How to Deploy Exchange Server 2003 Journaling as Part of a Compliance Solution</a></p>
<p><a href="http://bullhorn.force.com/pkb/articles/Documentation/Enabling-the-Bullhorn-Email-and-Calendar-Integration-with-Microsoft-Exchange" target="_blank"><strong>Bullhorn &#8211; Enabling the Bullhorn Email and Calendar Integration with Microsoft Exchange [2007 through 2013]</strong></a></p>
<p>Google around; You&#8217;ll find a lot more information.</p>
<h3>Create the contacts</h3>
<p>The short of it is that you first need to obtain from Bullhorn your tracker address.  It looks something like this:</p>
<p><strong>&lt;corpname&gt;&lt;.corpID&gt;@slXtracker.bullhornstaffing.com</strong></p>
<p>You&#8217;ll also need tracker addresses for each of your Bullhorn users.  Those look something like this:</p>
<p><strong>&lt;username&gt;@slX.bullhornstaffing.com</strong></p>
<p>In Active Directory Users and Computers create a contact for each of your Bullhorn tracker addresses.  For sanity&#8217;s sake I&#8217;ll make up some examples.</p>
<p>Let&#8217;s say our corporate tracking address is:  </p>
<p><strong>recruitfast.1234@sl1.bullhornstaffing.com</strong></p>
<p>And we have two Bullhorn users, each with these tracker addresses:</p>
<p><strong>Malcolm Reynolds &#8211; mreynolds.rec@sl1.bullhornstaffing.com<br />
Zoe Washburne &#8211; zwashburne.rec@sl1.bullhornstaffing.com</strong></p>
<p>Here&#8217;s what it should look like when you create the corporate tracker contact:</p>
<p><a href="http://s.co.tt/blog/wp-content/uploads/2014/08/bullhorn_integration_create_contact_0.png"><img src="http://s.co.tt.kisocdnb.net/blog/wp-content/uploads/2014/08/bullhorn_integration_create_contact_0.png" alt="Exchange 2003 - Create Contact Dialog 1" title="Exchange 2003 - Create Contact Dialog 1" width="458" height="386" class="aligncenter size-full wp-image-832" /></a></p>
<p>Of course you can give the contact a first and last name that you find to be appropriate.  But that works for me!</p>
<p><a href="http://s.co.tt/blog/wp-content/uploads/2014/08/bullhorn_integration_create_contact_1.png"><img src="http://s.co.tt.kisocdnb.net/blog/wp-content/uploads/2014/08/bullhorn_integration_create_contact_1.png" alt="Exchange 2003 - Create Contact Dialog 2" title="Exchange 2003 - Create Contact Dialog 2" width="451" height="380" class="aligncenter size-full wp-image-831" /></a></p>
<p>Modify the &#8220;E-mail&#8221; field, and add a new &#8220;SMTP Address&#8221; using your corporate tracker email.</p>
<p><a href="http://s.co.tt/blog/wp-content/uploads/2014/08/bullhorn_integration_create_contact_2.png"><img src="http://s.co.tt.kisocdnb.net/blog/wp-content/uploads/2014/08/bullhorn_integration_create_contact_2.png" alt="Exchange 2003 - Create Contact Dialog 3" title="Exchange 2003 - Create Contact Dialog 3" width="412" height="476" class="aligncenter size-full wp-image-830" /></a></p>
<p>Once the contact is created, go back in and edit it.  Under the &#8220;Exchange Advanced&#8221; tab, check the box next to &#8220;Hide from Exchange address lists&#8221;.  This will help prevent users from sending email directly to this address.</p>
<p><em>There are more advanced ways to prevent users from emailing an internal recipient.  Since the risk of that happening is low and I like to have the ability to run tests later by manually sending emails, I haven&#8217;t bothered.</em></p>
<p>Now create contact records for Malcolm and Zoe.  It&#8217;s the same process, though I would name them in this fashion:</p>
<p><strong>Malcolm Reynolds (Bullhorn Tracking)</strong><br />
<strong>Zoe Washburne (Bullhorn Tracking)</strong></p>
<p>By adding &#8220;(Bullhorn Tracking)&#8221; to their last name (or just to the display name) there won&#8217;t be any confusion in the future as to whether you&#8217;re looking at their user account or their contact record.</p>
<p><em>I&#8217;ve been frustrated by this myself:  Depending upon your Active Directory and Exchange environment, it may take some time for the contact records to propagate to your Exchange server(s).  Be patient if you don&#8217;t see them right away.</em></p>
<h3>Enable Journaling</h3>
<p>I&#8217;m assuming that at this point you have all of your Bullhorn users on one mailbox store.  In my example, it&#8217;s going to be &#8220;Mailbox Store 2&#8243;.</p>
<p>In Exchange System Manager (ESM), find the store and open the properties.</p>
<div id="attachment_834" style="width: 310px" class="wp-caption aligncenter"><a href="http://s.co.tt/blog/wp-content/uploads/2014/08/bullhorn_integration_journaling_setup.png"><img src="http://s.co.tt.kisocdnb.net/blog/wp-content/uploads/2014/08/bullhorn_integration_journaling_setup-300x192.png" alt="Bullhorn Integration - Enable Journaling Screen" title="Bullhorn Integration - Enable Journaling Screen" width="300" height="192" class="size-medium wp-image-834" /></a><p class="wp-caption-text">Click on the image for a larger version.</p></div>
<p>Check the box next to &#8220;Archive all messages sent or received by mailboxes on this store&#8221;.  <em>It doesn&#8217;t say &#8220;journaling&#8221; &#8212; why make it easy? &#8212; but in this context the &#8220;archive&#8221; is the journal.</em></p>
<p>Click &#8220;Browse&#8221; and locate your &#8220;Bullhorn Tracker (Corporate)&#8221; contact.  </p>
<p><em>Apologies that in this screenshot I left off the &#8220;(Corporate)&#8221; part.  It&#8217;s the same contact.</em></p>
<p>Hit &#8220;OK&#8221; to set the contact, and then &#8220;OK&#8221; to save the mailbox store properties.</p>
<p><strong>Congratulations!  You&#8217;ve now set up journaling!</strong>  (Pretty easy, huh?)</p>
<h3>But what about envelope journaling?</h3>
<p>Exchange 2007 and above only do envelope journaling.  Exchange 2003 does not have the ability to do envelope journaling by default, and there is no way to enable it in the GUI.  So is that why Bullhorn doesn&#8217;t work with Exchange 2003?</p>
<p><strong>Apparently not.</strong></p>
<p><a href="http://www.msexchange.org/articles-tutorials/exchange-server-2003/management-administration/Implementing-Exchange-2003-Message-Journaling.html" target="_blank">The article from MSExchange.org</a> that I posted above talks all about configuring envelope journaling in 2003.  I found that it makes no difference to Bullhorn whether it&#8217;s enabled or not.  Hence I don&#8217;t think that there&#8217;s a point to configuring it.  (Though it couldn&#8217;t hurt, and it&#8217;s really easy!)</p>
<p>Incidentally, I also found a few articles relating to email journaling to a third-party compliance solution.  One of them discussed that Exchange 2003 does not actually forward the full envelope over SMTP even with envelope journaling enabled.  Their suggestion was to create a local journaling mailbox, then to enable user-level forwarding for that mailbox to the third-party receiver.  I found that did not fix the situation either.</p>
<h3>So are we done?</h3>
<p>You&#8217;d think that would be that.  We want to track both incoming and outgoing emails in Bullhorn, and Exchange 2003 is now forwarding both incoming and outgoing emails to your Bullhorn tracking address.</p>
<p>But here&#8217;s the rub:  <strong>It doesn&#8217;t work for inbound emails,</strong> and since Bullhorn won&#8217;t talk to me about my integration because I use Exchange 2003 I have <strong>no idea why it doesn&#8217;t work</strong>.  It should work, but it doesn&#8217;t.</p>
<h3>Email forwarding to the rescue</h3>
<p>To get inbound emails to show up in Bullhorn I had to configure email forwarding at the user account level <strong>in addition to journaling</strong>!</p>
<p>If you&#8217;re the usual Exchange administrator then this should be a cakewalk for you.  Let&#8217;s skip right to the screenshot:</p>
<div id="attachment_837" style="width: 630px" class="wp-caption aligncenter"><a href="http://s.co.tt/blog/wp-content/uploads/2014/08/bullhorn_integration_user_forwarding_setup.png"><img src="http://s.co.tt.kisocdnb.net/blog/wp-content/uploads/2014/08/bullhorn_integration_user_forwarding_setup-1024x649.png" alt="Bullhorn Email Integration - Configure User Email Forwarding" title="Bullhorn Email Integration - Configure User Email Forwarding" width="620" height="392" class="size-large wp-image-837" /></a><p class="wp-caption-text">As usual, click on the image for a full-sized version.</p></div>
<p>Open up the trusty old Active Directory Users and Computers management console.</p>
<p>Locate the Active Directory <strong>user account</strong> for your Bullhorn user and open its properties.</p>
<p>Click on the &#8220;Exchange General&#8221; tab, and then click the &#8220;Delivery Options..&#8221; button.</p>
<p>In the delivery options dialog, click the radio button next to &#8220;Forward to:&#8221;.</p>
<p>Click the &#8220;Modify&#8221; button and find the <strong>contact</strong> for your Bullhorn user.  In this case it&#8217;s &#8220;Malcolm Reynolds (Bullhorn Tracking)&#8221;.</p>
<p>Check the box next to &#8220;Deliver messages to both forwarding address and mailbox&#8221;.  (That&#8217;s an easy one to forget!)</p>
<p>Click &#8220;OK&#8221; to save and close the delivery options, and &#8220;OK&#8221; to save and close the user&#8217;s properties.</p>
<h3>And that&#8217;s it!</h3>
<p>You should now see emails flowing into your Bullhorn Activity Center and/or to your candidates&#8217; and contacts&#8217; activity log under &#8220;Email&#8221;:</p>
<div id="attachment_839" style="width: 310px" class="wp-caption aligncenter"><a href="http://s.co.tt/blog/wp-content/uploads/2014/08/bullhorn_integration_emails_in_candidate_record.png"><img src="http://s.co.tt.kisocdnb.net/blog/wp-content/uploads/2014/08/bullhorn_integration_emails_in_candidate_record-300x237.png" alt="Bullhorn Email Integration - Emails to and from a candidate" title="Bullhorn Email Integration - Emails to and from a candidate" width="300" height="237" class="size-medium wp-image-839" /></a><p class="wp-caption-text">Sorry for all the redactions!</p></div>
<p>Here you can see that both inbound and outbound emails are associated with my candidate record! </p>
<p><em>The eagle-eyed reader may have noticed that the first email in the list has a timestamp of 1139 (11:39 AM) in the subject field, but the &#8220;Date Sent&#8221; column says 6:36 PM.  This is not an issue with the integration; <strong>For some reason the Bullhorn website was extremely slow today to the point of being unusable.</strong>  I&#8217;m assuming that&#8217;s the reason that the email didn&#8217;t show up in our account for 7 hours.</em></p>
<h3>Testing</h3>
<p>I created a candidate record in the system under my name, and gave it two of my personal email addresses.</p>
<p>I&#8217;m not a Bullhorn user, but I hopped onto one of our users&#8217; email accounts and sent a test email (or two) to my personal address.</p>
<p>I also sent an email (or eight) to the Bullhorn user&#8217;s corporate email address.</p>
<p>Because my personal email address matched an email address on my candidate record, those emails show up in the &#8220;Activity&#8221; tab under &#8220;Email&#8221;!</p>
<p>If they don&#8217;t show up under a candidate or contact record, they&#8217;re probably in the Activity Center (under the main menu).</p>
<p><strong>If you aren&#8217;t seeing any messages in Bullhorn, try journaling messages to an external email account that you control.</strong></p>
<p>For example, if your personal email address is <strong>butterface1990@gmail.com</strong> then set up an Exchange contact just as you did with the Bullhorn tracking contact.  Change your mailbox store&#8217;s journal settings to use that contact.</p>
<p>You should start seeing messages in that GMail account.  If no messages come through then the problem is likely on your server(s) and/or network and not with Bullhorn.  (As always, give it some time for that journaling change to propagate through your Active Directory and Exchange servers.  Oh, and <strong>check your spam folder!</strong>)</p>
<h3>Caveats</h3>
<p><strong>At some point we may start seeing duplicate emails in the system.</strong>  Bullhorn appears to be ignoring inbound emails that are journaled to the corporate tracking email address.  That behavior may later be fixed on Bullhorn&#8217;s end, in which case we may see the situation where both the user-level forwarded emails <strong>and</strong> the inbound journaled emails show up in our account!</p>
<p><strong>No official Bullhorn support.</strong>  I&#8217;ve done my best to get this integration to work.  If it breaks down the line then we may just be plain out of luck.</p>
<p><strong>This is not an ideal situation for a large organization.</strong>  We have 3 Bullhorn users, and likely won&#8217;t be increasing that number tremendously over the next few years.</p>
<p>If your organization is large (that&#8217;s a subjective term, I know) then you may wind up putting too much load on your server and/or network by journaling and forwarding messages for a lot of users.  You may also run out of mailbox stores!  (They have size and quantity limits.)</p>
<h3>In conclusion</h3>
<p>Yes, integration with Exchange should work with just jounaling in place and without the need to forward emails at the user level.</p>
<p>And believe me, <strong>I tried every which way to get inbound journaled messages to show up in Bullhorn!</strong>  Feel free to try some other solutions yourself (and if you succeed let me know), but I&#8217;m hoping that this article saves you the time.  It cost me a lot of mine!</p>
<p>Of course, we haven&#8217;t even talked about calendar integration.  That&#8217;ll be a post for another day, perhaps.</p>
]]></content:encoded>
			<wfw:commentRss>http://s.co.tt/2014/08/26/integrating-bullhorn-with-exchange-2003-using-journaling-and-forwarding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redundant email servers with soft-fail (450) vs. hard-fail (550)</title>
		<link>http://s.co.tt/2014/02/10/redundant-email-servers-with-soft-fail-450-vs-hard-fail-550/</link>
		<comments>http://s.co.tt/2014/02/10/redundant-email-servers-with-soft-fail-450-vs-hard-fail-550/#comments</comments>
		<pubDate>Mon, 10 Feb 2014 23:34:32 +0000</pubDate>
		<dc:creator><![CDATA[Scott]]></dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://s.co.tt/blog/?p=529</guid>
		<description><![CDATA[I manage a fairly large number of incoming mail exchangers, which are numerous both to handle large message volumes as well as to provide redundancy. In most cases, these mail servers are Postfix with MySQL providing virtual alias maps, transport maps, relay domains, and virtual alias domains. Unfortunately the Postfix+MySQL implementation isn&#8217;t always 100% great. On very rare occasions the Postfix instance may fail to communicate with the MySQL server, for any number of reasons. From the perspective of the sender&#8217;s MX, this usually results in a 550 status code (often given as &#8220;Relay access denied&#8221;). This is a hard-fail, in that it tells the upstream MX that the recipient they&#8217;re trying to reach is permanently unavailable. The upstream MX … <a class="continue-reading-link" href="http://s.co.tt/2014/02/10/redundant-email-servers-with-soft-fail-450-vs-hard-fail-550/"> Continue reading</a>]]></description>
				<content:encoded><![CDATA[<p>I manage a fairly large number of incoming mail exchangers, which are numerous both to handle large message volumes as well as to provide redundancy.</p>
<p>In most cases, these mail servers are Postfix with MySQL providing virtual alias maps, transport maps, relay domains, and virtual alias domains.  Unfortunately the Postfix+MySQL implementation isn&#8217;t always 100% great.  On very rare occasions the Postfix instance may fail to communicate with the MySQL server, for any number of reasons.</p>
<p>From the perspective of the sender&#8217;s MX, this usually results in a 550 status code (often given as &#8220;Relay access denied&#8221;).  This is a hard-fail, in that it tells the upstream MX that the recipient they&#8217;re trying to reach is permanently unavailable.  The upstream MX then gives up on delivery and sends a bounce notification to the sender.  This behavior is highly undesirable for the purposes of redundancy, because the message will never be retried at another one of my MX servers (which is probably working just fine)!</p>
<p>The solution is to tell Postfix to soft-fail in the case of any undeliverable mail.  For example, I have the following settings in my main.cf:</p>
<p><code>access_map_reject_code = 450<br />
maps_rbl_reject_code = 450<br />
reject_code = 450<br />
relay_domains_reject_code = 450<br />
unknown_local_recipient_reject_code = 450<br />
unknown_relay_recipient_reject_code = 450<br />
unknown_virtual_alias_reject_code = 450<br />
unknown_virtual_mailbox_reject_code = 450</code></p>
<p>A 4xx code is generally interpreted by mail exchangers as a temporary condition, encouraging them to retry delivery at a later time.  Most mail exchangers are smart enough to then try other MX records in DNS for delivery.</p>
<p>However, there are downsides to a soft failure (4xx code).  </p>
<p>First, you&#8217;ll see a whole lot of retries for messages that have truly invalid recipients.  In fact, with a 99.999% MX uptime, the vast majority of retries will be for spam messages, mis-typed addresses, spammer bounces, etc.  This will result in a lot of extra traffic and a lot of extra load on mail servers.  Of course, it will also result in lots of deliveries of valid messages in the case of an outage on one MX!</p>
<p>Second, in the case of a mis-typed address (or other case where the mail is really not deliverable) it could take over a week for the sender to get a bounce back (undeliverable notification).  In the mean time they would probably assume that their message went through, and that the recipient was just ignoring them!</p>
<p><strong>So what&#8217;s the solution?</strong></p>
<p>First, let&#8217;s look at what a properly-configured (read: non-spammer) mail exchanger will do when trying to deliver a message:</p>
<ol>
<li>Obtain from DNS the MX records for the destination domain.</li>
<li>Attempt delivery to the MX with the lowest number in its priority field.</li>
<li>If delivery doesn&#8217;t succeed (generally because the server could not be contacted or the server gave a soft failure) then:
<ul>
<li>Go back to step #2 using the next-highest priority number, or cycle back to the lowest number if there is no higher number.</li>
</ul>
</li>
</ol>
<p>That&#8217;s a simplification, but the idea is that delivery will be tried to each successive MX server in a loop until delivery succeeds or a hard-fail status is received.</p>
<p><strong>The best solution that I&#8217;ve found is to set up the last MX server (the one with the highest priority number in DNS) to hard-fail with 5xx status codes, while the others are set to soft-fail with 4xx status codes.</strong></p>
<p>Spammers will generally attempt delivery to any arbitrary MX server and will not obey the priority order in DNS.  So there will be some unnecessary retries.  But this will cut down on traffic from accidental delivery attempts (e.g. mis-typed addresses), as well as from bounce notifications from valid MX servers (e.g. if a spammer is using one of your users&#8217; email addresses to send mail).</p>
<p>Valid senders with invalid recipients will receive a timely bounce back, though it may take a few minutes depending upon the timeouts in the upstream MX.</p>
<p>Most importantly, delivery of valid and desirable messages will be retried across MX servers until a functional one is found.</p>
<p><strong>Actually, my setup is a bit different:</strong>  I host incoming mail services for many domains, and want to keep traffic flowing equally across all of my mail exchangers.  As such, each domain is assigned three of my MX servers <strong>in random order</strong>.  That means that there is no MX server that will always have the highest priority number in DNS, and so all of those servers are set up to soft-fail.</p>
<p>I think you can see where I&#8217;m going:  I created another fall-back server which is assigned to users&#8217; domains as a fourth MX record with the highest priority number.  This server is set up identically to all the other MX servers, except that it will reply with a 5xx status codes in cases where the other servers would give 4xx codes.  For almost all valid (non-spam) email, this server will be a last resort.</p>
<p>I say &#8220;almost all&#8221; valid email because there is some MX software out there that will try DNS MX records in an arbitrary order.  However this behavior is not that common, and the chances that delivery would be first attempted to the hard-fail server while that server was down is slim:  It would effect a very low number of messages, and so is an acceptable risk.</p>
<p>If you&#8217;ve been working with mail servers and SMTP for any length of time, then you know that mail delivery is never as simple as it seems.  There are trade-offs and &#8220;gotchas&#8221; galore when implementing and administering a mail infrastructure.  To my mind, the #1 goal of any admin should be ensuring successful mail delivery.  Every trade-off should be in furtherance of that result.</p>
<p>It&#8217;s like the old saying:  Better that 10 guilty persons escape than one innocent suffer.</p>
<p><strong>Better that 10 spam messages get delivered than one important message bounce.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://s.co.tt/2014/02/10/redundant-email-servers-with-soft-fail-450-vs-hard-fail-550/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I propose a new approach to email reputation that allows the (legitimate) little guys to compete</title>
		<link>http://s.co.tt/2012/09/28/a-new-approach-to-email-reputation-that-allows-the-little-guys-to-compete/</link>
		<comments>http://s.co.tt/2012/09/28/a-new-approach-to-email-reputation-that-allows-the-little-guys-to-compete/#comments</comments>
		<pubDate>Fri, 28 Sep 2012 20:34:04 +0000</pubDate>
		<dc:creator><![CDATA[Scott]]></dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[computer]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://s.co.tt/blog/?p=386</guid>
		<description><![CDATA[I have a problem&#8230; I administrate roughly fifteen domains that send email on a regular basis.   Outbound email is handled by two corporate (and one personal) email servers running Zimbra and Exchange, as well as a couple of mail exchangers that handle automated email from web servers. I also don&#8217;t send spam.   All automated emails include a clear unsubscribe link, which is a single-click mechanism resulting in an immediate blacklisting of the user&#8217;s email address.  Automated emails also include the name and mailing address of the company from which they were sent, as per US federal law.  Corporate and personal emails are used responsibly;  In other words they are not used for blind solicitation nor for any other purposes … <a class="continue-reading-link" href="http://s.co.tt/2012/09/28/a-new-approach-to-email-reputation-that-allows-the-little-guys-to-compete/"> Continue reading</a>]]></description>
				<content:encoded><![CDATA[<p><strong>I have a problem&#8230;</strong></p>
<p>I administrate roughly fifteen domains that send email on a regular basis.   Outbound email is handled by two corporate (and one personal) email servers running Zimbra and Exchange, as well as a couple of mail exchangers that handle automated email from web servers.</p>
<p>I also don&#8217;t send spam.   All automated emails include a clear unsubscribe link, which is a single-click mechanism resulting in an immediate blacklisting of the user&#8217;s email address.  Automated emails also include the name and mailing address of the company from which they were sent, as per US federal law.  Corporate and personal emails are used responsibly;  In other words they are not used for blind solicitation nor for any other purposes that would be considered spam.</p>
<p>All email, automated or not, is sent with valid DKIM and SPF headers from static IP addresses registered with ARIN under an appropriate corporate entity.  Reverse DNS matches the sender domain in some cases, but not in others as we have very small IP ranges.</p>
<p>Despite this correct and responsible use of email, customers, vendors and personal contacts still need to be sometimes told to &#8220;check your spam folder&#8221;.</p>
<p>Of course the big providers like Google, Microsoft and Yahoo!  also do things in a technically correct fashion, but because of their large subscriber bases they receive special treatment by anti-spam filters.  They also have technical teams that can chase down and correct IP and other blacklist issues.</p>
<p>Medium- and large-sized organizations can simply pay another company like Return Path to take care of these issues and improve their reputation with the makers of spam filters.</p>
<p><strong>But what&#8217;s the little guy with a limited budget to do, and what to Bitcoins have to do with it?</strong></p>
<p>A while back I was very interested in Bitcoins.   I never really got into mining, and I haven&#8217;t done any significant transactions using the digital currency.  However the algorithm of mining Bitcoins and the inherent security is simply elegant, despite its necessarily brute-force nature.</p>
<p>I imagine that such an approach could be used towards email authentication.</p>
<p>I&#8217;m not a cryptography expert (nor even nearly so), but I propose that there be a new score for email reputation that&#8217;s directly related to the computational power that went into sending the message.   Perhaps, to borrow from Bitcoin mining, the score would be proportional to the value of the SHA256 hash that signed the message.  In other words, the more computational work that went into finding the lowest possible hash value, the better the message would score as ham.</p>
<p>Needless to say, it would be prohibitively expensive (computationally and therefore fiscally) for spammers to send out millions of emails using such a mechanism, and that&#8217;s rather the point.</p>
<p>This approach would likewise be impractical for large organizations and legitimate bulk senders, but they can already afford their good reputations.   So I&#8217;m not suggesting that we supplant all spam scoring with this approach, but merely that it become one more tool in the box, but one that specifically benefits smaller organizations and individuals with personal email servers.</p>
<p><strong>The implementation should be straight forward, </strong>and should not be computationally taxing on the receiver of the message.</p>
<p>My first thought is to leverage DKIM.  Imagine that an email contains the headers shown below, the first being a standard DKIM header (from my personal email), with the second a new header.  I&#8217;ve put the initialism MSMR in the header name as a placeholder.  It is short for:  Message Signature Mining Reputation.  Perhaps not the best name in the world, but it will do for now.</p>
<pre>DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rosenber.gs;
    s=default; t=1348858150;
    bh=TUWh0I0EJ9E4V2T3OjQaYKWWoMdOzHN8R8m+SrSZG6M=;
    h=Date:From:To:Message-ID:Subject:MIME-Version:Content-Type;
    b=PCy4cbsWMeTWfcHO2Xk9wkXpvKp6vgXCfbm1dVoopDBOTnybRZL88PqrQ6LISkMDT
        8tmS24ETegBqav81dGAF4YdkzE9DNj623JPB0/lsJsDCPXY8yWTSznG9B0txzs9wJN
        msqKfx5ImU/w5npzv5M28g88H6mYKRzloJlcHpFo=

MSMR-Key: v=1; a=rsa-sha256; n=ba4f33
    h=00000000000f15dbc2960b082dbf914e97198c8b12abc542a15f74a2a0fab1d4</pre>
<p>In the MSMR-Key header, key/value pairs are used in the same way as in the DKIM-Signature header.  <strong>v </strong>and <strong>a</strong> are likewise similar to those in DKIM to respectively indicate the version of MSMR and the hashing algorithm used.</p>
<p>The tag <strong>n</strong> holds the nonce value, an integer that is incremented for each attempt to generate a low-valued <strong>h</strong>, the hash of the DKIM-Signature&#8217;s <strong>b</strong> (base64-encoded signature) field appended to the nonce value.</p>
<p>As such, the receiving server could easily validate the MSMR header by hashing the nonce value + the DKIM signature (assuming the DKIM signature has included the To: header), and comparing that hash to the value of the <strong>h</strong> tag.  If the hashes match, the MSMR header is valid and can be used for scoring the message.</p>
<p>(Of course, the entirety of the message body and the To: field could be hashed instead of the <strong>b</strong> tag in the DKIM signature.  This could be an optional approach in the implementation.  I chose to leverage the DKIM header because it&#8217;s computationally easier to deal with for the recipient than the body of a very large message, and because it enforces that DKIM be used to authenticate the source of the message).</p>
<p><strong>Determining the spam/ham score from the hash value must be a relative process. </strong></p>
<p><strong> </strong> Computational power will continue to become less costly over time (from the perspective of hashes/sec/joule and therefore hashes/sec/monetary unit), and so it will become increasingly easier to generate ever lower value hashes on outbound messages.</p>
<p>Therefore the spam/ham score cannot be derived in direct proportion to the numeric value of the hash;  A scaling factor must be used.  That scaling factor must be updated to reflect the state of the art of computing at any given time.</p>
<p>There are three ways to do this, and I propose that all three be put into place.  It should be up to the recipient email server&#8217;s spam filter to decide which source of data to use:</p>
<ul>
<li>A central authority decides the current scaling factor and makes it available publicly via API and on their website.</li>
<li>Large ISPs and/or spam filter vendors determine an appropriate scaling factor using real-world metrics (users reporting spam and ham that was erroneously categorized as spam) and makes it available publicly via API and/or on their websites.</li>
<li>Individual mail servers at small- and medium-sized organizations determine an appropriate scaling factor using their own data, in the same fashion as the large ISPs.</li>
</ul>
<p>Ideally, no fee would be charged for either of the first two approaches, but the third is guaranteed to be usable without a fee (using open-source software).</p>
<p>Both senders and recipients would need to obtain the scaling factor so that the senders can meet recpients&#8217; expectations of hash values.</p>
<p><strong>To summarize:</strong></p>
<ul>
<li>Small organizations and individuals can gain control over their email reputation with insignificant cost and without the intervention of for-profit businesses.</li>
<li>A brute-force hashing implementation to establish reputation would be easy to implement.  It would put the computational onus on the sender, but the recipient would require very little CPU time to validate the hash.</li>
<li>Spammers would have a high, real-world monetary cost for sending bulk email, but low-volume senders would suffer a negligible increase in the cost of running their mail servers.</li>
<li>As average computing power increases, so too can the difficulty of generating low-value hashes.</li>
<li>The organization or individual sending mail would not need to affiliate themselves with any central authority, nor pay fees to any third party.</li>
</ul>
<p><strong>In my defense&#8230;</strong></p>
<p>I believe, and have always believed, that email should be free (both of cost and censorship, but this is about cost).  I vehemently oppose any government taxes or ISP fees levied on a per-message basis.  I also oppose the cartels of &#8220;legitimate&#8221; email senders that bombard my inbox with promotional material that they insist I desire merely because I&#8217;ve used their services once or twice in the past.</p>
<p>Though my suggested system of scoring email reputation does, in effect, put into place a fairly definitive per-message cost, I do not believe that it amounts to taxation.  This is because 1) it is not a requirement of sending email, 2) the per-message cost will be controllable by the administrator (to some extent), and 3) the messaging cost is not a direct function of arbitrary government or corporate decisions.</p>
<p>Based upon a paper napkin estimate using figures from Bitcoin mining efficiencies, my own infrastructure&#8217;s email volume, and power costs in my area, this system would cost me something on the order of US$2/month on the corporate side, and a matter of pennies/month for my personal email.  This is far cheaper and easier than other solutions and/or fighting each and every recipient ISP personally.</p>
<p>I encourage comments, because this is only a draft of an idea I thought up this afternoon.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://s.co.tt/2012/09/28/a-new-approach-to-email-reputation-that-allows-the-little-guys-to-compete/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
