Monday, April 19, 2010

New Feature: FTP your HTML email templates to your account

You can now FTP HTML email template files to client.jangomail.com, and then choose from these templates to compose an email campaign.

FTP to an email template file, such as a .htm or a .html file to client.jangomail.com/HTMLTemplates. Login to client.jangomail.com using your JangoMail username and password.

Command Line FTP Example

The above screenshot shows a command line FTP example of connecting to client.jangomail.com and uploading an HTML template file called BrownieMemorialDay.html.

You may use a friendlier FTP application like FileZilla or even Internet Explorer.

Once you have FTPd a template file, that file will show up after you click the +New Message button in the Messages section. Choose with an Uploaded Template to find your template.




What else can you do with FTP?


You can control several aspects of your JangoMail account via FTP. FTP to client.jangomail.com to:
  1. Upload images and other email content to client.jangomail.com/Images
  2. Upload file attachments that you wish to mass email to your recipients, to client.jangomail.com/Attachments.
  3. Upload email list files to client.jangomail.com/GroupImportsAutoFTP, and JangoMail will automatically turn your file into an Email List to which you can send an email campaign.

Saturday, March 27, 2010

SMTP Relay Server Enhancements

We've deployed a couple of enhancements and bug fixes to the SMTP service.

  1. MIME encoded Subject lines containing a Transactional Group are now handled properly.

    According to the SMTP MIME specification, certain email headers can be MIME encoded. It's called the encoded-word syntax. For example, the Subject of an email might actually look like:

    Subject: =?utf-8?Q?Savings_For_Today{Daily_Alert}?=

    This represents a subject that is character-encoded as UTF-8 and content-transfer-encoded as quoted-printable. This Subject, properly rendered by an email client would look like:

    Subject: Savings for Today{Daily Alert}

    For the purposes of the JangoMail SMTP Server, the subject can contain the Transactional Group that the message should be assigned to in curly brackets. So if this message was relayed through relay.jangosmtp.net, then the actual Subject would be "Savings for Today", and this message would be assigned to the Transactional Group "Daily Alert" in the user's account. Previously, our system was not decoding the Subject properly in order to determine the correct Transactional Group name to which to assign the email, but that has now been corrected in today's release.

  2. If the Sender header is specified in the original email, that header is now preserved.

    The Sender header, similar to the From header of an email, can be used to denote additional information about where the email originated. Most email messages do not contain a Sender header, but in some cases, a Sender header is inserted by an email system if the user is using a From Address not local to that particular email system. For example, GMail users who send "from" an address other than their gmail.com address will have a Sender header inserted into the email where the Sender header equals the gmail.com address and the From address equals the user's chosen From Address.

    On the receiving side, some email clients will show the Sender header as a phrase to the email recipient, saying "From [From Address] On Behalf Of [Sender Address]"

    Previously, if an email was relayed through the relay server that included a Sender header, the Sender header would be discarded by our system and not included in the final email message. Now, the system is preserving the Sender header.

Why you can't connect to the SMTP relay server

We often get inquiries from customers telling us that they're unable to relay emails through relay.jangosmtp.net. Here is a list of the most common reasons why it doesn't work.
  1. Your Internet Service Provider (ISP) is blocking access to external email servers. By default, the SMTP server listens on port 25, and many ISPs block connections on port 25 in order to prevent you from emailing through an external email server. For this reason, our SMTP server also listens on port 2525. You can test connectivity from a Command Prompt by typing:

    telnet relay.jangosmtp.net 25



    Successfully connecting to relay.jangosmtp.net


    If that doesn't work, try:

    telnet relay.jangosmtp.net 2525

    You should get a response from the server as shown in the screenshot above.

  2. You haven't setup a proper authentication method. In order to relay emails through relay.jangosmtp.net, you must login to your account, go to Settings --> SMTP Relay, and authenticate either by IP Address or SMTP Username/Password.
  3. You are connecting to the wrong server. We've had customers attempt to connect to relay.jangosmtp.com, relay.jangomail.com, and relay.jangomail.net, all of which are incorrect. The correct server is relay.jangosmtp.net.
  4. You are manually inputting SMTP commands in order to complete a SMTP transaction. Unfortunately, unless you manually input the data for a proper and well-formed email message, including a Subject and a Message, our system will discard it.
How do you know if your email goes through the relay server properly? You will see your email almost instantly in Reporting after you send it.

Tuesday, March 23, 2010

New Feature: Floating Buttons on Send Email page

We're always striving to improve our user interface, and today we've added an option that will make using the Send Email page much easier. This page has a lot of form fields on it, and every time you make a change to a field, if you want to send yourself a test email, you have to then scroll up or down to find the buttons. Not any more...now you can choose to have the buttons float at the bottom of your screen.

To set this option, go to Settings --> Send Email Page, and check the box to enable Floating Buttons.


The buttons on the Send Email page will now remain constant at the bottom of your page.



Please note that this feature will not work with Internet Explorer 6. It will work with Internet Explorer 7 and greater, and with Firefox, Safari, and Chrome.

Press Release: JangoMail Takes Lead in Delivering Runner Updates During NYC Half-Marathon

New York Road Runners again chose JangoMail to deliver race updates for last Sunday's Half-Marathon.

Read our press release to learn more about how JangoMail helped NYRR deliver race updates via email.

https://www.jangomail.com/JangoMail-Takes-Lead-In-Delivering-Race-Updates-For-NYC-Marathon.asp

Sunday, March 21, 2010

New Feature: Self Service Upgrades!

We've just launched a tool to allow you to upgrade your account without contacting Support. This feature is available only in our new no-frames interface. And we've only rolled it out to a portion of our accounts, to test it out. If you don't see the Upgrade Account button in your account yet, you soon will.


To upgrade your account click the Account Info link in the blue top area, and then you'll see the screen above. Then click the Upgrade Account button.



You'll then be taken to the Upgrade Account tool. From here you have several options:

  1. Upgrade the number of emails for just the current billing cycle.
  2. Upgrade the number of emails for both the current billing cycle and all future billing cycles (a permanent upgrade)
  3. Upgrade the number of data bytes for just the current billing cycle.
  4. Upgrade the number of data bytes permanently, for the current and all future billing cycles.

Friday, March 19, 2010

New API method to retrieve SMTP log files

Several years ago, we were the first email service provider to provide access to SMTP logs for email marketing campaigns. Now we're the first to provide access to SMTP logs via an API. Today we have launched the method Reports_GetSMTPLog to retrieve the SMTP log for a given email address for a given email campaign. Just pass in the campaign ID and the recipient email address.

  • Reports_GetSMTPLog
    Returns the SMTP log for a specified recipient of a specified email campaign

  • This method only retrieves SMTP logs for broadcast email marketing campaigns. We are working on a method to retrieve SMTP logs for transactional email messages as well, but this poses some challenges not seen with broadcast campaigns. For example, while broadcast campaigns generally don't have duplicate email addresses, it is very possible that in a Transactional Group's email messages, a single email address has received multiple transactional messages over time. Thus, simply passing in a Transactional Group Name and an email address won't suffice for retrieving the log, since the API needs to be able to determine the time range of logs to search in order to display them to the caller.

    Thursday, March 18, 2010

    Two new API methods to change Group names

    We have deployed two new API methods. Groups_Rename allows you to change the name of an Email Group (aka Email List). And TransactionalGroups_Rename allows you to change the name of a Transactional Email Group.

  • Groups_Rename
    Renames a group. Returns a String.

  • TransactionalGroups_Rename
    Renames a transactional group. Returns a String.

  • Both of these methods were the request of a client.

    Thursday, February 25, 2010

    Five new API methods

    We've added the following five API/web service methods to improve our transactional email capabilities. All were requested by prospects evaluating JangoMail. Do you have a request for an API method that would make your developer's life easier? Let us know by filling out our Support form.

    Click each method name to use its corresponding test form.

  • GetTransactionalGroupID
    Gets a transactional group id. Returns a string.

  • DeleteTransactionalGroup
    Deletes a transactional group from account. Returns a string.

  • Reports_GetBouncesByTransactionalGroup_DataSet
    Retrieves list of bounced addresses for a particular transactional group. Includes SMTP Diagnostic Code and Definitive columns. Returns a .NET DataSet.

  • Reports_GetBouncesByTransactionalGroup_String
    Retrieves list of bounced addresses for a particular transactional group. Includes SMTP Diagnostic Code and Definitive columns. Returns a string.

  • Reports_GetBouncesByTransactionalGroup_XML
    Retrieves list of bounced addresses for a particular transactional group. Includes SMTP Diagnostic Code and Definitive columns. Returns an XML document.
  • Wednesday, February 24, 2010

    New Report: Complaint Rate Dashboard

    JangoMail and JangoSMTP users have always been able to see the complaint rate for an individual broadcast campaign or for an individual transactional email group. However, it was difficult to see complaint rate history over time, and in aggregate across different types of email campaigns (transactional, autoresponders, recurring campaigns, single-shot broadcast campaigns).

    With our new Complaint Rate Dashboard, available only in our new no-frames interface, you can see your overall complaint rate based on all emails sent from your account in aggregate.

    To access the Complaint Rate Dashboard, make sure your account is using our new no-frames interface, then click Reports, then choose "Complaint Rate History" from the Account dropdown menu:



    Here's an example of the Complaint Rate Dashboard from our customer, Popcorn Palace:



    The report shows the complaint rate for the last 7 days and the last 30 days, and it also allows you to see how many total emails you've sent per day during this period.

    Additionally, you can see what ISP has resulted in the most complaints during a given period.

    Time-based complaint rates are more difficult to calculate than the complaint rate on say, an individual broadcast email campaign. There are two ways to calculate time-based complaint rates:

    1. Bad way: Number of emails sent within a time period and number of complaints received within that same time period. This method is flawed, since the complaint on an email sent within time period A may not be received until after time period A. So a simple division of the complaints received within a particular 7 day period divided by the number of emails sent within that 7 day period would result in an erroneous complaint rate.

    2. Good way: Instead, we tie each complaint back to the original email that resulted in it. The complaint rates shown in this new report are calculated by analyzing how many emails were sent in a given time period, and then analyzing how many complaints were received for only the emails sent within that given time period.

    Tuesday, February 23, 2010

    Your Company Logo in your JangoMail Surveys

    JangoMail now has support for adding your company logo to surveys that you create through our website using the Surveys tab. Adding your logo to your surveys is a great idea, not only because it makes it clear who is conducting the survey, but it also builds on your branding by putting your image in front of your survey participants once more.

    Adding your logo is accomplished in three simple steps:




    1. While logged in, click on the Company Logo selection on the Settings tab
    2. Input the URL of your company logo from your website (or wherever your logo image is hosted)
    3. Click the Update Company Logo button

    After your company logo setting has been updated, that logo will automatically appear at the top of any survey pages you create in the Surveys section of JangoMail.

    Below is a screenshot with a sample survey put together to demonstrate the new feature.


    Wednesday, February 10, 2010

    V-Day Email Tips to Enflame Customer Passions

    Nothing inflames the passions like a well-written love letter. That's why for this Valentine's Day I thought I'd offer some tips on how you can take the same basic tenets of love letter writing to create email campaigns that will really get your customer and prospect hearts beating!

    1. The sheer appearance of a love letter says so much about the sender and the level of his or her affection. As an email marketer, you need to choose layouts, colors, fonts, and graphics that not only accurately reflect your brand but also draw readers in and show you truly care about how they perceive you.

    2. All Romeos and Juliets know how to create the right ambiance. Be sure to consider not only the mood you’re hoping your email will leave readers in, but also the mood they may already be in. Most recipients will be busy, so be considerate of their time and say what needs to be said in order for them to warm up to you.

    3. Ever get a love letter and then gush about it with friends? Your friends are probably left wishing their special someones could melt their hearts like that! Know what your competitors are telling customers, and then beat their sweet nothings with sweet somethings that make customers feel special. Segment your outreach and create copy that focuses on your reader's specific needs. Coupons, giveaways, newsletters and funny videos all show you’re interested in a giving, long-term relationship while contributing to the viral effect.

    4. "Let us go then you and I…" Just like the Love Song of J. Alfred Prufrock, your email must contain a clear call to action. But don’t just ask would-be customers to click on a link or buy your product. Show them how by doing so you can change their lives in deep and meaningful ways.

    5. No matter how eloquently written, sending unsolicited love letters can get you into trouble. As always, be sure your recipients have opted in to receiving your affections!

    JangoMail is also showing some love this Valentine's Day by offering free trials of its powerful email marketing platform and waiving its start-up fee through the end of February. JangoMail offers a variety of affordable pricing options, so anyone can send emails in a highly reliable and personalized way. Visit http://www.jangomail.com/ for more.

    Tuesday, February 09, 2010

    Two New Reports in our New User Interface

    Those users that have switched to our new no-frames interface now have a new report to enjoy -- two new detailed Sending Progress reports. The first shows how many emails are still pending, and which JangoMail sending server they have been assigned to, and the second shows how many emails have been sent per hour since the email campaign was launched.

    To access these two new reports, you must be using the new interface. If you are on the old interface, click "Switch to No Frames" in the top blue area.

    Go to Reports click the (sending) link next to an in-progress email campaign:

    After clicking (sending), a popup will show you how many emails have been sent, how many are remaining, and to which sending server they've been assigned:



    Clicking on [Time] will reveal how many emails have been sent per hour since the email campaign was launched.

    Saturday, February 06, 2010

    Two bug fixes in SMTP relay service

    We've just deployed two fixes to the JangoSMTP transactional email service:

    1. Previously, lines in an email message that begin with a single period would result in two periods when delivered to the recipient. This was a bug related to how SMTP treats the escaping of periods. This is now fixed. To read more about issues involving SMTP and periods, see this article: http://db.ilug-bom.org.in/lug-authors/philip/docs/mail-stuff/smtp-intro.html

    2. Previously, if an email message was relayed to relay.jangosmtp.net and included both the Disposition-Notification-To and the Return-Receipt-To headers, then JangoSMTP would throw an error on the email message:

    System.ArgumentException: An item with the same key has already been added.

    This is now fixed, and email messages containing both headers will be delivered properly.

    Monday, January 18, 2010

    JangoMail Has Upgraded Its HTML Editor

    It has been a while since the last upgrade but JangoMail has just installed the latest version of the Ephox EditLive! HTML editor. What does this mean for you? TONS of new features and bugfixes, including:

    • Support for setting the language direction in both the applet and in inline editing sections
    • Improved dictionaries for spell checking
    • Additional support for international, non-English locales
    • Fixes for several table rendering problems






    See here for a list of all bugfixes and enhancements.

    Friday, January 01, 2010

    Transactional emails now support List-Unsubscribe header option

    Back in July, we announced support for the List-Unsubscribe header in broadcast email campaigns sent via JangoMail.

    Starting today, the List-Unsubscribe header will also be applied to transactional email messages. Transactional emails are email messages sent via any of the following methods:
    1. The SMTP relay service
    2. Any of the following API methods: SendTransactionalEmail, SendTransactionalEmailFromTemplate, SendTransactionalEmailRaw
    See the original July blog post for information on how this header affects your email messages. It is our recommendation, that all clients leave this header turned on. If you wish to turn it off, you may do so under Settings --> Unsubscribe Options.

    Thursday, December 17, 2009

    The Rendering/Inbox Preview tool is back in action

    Our rendering/inbox preview tool is back in action, after a hiatus for the last month where the only client that rendered properly was GMail.

    Now, four of the clients will consistently display (Gmail, Outlook, Thunderbird, and Windows Mail), and we're working on bringing AOL, Hotmail, and Yahoo! Mail back to life.

    The reason this tool is so difficult to maintain and service is because a) We coded this feature from scratch, and Inbox Rendering is an extremely difficult process from a software development perspective, and b) Webmail clients are constantly changing, and when a change is made to its login process or its interface, we have to re-code our app to render that client all over again.


    Friday, December 11, 2009

    SMTP service now supports large attachments

    The JangoMail SMTP relay service now supports sending large file attachments in email. Before, there was a limit of approximately 2 MB in total file attachments. Now, there is NO theoretical limit, so the SMTP service can handle file attachments as large as 10 or 20 MB. Of course, email may not be the best medium to transmit such large files, but it is possible with our system.

    JangoSMTP: The Stand-Alone SMTP Service with open tracking, click tracking, DKIM signing, and more.

    JangoMail: The SMTP Service combined with email broadcast service.

    Saturday, December 05, 2009

    Review of Megabus WiFi Internet access

    Running a fast-paced high tech company like JangoMail, I need to be as productive as possible. I am usually either in Chicago (where I live) or in Dayton, Ohio (where I grew up, and where JangoMail is headquartered). Normally I drive between the two cities, because non-stop flights between Chicago and Dayton are upwards of $1,000. Recently, I was told of a bus service called Megabus, which operates a bus route between Cincinnati and Chicago with WiFi Internet access, so tonight, I gave it a shot. With the WiFi, I figured taking the bus I figured would allow me to work for six hours rater than drive for six hours.

    What I wanted to know

    Prior to buying my ticket, I wanted to know the following about the Megabus WiFi access:

    1. How fast was it? Would it be like dialup, or a T1?

    2. Were there any connectivity restrictions? Could I remote into a JangoMail server and deploy a new feature? Could I use GoToMyPC to access my main workstation in Chicago?

    3. Were there power outlets available? My laptop battery only lasts four hours, and my trip was six.

    Googling got me nowhere, as nobody has documented in detail experiences with Megabus's WiFi, so hence the purpose of this article.

    To all tech executives, sysadmins, and those that like to make their web app better while travelling between cities, this article's for you.

    Network Settings

    The above screenshot shows my network settings after connecting to the wireless network with SSID MEGABUS - 64184. Note that I manually put in the DNS server of 8.8.8.8 in an attempt to get around the network's web site blocking, however my attempt was futile.

    The Speed

    The speed various greatly depending on whether the bus is moving or stationary. While stationary, I got reasonable high-speed access. I ran this speed test which shows that I was getting near T1 speeds on the download.



    Above speed was while bus was stationary at Indianapolis stop.

    Above speed test was while bus was in route, half-way between Indianapolis and Chicago.

    The speed between Cincinnati and Indianapolis was the slowest of all, but unfortunately I did not capture a speed test screenshot during that portion of the trip.

    Port Blocking

    All connectivity, except to ports 80 and 443, and DNS lookups, are blocked:
    1. I could not ping any of our servers.
    2. I could not FTP to our server.
    3. I could not connect on port 25 to any mail servers.
    4. I could not Remote Desktop into any servers.
    5. I could not use GoToMyPC to connect to my workstation.
    Web Site Blocking

    Additionally, the WiFi service uses OpenDNS to block many web sites. While I was able to read and respond to email via GMail, and browse Facebook, the following sites were blocked:
    1. MySpace
    2. Google Docs (at docs.google.com), which was odd, because most other Google services were available
    3. Nerve

    Because it was an OpenDNS based block, I suspected that switching to Google's new public DNS server (8.8.8.8) might be a workaround to the blocking. I manually set my Windows TCP/IP settings to use 8.8.8.8 as its DNS server rather than the one dynamically assigned by DHCP, but to no avail. The sites were still blocked, redirecting me to an OpenDNS message.

    The WiFi service is provided by a company called Saucon, and it is free.

    Power Outlets on Megabus


    There were no power outlets on my bus from Cincinnati to Chicago, but I've read (insert link) that some buses do have outlets.

    Resources

    For the official Megabus Saucon WiFi Terms of Use, that you must agree to right when you connect, is here: http://www.saucontds.com/us/index.html

    Wikipedia entry on Megabus - http://en.wikipedia.org/wiki/Megabus

    Megabus Home page - http://www.megabus.com, which oddly enough when I just visited, gave me:

    Shocking that the site goes offline EVERY DAY for 3 hours. In our world of real-time, mission-critical everything, I'm surprised that they would sacrifice 12.5% of the time they could be selling tickets. JangoMail, which I'd imagine is a far more complex app than Megabus's web site, has maintenance running on the back-end almost constantly, and we rarely go offline.

    Tuesday, November 24, 2009

    Test Out Our New Survey Tool

    We just launched the first ever Silverlight-based Survey Design Tool. You can now design and publish email survey invites through the JangoMail interface and view your survey results for each individual participant.

    Set Up Instructions

    1. Click on the new Surveys tab. If you don't have Microsoft's Silverlight Platform installed, you will be prompted to install it at this time. Survey recipients see the survey on a regular webpage and will not need to download Silverlight.


    2. Click the Create a New Survey button to get started. Then choose the Blank survey option.
    3. To create a new question, click in the box under Create a new item.

    Edit the question and answer points by deleting the text that is currently there and typing in your own.
    To use a pre-defined set of answers, click the down arrow next to your answer set.
    To add space for short text answers and comment sections, click on the down arrow in the box under Create a new item. Then click on the type of answer you would like.

    4. When you are done creating your survey, click the Save button.
    5. To make the survey available for people to respond, you must publish it. Click on the Publish tab and then click Publish Survey. Here you will get a link that you can send to people to fill out your survey.
    6. Set your survey to end by navigating to the Close tab and entering in when the survey should close. You can choose to end it immediately, on a certain date, or after a given number of responses.

    Send the Survey
    1. When you publish your survey you will be provided with a link. Copy that link.
    2. Create an email message in the Messages section as you normally would. Paste in the link that you copied where appropriate. After testing your email and your link, send the email out to your survey list.
     

    View Results
    View Recipient-Level Results by clicking on My Surveys in the Surveys section. Click on the Results button next to the survey that you would like to view results for.

    We will soon add results in our Reporting and Analytics section as well.

    Monday, November 23, 2009

    Test our new no-frames interface

    Our new no-frames user interface is ready to be tested. To switch to the no-frames interface, login to your account and click the "Switch to No-Frames" link. You can always switch back to the old frames interface if you want to later.


    Below is the first screen of the new interface:

    Along with the absence of frames, there are three key navigational differences:
    1. The "Account Info" section is no longer a main tab. It is a link in the top area.
    2. The "Help" section is no longer a main tab. It is a link in the top area.
    3. There is a new tab called "Surveys". You can now design and publish and email survey invites to your email lists. The Surveys feature is also in beta. The survey builder runs on Microsoft's Silverlight platform, so if you don't have Silverlight installed, the first time you click on the "Surveys" tab you'll be asked to install Silverlight.
    The new no-frames interface will now be the basis for a whole host of user interface improvements, including improved text styling, contextual help, more videos, easier navigation, and clearer organization. Stay tuned for these improvements and future blog posts on how to use Surveys.

    Error handling for the SMTP Relay Service

    Overview:

    We've launched a new error handling system for the SMTP relay system. There are a number of reasons why a message sent through the SMTP relay may result in an error. For example:

    1. If the recipient address is on your account's bounce list, then a "bounce" error will be thrown.
    2. If the recipient address is on your account's unsubscribe list, then an "unsubscribe" error will be thrown.
    3. If your account is over its sending limits, a "Over Account Limit" error will be thrown.
    4. If a badly formed email message is passed through the relay, a "parsing" error will be thrown.

    These errors are only detected after a message is received by the SMTP relay, so the error will NOT appear during the SMTP conversation with relay.jangosmtp.net.

    When an error is detected, the error notification can be emailed to the Account Manager and/or the From Address on the email that resulted in the error. Additionally, the error is available for viewing under Reporting in the Transactional Emails section.

    To set your error handling preferences, go to Settings --> SMTP Relay and set the two relevant checkboxes appropriately.

    Recommendations:

    1. If you know that you regularly attempt to relay emails to addresses on your Unsubscribe and Bounce lists, you may wish to turn off the email notifications for errors entirely, as this could result in a large volume of emails to you.

    2. To decide whether or not the error should also be sent to the From Address, consider what type of transactional emails you're sending through the SMTP relay. If the From Address is an address at your organization, then it's probably okay for the From Address to also receive errors. But, if you're sending social networking "You have a new message from John" type emails, where the From Address is that of one of your users, you probably don't want your users to receive error notifications from JangoMail. In this case, uncheck the box to send errors to the From Address.

    Thursday, November 19, 2009

    Eight Steps to Optimize Email Deliverability Using JangoMail

    Overview:
    Email deliverability is a key concern for most email marketers, and at JangoMail, we think we do a pretty good job of ensuring the highest possible inbox placement of our clients' emails. JangoMail is a highly customizable platform, from sending speeds, to email headers, to SMTP protocol level customizations. Taking advantage of certain settings and features can help ensure high email deliverability.

    Some of these steps involve separating yourself from other JangoMail clients. It's not that JangoMail accepts spammers, but JangoMail does accept different levels of opt-in email marketing. For example, some customers use single opt-in, while other customers use confirmed opt-in. Generally, customers using confirmed opt-in experience higher deliverability. Therefore, different JangoMail clients have different reputations with ISPs, so if two clients are both using a username@jangomail.com From Address for example, they both can impact the reputation of the domain jangomail.com.

    The Eight Steps:

    Following the below steps will solve most email delivery issues to major consumer ISPs, like Yahoo, Hotmail, Gmail, and AOL.

    1. Use your own domain name in the FROM address. Brand your messages using your own domain name in the FROM address. This requires using an SPF record (see #5 below) that includes jangomail.com. If you use your_username@jangomail.com, the delivery of your messages is mixed in with everyone else using jangomail.com as their FROM address. All JangoMail accounts come with the option to use username@jangomail.com as the FROM address on email campaigns, but that's meant to help smaller volume users to get started, and is provided as a convenience to our clients. If you have your own domain name, use it - it only helps.

      a. In order to separate your reputation from other clients using jangomail.com as their FROM address, use an actual company (or based on your domain name/website) email address, such as john.smith@company.com.

      b. You can also send using a subdomain within your company, using an address such as marketing@newsletters.company.com. And, if you want JangoMail to handle reply management for that subdomain (our branded subdomain feature), let us know via a support ticket. Replies to your messages can be forwarded to an address of your choosing (replies normally go to the FROM address you used in your message). For instructions, see the PDF Setting up a Branded Sub-Domain.

      Who should do this? The technical person who manages your domain's DNS settings.
    2. Use a custom tracking domain based on your domain name. The tracking domain is the domain referenced in the URLs for our open-tracking mechanism, click tracking, the unsubscribe link used in your CAN-SPAM footer, the forward-to-friend link, the view-as-a-web-page link, and other links that offer tracking in your email messages. By default, every JangoMail account is assigned a system tracking domain that is shared amongst multiple clients. Example names are x.jango5.com and x.jmxded92.net. By setting up your own tracking domain, you can isolate yourself from the activities of our other clients. Create a CNAME record in your DNS that points to jngo.net (that's "jango" without the "a"). Then, go to Settings --> Tracking --> Tracking Domain and enter your tracking domain name. If your domain is mycompany.com, then setting up x.mycompany.com makes for the perfect tracking domain. A URL that looks more like you than us helps with your branding. See our blog article for more information.




      Who should do this? The technical person who manages your domain's DNS settings.
    3. Use a Domain Key based on the domain name you use in your FROM address. Yahoo and other email providers look for DKIM signatures in the headers of email messages. The presence of a DKIM signature fosters a sense of trust that the email was sent by who was purported to send the email. To set up a domain key in JangoMail, see our PDF entitled Setting up DomainKeys/DKIM with JangoMail. Note: Yahoo requires that you have a "postmaster" address at your domain.

      Who should do this? The technical person who manages your domain's DNS settings.
    4. After creating a DomainKeys/DKIM record, click the link in the confirmation email sent from Yahoo to postmaster@yourdomain. Whe you enable a new domain key in your accoutnt, we upload it to Yahoo so that they can process complaints properly and report them back to JangoMail via a "Feedback Loop." Yahoo has a special process where they send a confirmation email to postmaster@yourdomain, and that email message contains a link that must be clicked by you in order to activate the Feedback Loop. If you do not do this, complaints will not be properly reported, and your delivery to Yahoo email address may be negatively impacted by recipients that complain over and over and aren't added to your unsubscribe list.

      Who should do this? The person who has access to the postmaster@domain account for your domain. Usually this is your organization's system administrator.
    5. Add or edit the SPF record for your domain. An SPF record authorizes someone else (JangoMail, in this case) to send on behalf of your domain. This marks the "smtp.mail" header information with your domain, not ours, and messages sent to a gmail address, as an example, won't display "your_domain_name via jangomail.com." Instructions can be found in the PDF How to Publish SPF Records in JangoMail.

      Who should do this? The technical person who manages your domain's DNS settings.
    6. If you're sending HTML email, make sure you include a corresponding plain text message. Spam filters tend to add a point or so to messages that do not include a plain text component. This is as easy as setting the Plain Text Message to "auto-generate" (see the screenshot below.)  This will cause a plain text message to be generated (based on your HTML message) at the time of email sending. If the auto-generated message isn't good enough, you can also edit the plain text or simply create your own.

      Who should do this? The person using JangoMail.
    7. Enroll in the Sender Score Certified program. In order to be accepted, you must have a complaint rate of 0 to 0.1%, plus meet some other requirements. Once enrolled, your emails are sent from IP addresses that are certified. Hotmail virtually guarantees inbox placement for emails sent from certified IPs, and Yahoo prioritizes emails sent from certified IPs.

      Who should do this? The person using JangoMail.
    8. If using click-tracking, anchor text should be phrases, not URLs. Some spam filters look closely at how you use links to determine whether the link is legitimate or fraudulent. They do this to prevent phishing scams--a type of scam where an email pretends to be a request from a legitimate company in order to get the login credentials of that company's user, or take you to some other completely unrelated site. For more information on phishing, see the Wikipedia article on phishing. The best way to explain good links versus bad links is with an example:

      Good Link: <a href="http://www.browniekitchen.com/">Visit our web site.</a>

      Bad Link - the visible link is to browniekitchen, but the actual link is to somewhere else: <a href="http://www.steal_your_money.com/">http://www.browniekitchen.com</a>

      What makes the bad link bad is that the anchor text is a URL, and that domain in that URL does not match the domain in the link destination. Phishing filters look for this domain mismatch. In the good example, however, the anchor text is not a URL to begin with, so the phishing filter will accept it as legitimate.

      Who should do this? The person designing your email campaigns.
    Further Reading
    For more information on general JangoMail deliverability practices, see our Deliverability page on our web site.

    Additionally, there are simple steps that any email marketer can take with the content of messages to ensure high deliverability. The content-related issues are covered in the PDF document Optimizing Email Deliverability.

    Friday, November 06, 2009

    How we scaled up the JangoSMTP service to accommodate the ING New York City Marathon

    Overview of the New York City Marathon and its Email Alerts

    It was a sunny mid-September day when my head of sales informed me that the systems integrator for the 2009 New York City Marathon was looking at our SMTP service for the delivery of alert emails on runners during the marathon. Given that our SMTP relay service was relatively new at the time, we saw this as an opportunity to demonstrate the powerful tracking features and performance capabilities of our service.

    Having tried other email vendors and their own internal systems in the past, the marathon was looking to avoid past issues, such as large delays in the delivery of the email alerts and email blocking issues with consumer ISPs like GMail and Hotmail.

    The marathon had about 42,000 total runners. Friends and family members of each runner could "subscribe" to a runner, such that whenever the runner reached a checkpoint during the marathon, an email alert would be sent to the subscribers of that runner. This would be done electronically via a Chronotrack D-Tag. For more information on the electronic tracking of runners, see http://www.nycmarathon.org/race_scoring.htm.

    My team was told to expect anywhere from 400,000 to 2,000,000 email alerts to be sent out during the race. That represents an average of 10 to 50 email alerts per runner, depending on how many individuals subscribe to a particular runner.

    The Speed Problem

    The JangoSMTP service has been a single-node service since its launch earlier in 2009. It was serviced by one single fault-tolerant, RAID-based, multiple-CPU, high memory Windows server located at relay.jangosmtp.net. The SMTP service works by receiving email at relay.jangosmtp.net, and then passing emails along to one of JangoMail's 40 outbound SMTP senders for delivery to the final recipient. The relay.jangosmtp.net server could receive an unlimited amount of emails and saturate our upstream Internet provider's bandwidth, but it could only process, add tracking, and transmit to the outbound SMTP senders over the Internet at a rate of 250 emails/minute. I therefore calculated:

    250 emails/minute x 60 = 15,000 emails/hour

    Based on past marathon results, I estimated that the fastest runners would complete the race in about 2 hours, and the slowest runners would complete the race in about 6 hours. However, the marathon would be initiated in 3 waves of 14,000 runners each, distributed over an hour the morning of the marathon. So 6 hours of running time, plus an added hour for the start of the last wave, meant 7 hours of sending email.

    7 hours x 15,000 emails/hour = 105,000 emails over 7 hours

    Uh oh. We weren't nearly fast enough. Even at the minimum expected volume, we weren't fast enough by a factor of 4. And at the maximum expected volume, we only had 5% of the needed capacity.

    The two bottlenecks were 1) the processing of an email message, meaning the dis-assembly and re-assembly to determine what user it belonged to and add tracking mechanisms, and 2) transmitting the email to a SMTP sender. Point #2 warrants more explanation. While there is no bottleneck for relay.jangosmtp.net to receive emails from the outside world, there can be a bottleneck for relay.jangosmtp.net to transmit emails, since relay.jangosmtp.net must transmit the message to separate SMTP sender located on separate networks in separate data centers. This transmission happens over the Internet, and based on where the SMTP sender is located and the routing to it, speed can fluctuate.

    Time to Scale Up

    Load Balancing

    We needed to scale up, and scale up fast. The initial plan was to order four more servers, and have them each serve as an additional SMTP receiver and processor for relay.jangosmtp.net. The JangoMail architecture does not employ the use of appliance-based load balancers, so I decided to handle the load balancing via our Domain Name System (DNS).

    We created multiple DNS "A" records for relay.jangosmtp.net, each with a Time to Live (TTL) of 60 seconds. Five "A" records were created in total, each with a different IP address. The first of the five was the original IP for relay.jangosmtp.net, and the other four were for the four additional servers we commissioned.

    By keeping the TTL at a short 60 seconds, I could make certain that each of the five servers would receive an equal load of email every minute. And since not all DNS servers on the net respect TTLs and sometimes do their own caching, I confirmed with our tech contact at the marathon that their systems would NOT cache the IPs for relay.jangosmtp.net beyond the designated 60 second TTLs.

    SQL Query Caching

    Every email that arrives at relay.jangosmtp.net is disassembled, tracked, re-assembled, and then passed to an outbound SMTP server for actual sending. In order to determine what email belongs to what user, and what tracking options each user has selected, the originating IP address of each email message is looked up against an IP Address table, and then once the user is determined from the IP address, the UserAccounts table in the core database is queried to determine what tracking/DomainKeys options the user has selected. These two queries combined took anywhere from 0.05 seconds to 0.2 seconds, depending on the load on the database at the time.

    We shaved this time down to 0.001 seconds by caching the results of these queries and refreshing every five minutes.

    Multi-threading

    Our custom SMTP architecture is a multi-threaded model, allowing for the simultaneous processing and delivery of emails across user accounts. We had been informed ahead of time that the marathon would trigger email alerts from two originating IP addresses. We therefore configured two dedicated processing threads on each of the 8 servers. This gave us 16 total processing threads, and also isolated the processing/delivery of the marathon's emails from our other clients' emails during the race.

    Distributed Transactional Senders

    The SMTP service is part of JangoMail's transactional email platform, which also includes the SendTransactionalEmail API method. All transactional emails are sent through the email sender that is assigned for a particular user. For fault-tolerance purposes, every user has a list of transactional email senders assigned to it, such that if the first email sender is unavailable or offline, the email is passed to the second, and to the third, and so on, until the email is successfully transmitted. This approach was great for fault-tolerance and redundancy, but not for scaleability. If the first server in the list was online and available, then it would receive all the transactional emails for that account.

    I therefore decided to add an internally controlled user-level setting option to randomize the list of senders. Now, if a user's list of transactional senders included:

    Sender1, Sender2, Sender3, Sender4

    Now the relay.jangosmtp.net servers would farm out the emails for delivery to any sender in the user's list at random, ensuring that as many transactional senders as were assigned would receive an equal load of emails to deliver, rather than having the first available sender do all the delivery. This also aided in resolving the bandwidth bottleneck with the SMTP senders mentioned earlier.

    Still not fast enough - need 3 more servers

    Given our SQL query optimizations, multi-threading, additional servers, the timing now looked like:

    400 emails/minute/server x 5 servers = 2,000 emails/minute x 60 minutes = 120,000 emails/hour.

    120,000 emails/hour x 7 hours = 840,000 emails over 7 hours

    However, if the load was over 1 million emails, there would still be a delay. I decided to annex 3 additional servers that are already a part of the JangoMail network but weren't active on port 25, and turn them into 3 additional SMTP receivers. There were now 8 total DNS "A" records for relay.jangosmtp.net.

    With just 48 hours before the marathon, we were informed that the expected outbound volume, based on the number of subscribers so far, would be about 750,000 emails.

    And just in case all else failed...

    While we've always believed in the performance and reliability of our code and architecture, we decided that for a project of this caliber, a backup plan was necessary in case our custom SMTP architecture was unable to perform. The JangoSMTP custom architecture is what allows emails that pass through the SMTP relay to be open and click-tracked, and stored in a database, so that SMTP logs can be viewed and reports can be generated based on open and click timing, domains, and geo-tracking reports based on IP addresses. However, the primary issue for the marathon, was to ensure the emails were delivered, and delivered on time. Therefore, a backup plan was put into place that could guarantee the emails would be delivered, even if we had to eliminate the tracking and logging based on our own custom architecture. If we found that JangoSMTP could not handle the load, we would replace the instances of the JangoSMTP receiver with Microsoft's built-in SMTP service (part of Internet Information Services), such that emails would be received and delivered to the final recipient, without any processing needed in between.

    In order to isolate the marathon from our other clients in case this backup plan had to be put in place, we setup the domain marathon.jangosmtp.net, which mimiced the 8 A records for relay.jangosmtp.net, and we asked the system integrators for the marathon to connect to marathon.jangosmtp.net instead of relay.jangosmtp.net. This would allow us to re-direct just their email on the day of the race if needed.

    The Day of the Race - November 1, 2009

    I awoke at 7:30 AM EST on that Sunday, after having been out the night prior for Halloween. The emails would begin trickling in at 8:30 AM EST for runner check-ins, and the first wave of the race was set to begin at 9:40 AM EST.

    I was watching the race live on TV, while at the same time monitoring the traffic flows across our 8 instances of relay.jangosmtp.net. Emails were being received, processed, and sent quickly, and there was no backlog...until about 12:25 PM EST.

    All three waves had been released, and runners from all three waves were triggering a massive volume of email alerts. From 12:25 PM EST to about 12:35 PM EST, there was a 4-5 minute delay with final delivery. Thankfully, the backlog period only lasted 10 minutes. It makes sense that approximately 3 hours after the release of the first wave, that the highest volume of email was passing through, since the greatest number of runners would still be running around this time.

    Additionally, at about 1:00 PM EST, we discovered that comcast.net and att.net/bellsouth.net domains were blocking one of the IPs from which marathon email was sending. While we did have a mechanism by which domain-specific routes could be used, such that we could enable all comcast.net/att.net/bellsouth.net email to go through one specific non-blocked IP address, the complexity of the randomization system we had added to accomodate the bandwidth bottleneck rendered this mechanism non-functional. I called our lead developer, who was on call, asked him to make a change to the sender-determination algorithm, and re-deployed our code across all 8 SMTP server instances. We were now able to route all comcast.net/att.net/bellsouth.net email through a separate non-blocked SMTP sender. In the end, the marathon alert emails had less than a 0.3% blocking rate.

    After 1:00 PM EST, no further email deliverability or backlog issues ensued.

    Conclusion

    We were thrilled that we were able to pull this off for the 2009 ING New York City Marathon. Even post-marathon, we continue to make performance and feature enhancements to our transactional email platform. If you have an important project for which sending email is critical, please get in touch with us, and we'll work as hard for you as we did for the marathon.

    New API Method for Template-Driven Transactional Emails

    Overview 

    Marketers can now create and edit Transactional Email Templates on the Send Email Page and without the help of their IT team.

    To enable this, we launched a new API method: SendTransactionalEmailFromTemplate. Instead of passing the full details of the email message using the regular SendTransactionalEmail method, you can now simply pass the email Campaign ID and let your marketers use the JangoMail interface to dictate the email's creative content.

    SendTransactionalEmailFromTemplate works like the SendTransactionalEmail method, but does not require you to enter FromEmail, FromName, Subject, MessagePlain, and MessageHTML. Instead you must enter CampaignID, PersonalizationValues, PersonalizationColDelimiter and PersonalizationFields.


    Input Parameters

    Username
    Your JangoMail account username

    Password
    Your JangoMail account password

    CampaignID
    Marketers should create an Email Campaign as they normally would, starting on the Send Email Page (or just use the SendMassEmail API method). Once they create a campaign and send a test, you can find the Campaign ID in the Reporting and Analytics section of the JangoMail interface. Look in the ID column to find the Campaign ID.

    ToEmailAddress
    The single email address to whom you want to send this email message.

    PersonalizationFields
    Example:
    FirstName,LastName,Company,FromAddress

    JangoMail uses the following syntax for personalization and Marketers should continue to use this when creating transactional email templates. Mail-merge personalization tags can be used in the Subject, HTML Message, Plain Text Message, From Display Name, and From Email Address:

    %%FieldName%% 
    or
    %%FieldName**Default Value%

    The second version of the personalization syntax can be used in cases where the value of FieldName is blank, such that a default value is substituted instead of a blank. 

    PersonalizationValues
    Example:
    Ajay,Goel,Silicomm,ag@silicomm.com 

    PersonalizationColDelimiter
    Specify a column delimiter as follows:
    c for a comma
    s for a space
    n for a newline, or a hard break
    t for a tab

    Options
    A comma separated list of name/value pairs.  The names of the various options and their associated values are explained below.
     
    You may specify:
    TransactionalGroupID (a numeric ID of a previously created Transactional Group)
    SkipUnsubCheck ("True" or "False")

    You can also specify the following, but if not specified, values will pull from your original email campaign. User-specified values here will override values in your email campaign:

    ReplyTo (any valid email address)
    CC (any valid email address)
    BCC (any valid email address)
    CharacterSet (a character set like "ISO-8859-1" or "US-ASCII")
    Encoding (either "7 bit" or "Quoted Printable" or "Base 64")
    Priority (either "Low", "Medium", or "High") 
    UseSystemMAILFROM ("True" or "False") 
    Receipt ("True" or "False")
    Wrapping (a numeric value from 0 to 100, with 0 meaning no wrapping takes place)
    ClickTrack ("True" or "False") 
    OpenTrack ("True" or "False")
    NoClickTrackText ("True" or "False") 
    Attachment1 (the name of a previously FTPd file, like "Invoice.pdf")
    Attachment2
    (the name of a previously FTPd file, like "Invoice.pdf")
    Attachment3 (the name of a previously FTPd file, like "Invoice.pdf")
    Attachment4 (the name of a previously FTPd file, like "Invoice.pdf")
    Attachment5 (the name of a previously FTPd file, like "Invoice.pdf")

    Example

    In the below example, the input parameters are:

    Username:jangomail
    Password:******
    CampaignID:265987456
    ToEmailAddress:jangomail@gmail.com
    PersonalizationFields:FirstName,OrderNumber
    PersonalizationValues:Bob,123456
    PersonalizationColDelimiter:c
    Options:ReplyTo=jm@gmail.com,OpenTrack=True

    This example assumes that the Subject and/or Body contains personalization placeholders for FirstName and OrderNumber.  In fact, for Campaign ID 265987456, the actual message is:

    ------BEGIN MESSAGE-------
    Dear %%FirstName**Valued Customer%%,

    Your order has shipped.  Your order number is %%OrderNumber%%.
    ------END MESSAGE-------

    This transactional email will be open tracked.  To ensure that it will also be click tracked, we would add "ClickTrack=True" to the Options parameter.  If we wanted it to be a high priority message instead of the default medium priority, we could add "Priority=High", such that the full Options string would look like:

    Options:ReplyTo=jm@gmail.com,OpenTrack=True,ClickTrack=True,Priority=High





    To test the operation using the HTTP POST protocol, visit the JangoMail API page on this method and click the Invoke button.

    Frequently Asked Questions

    Q. What's the difference between SendTransactionalEmailFromTemplate and SendTransactionalEmail?
    A. When calling SendTransactionalEmail, you are passing in the full details of that email message, including the Subject, the HTML Message, the Plain Text Message, tracking options and much more.  However, if you've already created a template message in the Send Email section of the JangoMail web interface, you can call SendTransactionalEmailFromTemplate to send transactional emails and avoid having to pass in all the message details on every method call.  You simply reference the Campaign ID of the email message that you created in the Send Email section.

    Q. I see there's a PersonalizationColDelimiter input paramter.  Where is the PersonalizationRowDelimiter input parameter?
    A. Since this is a method to send a single transactional email, only one set of values can be provided for the single recipient of the email message.  There is no need for a row delimiter since the data should only be for one record.

    Q. What is the TransactionalGroupID?
    A. This is an optional setting that can be specified as part of the Options input parameter.  Transactional Groups are a way to categorize different types of transactional emails, like Order Confirmations, Shipping Notifications, and Thank You messages.  You can create different Transactional Groups using the web interface or by calling AddTransactionalGroup.  Every Group has a numeric ID assigned to it, and so to assign a particular transactional email to a Group, you can set the TransactionalGroupID.

    Q. How do I send attachments with my transactional email?
    A. You can specify the names of attachments in the Options input parameter.  However, the file names you specify must already be present in your account.  You should FTP your files to client.jangomail.com/Attachments prior to calling this method with attachments.

    Tuesday, October 27, 2009

    Official Launch of JangoSMTP.com, Our Stand-Alone SMTP Relay Service

    We have just launched JangoSMTP.com, a new stand-alone SMTP relay service and the first designed for email marketers.

    Why use it?
    JangoSMTP is the first SMTP relay service to offer open and click tracking. It also comes with a variety of features that contribute to its extreme deliverability
    • DomainKeys/DKIM Signing
    • SPF/SenderID Authentication
    • Sender Score Certification
    • Feedback Loops with ISPs
    Visit our site for JangoSMTP's Full Features List.

    Who is it for?
    JangoSMTP can be utilized by users of desktop email clients (Outlook, Thunderbird, etc.),  Gmail users, and web programmers who send transactional emails through their own corporate servers.

    Where can I learn more?
    Go to http://www.jangosmtp.com/ for more information or Contact Us directly.

    Monday, October 26, 2009

    New API Method: AddTransactionalGroup

    We just released a new API method for the JangoMail API which allows you to add a Transactional Group to your account:

    *AddTransactionalGroup
      Adds a new Transactional Group to your account. Returns a string.

    We also recently released 3 other transactional email API methods. These methods allow you to retrieve opens, clicks, unsubscribes, bounces, and complaint statistics for a single transactional email in your account.

    Visit api.jangomail.com for a full list of our API methods.

    Thursday, October 22, 2009

    New Design: Features Page

    JangoMail has a very comprehensive feature list and we've been working on a way to organize it so that it's easy to navigate. We want to make sure that our current and prospective customers are able to identify all of our capabilities and can easily find all of the information and tutorials we have on each feature.

    We are excited to announce that we just relaunched our Email Features page, which now has an improved navigation system. You can expand each feature set and feature for more information. 



    *Use the Table of Contents to find the feature category you are interested in.

    *To navigate to a certain feature's description, video, tutorial or blog entry, simply click the arrow next to that feature.


      Then click on the link for the information you would like to see.


    *To see a visual description of a certain feature, click on the name of that feature.


      A window will pop up with a visual description of the feature.




    Browse through our new page yourself at: http://www.jangomail.com/features_overview.asp. Let us know what you think!

    Wednesday, October 21, 2009

    Two SMTP Service Bug Fixes

    Tonight we've deployed two bug fixes to the SMTP relay service:
    1. Previously, emails sent with very long Subject lines, such that the Subject line folded onto the next line, were improperly processed, and this could result in headers being visible in the email body. This is now fixed.
    2. Previously, emails sent with very long From lines, such that the From line folded onto the next line, were improperly processed, and this could result in the email not being transmitted to the final recipient at all. This is now fixed.
    3. Previously, encoded subject lines, such as:

      =?utf-8?Q?You've_received_=E2=82=A8229.64_($2.00_USD)_in_your_Surveyhead_?= =?utf-8?Q?account?=

      would not have their encoding preserved. This is also now fixed.
    Technical Resources:

    Those wishing to read about the allowance of folded lines as stated in the SMTP specification can do so here: http://www.faqs.org/rfcs/rfc822.html. Specifically, read section:

    3.1.1. LONG HEADER FIELDS

    Monday, October 19, 2009

    New Transactional Email API Methods

    We have just released 3 new Transactional Email API Methods for the JangoMail Email Marketing API.

    These new methods allow you to retrieve opens, clicks, unsubscribes, bounces, and complaint statistics for a single transactional email in your account:

    *Reports_Transactional_GetSingleEmailStats_Dataset
      Retrieves statistics for a transactional email. Returns a .NET DataSet.

    *Reports_Transactional_GetSingleEmailStats_String
      Retrieves statistics for a transactional email. Returns a string.

    *Reports_Transactional_GetSingleEmailStats_XML
      Retrieves statistics for a transactional email. Returns an XML document.