Shared Hosting + WordPress Notifications + Google Apps

I help a family member run a website for a small business and we recently discovered that the contact form notification emails were not being delivered. The contact submissions were in the Feedback section of the dashboard, but the notification emails were not being delivered to the email address on the form.

Background Information

Domain Registrar: Namecheap
Web host: Namecheap
cPanel Version: 11.40.1 (build 13)
DNS: Namecheap hosting servers
Email: Google Apps
Contact Form: Jetpack
Contact email: Generic Gmail account

Initial Findings

  • If I changed the contact email address to one of the domain’s existing Google App email addresses, the contact form notifications were delivered
  • If I added a new 0 priority MX record of mail.domain.com, the notifications were delivered to any email address (but this breaks the Google Apps email)
  • I looked in the webmail account for the the standard WordPress notification email address (wordpress@domain.com) and found 60+ emails with the this subject:

    Mail failure – rejected by local scanning code

    The body of the emails contained the following:

    A message that you sent was rejected by the local scanning code that
    checks incoming messages on this system. The following error was given:
    “Relaying not permitted”

I spent a couple hours playing around with the WP-Mail-SMTP plugin, Google App settings, cPanel settings and nothing was helping.

My initial thought was that the MX record shouldn’t affect outgoing email, but I was wrong. Finally, I found a Namecheap support page which explained the problem:

..to send emails from our server, domain should be added to it and have MX records pointed to the server where this domain is hosted.

To summarize: Email generated by the server will not be sent unless the domain is added to the hosting account AND the MX records point to the same location.

The fix:

  • Create a subdomain (because the subdomain isn’t setup with Google Apps)
  • Install the WP-Mail-SMTP plugin
  • In order to force outgoing emails to use the subdomain, configure the plugin as is explained on the Namecheap support page

Once I completed the setup, the email notifications were fixed. I had a hosting account on Bluehost for years and I never ran into this issue, so I’m assuming that they don’t have the same limitation on emails. Has anyone else run into this issue with other shared hosts?

WordPress 3.9

I’m really excited about WordPress 3.9, which was released today.

There are so many great additions, especially to the post editor.

This video is shown on the update page and has a great overview of all the changes:

Both Post Status and WP Tavern have great recaps.

Check it out!

WordPress 3.8 Beta 1

WordPress 3.8 Beta 1 dropped today. It looks great. I really love the new Admin Color Schemes options. In order to charge your color scheme, go to Users → Your Profile and select one of the four options.

WordPress 3.8 Midnight Theme

I’m really digging the Midnight scheme.

See the full announcement here.

The final release date is December 12th, so start testing!

WordPress 3.6 – Native Support for Audio

While I was messing around with WordPress 3.6 and audio capabilities, I decided to the test the native support for audio.

Here are a couple things to watch out for:

1. Your host or settings may limit the size of on file uploads. To get around that limitation you can upload the file via FTP. But if you do that the file won’t show up in your Media Library. If this is the case, download the Add From Server plugin. This plugin adds a link in the Media Library which allows you to add file from your server to the Media Library. From there, it’s easy to embed in your post.

An alternative is to use FTP and then wrap the link to the file in audio shortcode. Here’s an example:

[audio mp3="http://www.kmarsden.com/wp-content/uploads/2013/08/Trojans.mp3"][/audio]

2. Get rid of the spaces in your file names. The media player won’t work if the song/video has spaces in the name.

3. Not all browsers will support the mp3 embed. See the Codex for fallback methods.

4. The width of the audio player is set to 100%. You can change this by setting a smaller width in your child theme’s style.css. This is what I did:
.mejs-container {
max-width: 400px;
}

Just don’t go much lower than 200px;

WordPress Local Development – Installing wpshell

This post was in draft status for a few months, but today I was trying to spin up wp-cli and had some configuaration issues. Instead of hacking around, I hopped onto wpshell instead. Since this draft post helped refresh my memory, I decided to finally post it.

I should also note that wpshell isn’t under active development, so in the long run wp-cli is probably the best option.

I first heard about wpshell when I read Danilo Ercoli’s interview on WPDaily. I was immediately interested because I’m working to update a plugin and the process of trying out different WordPress functions is a bit time-consuming.

What is wpshell? Simply put, wpshell allows you to run WordPress and PHP functions from the command line.

The installation is fairly easy. I’m running Mac OS X 10.8.3 and using MAMP for local development. Open Terminal and follow these steps:

First, move to your local WordPress directory. For me it’s: cd Applications/MAMP/htdocs/localdev

Check out wpshell by typing: svn co http://code.svn.wordpress.org/wpshell wpshell

Change to the wpshell subdirectory: cd wpshell

Edit wpshell: vi wpshell

After editing, my wpshell file looks like this:

#!/bin/bash
shell=$(dirname $0)"/wpshell.php"
if [ -t 0 ]; then while [ true ]; do /Applications/MAMP/bin/php/php5.3.6/bin/php $shell if [ $? -eq 0 ]; then break; fi done else set -f read -s input echo $input | /Applications/MAMP/bin/php/php5.3.6/bin/php $shell stdin fi

Only the bolded lines need to be updated.

If you aren’t familiar with VIM commands, press a to edit the file. Enter CTRL + C when you’re done and then :wq to save the file. If you want to exit without saving enter :q! instead of :wq

Next, edit the wpshell-config.php file: vi wpshell-config.php

My config file looks like this:

$_SERVER['HTTP_HOST'] = 'Kevins-MacBook-Air.local';
$_SERVER['SERVER_SOFTWARE'] = 'apache';
$_SERVER['REQUEST_URI']     = '/';
$_SERVER['SERVER_ADDR']     = gethostbyname( $_SERVER['HTTP_HOST'] );
$_SERVER['HTTP_USER_AGENT'] = 'wpshell/1.0';
$_SERVER['REMOTE_ADDR']     = '127.0.0.1';
$_SERVER['REMOTE_PORT']     = '0';
$_SERVER['QUERY_STRING']    = '';

define('ADMIN_PLUGINS', true);

require dirname( __FILE__ ) . '/module-wpdb.php';
require dirname( __FILE__ ) . '/module-fshell.php';
require dirname( __FILE__ ) . '/module-hello.php';
require dirname( __FILE__ ) . '/module-wpreference.php';

require dirname( dirname( __FILE__ ) ) . '/wp-config.php';
chdir( dirname( dirname( __FILE__ ) ) );

~

Only the bolded lines need to be updated updated.

Once you’re done editing the file, enter CTRL + C and then enter :wq to save the file.

If all went well, you should be able to run wpshell. At the Terminal prompt enter: ./wpshell
and you should see the wpshell prompt. At this point you can enter php commands or WordPress functions.

Here are some resources if you’re having trouble installing wpshell

Thorsten’s blog post on wpshell

Daniel Bachhuber’s blog post and presentation slides

Daniel Bachhuber’s WordCamp presentation on wpshell and wp-cli

The video linked in the wpshell WATCHME file

One alternative is to use the Debug Bar Console plugin. Before I went through this whole process, I didn’t know about the Debug Bar Console, but now that I’ve installed it, I’ve found the functionality to be pretty similar.

WordPress Filters

Drew Jaynes just started a cool project called Filters of the Day. He’s planning to review all 1003 WordPress core filters over the next 365 days.

My goal is to keep up with him and test out each one as he reviews them. Drew has already posted six filters and I’ve only messed around with one of them, so I’m already falling behind. See my GithubGist profile for my edits and customizations.

It’s a great project. Check it out.

Change the Author URL

If you want to change your theme’s author link to another page, Justin Tadlock has a simple solution. If you have a single author blog, add this to your function.php file (in your child theme of course):

add_filter( 'author_link', 'my_author_link' );

function my_author_link() {
      return home_url( 'about' );
}

Just change about to whatever page you want to use. I added this to my site and it changed the link from:

http://www.kmarsden.com/author/kevin

to

http://www.kmarsden.com/about

Retiring my iPhone 3GS

I bought the iPhone 3GS on October 6, 2009. That’s 1378 days ago. I’ve put it through the ringer and I didn’t any major problems with it until a few months ago. Now unless it’s plugged in, it will randomly shut off even with a fully charged battery. I was hoping to keep it for a couple more months, but since it’s barely functional, I decided to upgrade. My iPhone 5 arrived in the mail today.

iPhone 3GS

iPhone 3GS and iPhone 5

Before I bought the 3GS back in 2009, I used a cheap flip phone. It did the basics, texting and phoning, but that’s it. Upgrading to an iPhone was a game changer. Instead of just carrying around a phone/messaging device, I now had portable computer in my pocket. A camera, maps, weather, internet browser, games, email, calendar, and more were always within reach. For better or for worse it changed my life. Of course, there were forerunners of the iPhone like the Sidekick or BlackBerries, but for me, my first taste of a multifunctional phone was the iPhone.

RIP 3GS.

Github Gist to Find WordPress Start of Week Date

I signed up for Github well over a year ago. Yesterday I finally added some code.

For a couple of days I’ve struggled to figure out the best way to get the date for the first day of the current week. Yesterday I finally came up with a solution that seems to work. It uses the WordPress function current_time so it takes into account the timezone setting. It also adjusts based on the start of week setting.

Let me know if you know a better way to do this.