Solving SendGrid Yahoo Mail Deliverability and Deferred Issues

I became a new customer of SendGrid a few months ago.  The biggest draw to them was the features they offered for an affordable price.  Though, chances are you know all about their features.  What you really want to know is how to fix Yahoo deliverability issues.

You should know that I had Yahoo deliverability issues from the day I signed up and got a dedicated IP.  The date I signed up and started to send mail through SendGrid was October 24th 2016.

The day Yahoo emails actually started being delivered? December 1st 2016. That is a total of 38 days before I could even reach my Yahoo users.  Yes, it was an absolute nightmare, and I was close to jumping ship.

Before we get to the solution (spoiler, there isn’t one), let’s first make sure that you have everything set up properly for best sending practices.

Whitelabel Email

Each email provider has a slightly different way of authenticating emails. SendGrid has authentication steps listed under Settings -> Whitelabels.

Before you send a single email, make sure you complete each section:

  1. Whitelabeled Domains
  2. Whitelabeled Email Links
  3. Whitelabeled IPs

I am not going to walk you through this because if you are at the post, chances are you probably already did all this.  If you want to avoid having emails bounce or being deferred then make sure these 3 steps have been completed.

Make sure your Sender IP is Clean

I am fairly certain that SendGrid provides clean mailing IPs, but you should always double check and make sure your dedicated IP is not listed on any black sender lists.

Head over to mxtoolbox or SenderScore to check your IP against known blacklists.

Also check the health of your IP sender score, which can also be checked at SenderScore.

Let’s assume you have a clean IP and a 99% sender score. Yahoo should love you at this point right? Well, you’d be wrong.  Even so, it’s important you check these to make sure it’s not causing problems.

E-Mail Best Practices

Make sure you use best practices when sending email to give you the best chance that an email will reach an inbox.

Again, I’m not going to go through this here because I am assuming you know what you are doing.

If you are new to email then read up on SendGrid’s Best Practices.

What I will emphasis here is to make sure you use List-Unsubscribe headers in EVERY single email you send. Sendgrid talks a bit about why they are important.

You want your users to be able easily click to opt-out of email rather than click the SPAM button.  There is an easy way to add unsubscribe links to your footer on every single email.

You may also want to create Unsubscribe Groups for the different type of emails you send.  You might have different newsletter types, or transactional emails, Re-Enagement Emails, etc.  Each type can have its own subscription group that a user can opt in or out of.

It’s an awesome feature and the main reason why I am using SendGrid.  Delve deeper into SendGrids official libraries for more information on how to use it within your apps.

If you guys make a comment and want to see my PHP code then I’d be happy to paste it here, but I don’t want to get too off topic.

Now, if you’ve already done all that and are still having problems then continue on.

Reach Out to SendGrid

Reach out to SendGrid’s support team to make sure that they know about your issue.  Their support team is generally pretty helpful in the few times I contacted them.

However, in regards to deliverability you will likely get a generic reply about what a deferred email is and best practices.

Chances are, their support team can’t help you. You see, SendGrid is supposed to already warm up and IP for you.  I mean, they invested money in a Warm-UP IP video, so you’d think this thing is pretty top notch huh?

Well, I am sure I went through the warm up IP process but it didn’t help me with Yahoo email being delivered.

The WorkAround

If you want to ensure Yahoo users will get your mail then look for @yahoo.com emails and send one through SendGrid and send another through your web server’s mail or your previous email provider.

When you see Yahoo mail starting to be delivered then disable the 2nd option.

I didn’t use this method for all emails, just the extremely critical ones like password resets, etc. Once I noticed that email was being delivered I switched it back through SendGrid.

The Solution

Chances are that every single email provider you send to will accept your mail without a problem.  If there are some that are blocking you, then reach out to them through the proper channels and they will remove the block.  I had to do this for att.net emails.

Take a close look at your Activity log to see which emails are being blocked or deferred.

The solution to Yahoo is to just wait. Yep. That’s it.  Just wait.  You can’t do shit about it. As long as you are following best practices then it’s just a matter of waiting for Yahoo to accept the new IP.

 

I sent a Yahoo Bulk email request form and never heard back from it.  It’s possible it helped, so you may want to fill it out as well.

In the meantime, I kept sending emails through SendGrid and they kept getting deferred.  Occasionally there would be a random day or two that a few emails would actually arrive at inboxes but then it would go back to being deferred.

Keep an eye out for those days!  It’s a good sign.

Notice those days where Delivered is above 100%?  That’s because the differed emails started to go through and more were being delivered than sent until things normalized.

My delivery rate is now around 94% which is great and probably what I had before I switched to SendGrid.  The remaining 6% of emails not being delivered are people who have opted out or bounced.

If you have a similar story or have a better solution then let me know.

How to Designate an IP Address as Permitted Sender

If you have your own domain handling email, then chances are you may run into email issues.  It is extremely important that you properly designate your IP Address as a permitted sender.

First, let’s test to see if your domain is a permitted sender.

Log into your domain’s email account, brant@example.com let’s say.  Send an email to another email account that you have access to.  Just to name a few… gmail, Yahoo!, or Hotmail.

The important part is for you to view headers of this email, often referred to as “Show Full Headers”.

You will see something that looks like this, but note the SPF softfail error:

—- Original message —–

X-Received: by 10.224.25.8 with SMTP id x8mr31561868qab.77.1382465370255;
Tue, 22 Oct 2013 11:09:30 -0700 (PDT)
Return-Path: brant@example.com
Received: from my3.example.com (my3.example.com. [64.131.70.223])
by mx.google.com with ESMTPS id k5si10380639qen.50.2013.10.22.11.09.30
for send@domain.com
(version=TLSv1 cipher=RC4-SHA bits=128/128);
Tue, 22 Oct 2013 11:09:30 -0700 (PDT)
Received-SPF: softfail (google.com: domain of transitioning  brant@example.com does not designate 64.131.70.223 as permitted sender) client-ip=64.131.70.223;
Authentication-Results: mx.google.com;
spf=softfail (google.com: domain of transitioning brant@example.com does not designate 64.131.70.223 as permitted sender) smtp.mail=brant@example.com

 

If you see Received-SPF: pass in the header then you have nothing to worry about.  However, as you can see from above, I have a softfail issue.  You may also see some with “fail”.

The fix is actually pretty easy.  Login to your registrar where you registered the domain.  What we need to do is create a new TXT record and add that specific IP (64.131.70.223) as a permitted sender.

The record will look something like this:

TXT    example.com    “v=spf1 ip4:64.131.70.223 ~all”

Add this entry to your registrar and wait for the record to update across the web.  You can test your TXT / SPF entry with this handy tool.

A few things to note here:

  • Make sure you use the quotation marks around the whole thing.  (Do not just copy and paste from here because WordPress sometimes uses a different characters for quotes.)
  • The last part ~all designates a softfail for any non permitted senders.  Softfail basically means that you haven’t finalized your email settings yet.  These emails have a chance of getting through, even though they fail.
  • Once you send another test email and confirm that you PASS, change the ~all to -all.  This means that any emails not from your designated senders should fail.

Sounds great, but what happens when you use another email provider, like mailjet to send email on your behalf?

Your TXT entry will then look like this:

TXT    example.com    “v=spf1 ip4:64.131.70.223 include:spf.mailjet.com -all”

Setting up email can be a bit frustrating, so hopefully this helps speed things along.

Still confused?  You may also find Eric’s article on setting up SPF records useful.