Skip navigation

Do It

3 Posts authored by: cheliyanp-Oracle

As Gmail turns 10 this month, I wanted to share some of my experience with deliverability recently. In our expansions to new markets we have been finding some clients coming on board with a majority of their database consisting of Gmail recipients. And with the continuous development of the Gmail filtering system it is becoming more and more difficult to get your email to the Inbox. They have new features such as Inbox tabs/category labels and priority inbox.

 

We are running into scenarios where emails are going straight to the SPAM folder even though email best practices were applied. Like other ISPs, Google’s email platform is for the recipients, not senders and they are therefore challenging marketers to actually build relevant content, use valid address collection methods, and constantly manage their lists. Gmail launched in 2004 and in 2012 it claimed to have over 425 million users globally. I would imagine this number has increased over the past couple of years. (http://googleblog.blogspot.co.uk/2012/06/chrome-apps-google-io-your-web.html). The days of batching and blasting emails is long over, and getting to the Inbox in Gmail is a constant reminder of this.

 

Now more than ever Marketers need build campaigns based on behavioral data and consent. Here is a list of items that will help you improve your Gmail deliverability. But before I list the items it is important to remember that the filtering logic is self-learning and constantly evolving. These suggestions will help improve the deliverability but at the end of the day we do not know the exact reason Gmail placed your email to the SPAM folder, outside of the canned ‘Why is this message in SPAM’ heading above filtered messages.

 

  1. Use a dedicated IP address
    • This will allow you to maintain your own sender reputation.
    • It is important to maintain a strong reputation, which can be measured at senderscore.org so that your email at least gets to Gmail.
    • This is a clear indication of to all email providers of your trustworthiness.
  2. Authenticate messages with DKIM, SPF, and DMARC
    • Gmail requires a minimum 1024 bit DKIM key and this is available through our Deliverability Cloud Service packages.
    • They do not authenticate messages with keys lower than 1024 bits.
    • DKIM signs the FROM address domain to allow authentication of the sender domain.
    • SPF records identify which servers are authorized to send mail on behalf of your domain.
    • Emails that don’t have SPF or DKIM go through a higher filtering process than those messages that have authentication in place, and in the case of SPF may result in rejection of the message. 
    • DMARC allows senders to indicate to receivers how they authenticate with SPF/DKIM and what to do with messages that fail those checks
  1. IP Warming is a MUST
    • Gmail does not like new IPs with no reputation. This goes back to the SenderScore in point 1.
    • I would recommend a minimum 4 week IP warming plan be conducted to get good reputation on the IP and within Gmail.
    • The campaign must be based on recent behavioural data. I would even build it out as a separate campaign for Gmail so you can monitor its delivery and address any issues in the process.
    • Start slow. Only a few hundred messages per IP over the first few days.
  2. Get CONSENT and Manage Activity
    • ONLY send email to addresses that have explicitly opted in. Single opt-in will suffice but Confirmed opt-in is recommended. Sending email to Gmail recipients on an opt-out basis will almost guarantee junk filtering.
    • Remove inactive addresses from your lists over time. If certain recipients never open or click through your emails, they are hurting your reputation at Gmail. Remove them, send them a ‘manage subscriptions’ campaign or significantly reduce the amount of mail you send them.
  3. Be CONSISTENT
    • They really like if the messages is coming from the same IP and bounceback address. This allows them to more accurately assign reputation to the address/IP pair.
    • Use one specific bounceback address for Gmail recipients. If on the same IP, you can use different Bounceback addresses for each email stream (transactional vs promotional for example).
    • Where possible, segment different email streams by IP.
  4. ‘Mark as SPAM’ button
    • One of the key indicators to Gmail that the recipient doesn’t like your emails. We recommend keeping this complaint rate down below 0.01%. While you won’t get complaint data from Gmail to know which addresses have flagged you as spam, you can use data from other ISPs (via the SPAM Unsubscribe report in Eloqua) to gauge your potential complaint rate at Gmail.
    • This is where you need to build content based on previous behavioural data and explicit customer information.
  5. Ask recipients to add you to their Gmail address book.
    • This is an enormous step to ensure the email always gets delivered to the inbox.
    • Try creating a dedicated email header for Gmail segments that informs the recipient how to add them to the address book and how it will help deliver your important messages.
  6. ‘Not SPAM’ button
    • This is the second most important factor to help messages to arrive into their inbox
    • If users click the ‘Not SPAM’ button after a messages was delivered to their SPAM folder, it is a clear indicator to Gmail that this email is relevant to the recipient and helps their filters adjust categorization of future messages.
  7. Avoid using email URL shorteners
  8. Avoid pushy subject lines or anything that ‘looks’ spammy.
    • For transactional mail, indicate this in the subject line (eg: ‘Invoice’, ‘Order Confirmation’, etc).
  9. MONITOR your affiliates
    • What affiliates do on your behalf can hurt your brand reputation. Ensure they adhere to the same standards as your own marketing team.

 

I hope you find these guidelines useful and launch successful campaigns to Gmail. Please share your thoughts and experiences with the community so that we can all learn and become even better marketers.

 

Special thank you to sweeney for helping out with this post!

Important: This Cloud Connector/Component will be decommissioned  after March 31st 2017. Please install the replacement app.

Name Analyzer

This article will go through the installation of the Name Analyzer cloud connector and provides a sample use case. Name Analyzer takes the names and email addresses of your contacts, analyzes for garbage ('asdf', 'test@test.com' or 'mickey mouse') and determines if they are male or female.

You will also need to register at cloudconnectors.eloqua.com

What is the difference between cloundconnectors.eloqua.com and Appcloud.eloqua.com

 

How to Install

Go to the following URL to install the connector to your instance of Eloqua.

Eloqua Name Analyzer

 

Click on the green “Get App” button in the top right corner:

GetApp.jpg

 

A new screen will open. Click on the “Add Connector”:

1-26-2012 15-38-40.jpg

If you are not logged into Eloqua, you will be prompted to login. It’s recommended that you click the “remember me” button. After logging in, you will see a screen similar to this:

1-26-2012 15-49-32.jpg

You can close this window now. The connector has been successfully installed on your instance of Eloqua.

 

Setting up the Connector in Eloqua

 

I would recommend either adding this cloud connector to your data standardization program OR as a separate program where you can run contacts through arbitrarily when you need to clean up data. Here is a simple 3 step program. This ideally would have a feeder that will pull new contacts through daily to mark them as valid or invalid contacts.

1-26-2012 16-41-02.jpg

Each connector executes as an action in a step in Program Builder. If you look at step 200 in the example above, you will notice a cloud icon. This indicates that its a cloud connector step. Once a contact hits that step, teh Connector grabs that contact, and processes it based on the logic defined in the connector. When its done, the Connector changes the status of the contact in the program, and the contact continues to the next step.

To use the Connector in Program Builder:

  1. Create a step in the program where you want the step to execute (e.g. step 200)
  2. Set the action of the step to : "Cloud Connector"
  3. You will be provided with a list of Cloud Connectors that have been created. Select the correct one from the list. It should say 'Name Analyzer' by default.
  4. Click the Configure button. This should open up a new window and call out to the cloud connector configurations.

 

Now you are within the cloud configuration. The first tab that would have opened up is the Configuration tab. This is where you can set the text values that is stored to the contact field after its done analyzing the name and/or email address. e.g. If the name is Male, insert text 'Male' into a field.

1-30-2012 09-44-18.jpg

 

Once you have picked the text you would like to store, you will need to map the fields for analysis and the fields where you are going to store the results. This is found under the 'Field Mappings' tab. The select list by each mapping is a list of your available contact fields. All you need to do is map the corresponding fields. e.g. First Name Contact Field - Mapped to - First Name

 

1-30-2012 09-49-34.jpg

You're now ready to go. The validity analyzer looks at the following to figure out whether a person's contact information is valid:

 

For Example:

- First Name: to understand if the name is known to exist (by cross-referencing against a database of known names)

- Full Name: looking for known bad names ("mickey mouse" or "donald duck" where the first name may be valid itself ("mickey" or "donald")

- Email Domain: looking for @test.com or @1.com

- Email Name: looking for aaa@ or 111@ as invalid email names

- Phone Number: looking for numbers that are too short, all the same number (11111, 22222), or known to be bad (555-1212)

 

As a next step I would enable to program/step and run a set of contacts through to make sure everything is working as expected. Happy Cleaning!!

Creating your own sample Eloqua Data Lookup script (cookie based) for your Developer



 

Our customers are always looking at ways to customize their website and integrate it with Eloqua. One of the key functions to help you integrate is Data Lookups. A data lookup is a function which allows the dynamic pulling of data from the Eloqua system for use on a given web page. The range of data that can be returned is virtually unlimited allowing for Contact, Prospect, Data Card, Group membership or Visitor data to be returned. You can use data lookups to populate data in a form or validate if the contact is part of an email group. Advanced use cases include using data lookups within Flash. Whatever the use case may be, I always receive requests to generate a sample data lookup script for the developer (who is usually not familiar Eloqua). Some of you may know that we do have a way to ‘generate’ a sample data lookup script but it requires some additional work to get a working example (which is what the developer is always looking for). Hopefully the steps below will help you create a working web page that you can provide to your developer. In this example we will create a lookup based on cookie.

 

  1. Navigate to Automate -> Forms -> Web Data Lookup (tab). Then Data Lookup -> New data lookup.
    • a) Give your data lookup a name
    • b) Select Visitors as your Data lookup type
    • c) Select a Visitor Profile view for data you would like to be returned.
    • Click Save

 

pic1.jpg

 

2. Go to your note pad and create a new HTML file.

 

3. Add the following code at the beginning of your page.

<html>

<body>

 

4. Now from your Data Lookup screen in Eloqua.

  • Click on Data Lookup Options (top right)
  • Click ‘Get Data Lookup Scripts’
  • Grab the code from the ‘Form Auto-Population Script’ and add it below the code you added in step 3. (This code returns all the data in the selected view)

 

pic2.jpg

 

5. Add the two standard tracking scripts used on your web page. (Note URLs below are fake). You can copy this directly from your web page. Ensure that you URL are absolute links.

 

<script type='text/javascript' language='JavaScript' src='http://www.somecompany.com/includes/elqCfg.js'></script>

<script type='text/javascript' language='JavaScript' src='http://www.somecompany.com/includes/elqImg.js'></script>

 

6. Back to your Data Lookup screen in Eloqua.

  • Grab the code from the ‘Integration Script’ and add it below the code you added in step 5.

 

7. Now you need to call another JavaScript that is included in the tracking scripts package. This should be in the same folder as your standard scripts.

 

<script type='text/javascript' LANGUAGE='JavaScript' SRC='http://www.somecompany.com/includes/elqCPers.js'></script>

 

8. Almost done. Now you just need to add the following tags to complete the HTML page.

 

</body>

</html>

 

That’s it. If you run this HTML file in your browser (that has an Eloqua cookie from your companies web page), you should see data rendered within the page. This sample file can be provided to your developer as a working example on how Eloqua data lookups work. I have included a full version of the code below.

 

 

-----------------------------------------------------------

 

<html>
<body>

<SCRIPT TYPE='text/javascript' LANGUAGE='JavaScript'><!--//
function SetElqContent(){
if (this.GetElqContentPersonalizationValue){

document.write('<p><b>Personal Info:</b>');
document.write(GetElqContentPersonalizationValue(''));

document.write('<p><b>First Name:</b>');
document.write(GetElqContentPersonalizationValue('V_ElqFirstName'));

document.write('<p><b>Last Name:</b>');
document.write(GetElqContentPersonalizationValue('V_ElqLastName'));

document.write('<p><b>Email Address:</b>');
document.write(GetElqContentPersonalizationValue('V_ElqEmailAddress'));

document.write('<p><b>Company:</b>');
document.write(GetElqContentPersonalizationValue('V_ElqCompanyName'));

document.write('<p><b>Phone Number:</b>');
document.write(GetElqContentPersonalizationValue('V_ElqPhoneNumber'));

document.write('<p><b>Visit History:</b>');
document.write(GetElqContentPersonalizationValue(''));

document.write('<p><b>Total Visits:</b>');
document.write(GetElqContentPersonalizationValue('V_Total_Visits'));

document.write('<p><b>Total Pages:</b>');
document.write(GetElqContentPersonalizationValue('V_Total_Pages'));

document.write('<p><b>Last Visit:</b>');
document.write(GetElqContentPersonalizationValue('V_LastVisitDateAndTime'));

document.write('<p><b>Other Info:</b>');
document.write(GetElqContentPersonalizationValue(''));

document.write('<p><b>Salesperson:</b>');
document.write(GetElqContentPersonalizationValue('V_Salesperson1p'));

} else {
document.write('<p><b>Personalization functions not found</b><p>');
}
}
//--></SCRIPT>

<script type='text/javascript' language='JavaScript' src='http://www.somecompany.com/includes/elqCfg.js'></script>
<script type='text/javascript' language='JavaScript' src='http://www.somecompany.com/includes/elqImg.js'></script>

<SCRIPT TYPE='text/javascript' LANGUAGE='JavaScript'><!--//
var elqPPS = '50';
var elqDLKey = escape('9adf75e2f3cb4a1b9c5f344d68342356');

var elqDLLookup = '';
//--></SCRIPT>

<script type='text/javascript' LANGUAGE='JavaScript' SRC='http://www.somecompany.com/includes/elqCPers.js'></script>

</body>
</html>

 

 

-------------------------------------

Filter Blog

By date: By tag: