If there's one thing that irked me about WordPress, which I more or less ignored for months, was the inability to change the "From" address on emails it sent. It's hard-coded to "wordpress@${sitename}" and when you have some... weird... domain hosters, this can cause problems. I haven't received comment notification for a few months now as a result.

The problem, in my particular case, is that my hoster is extremely anal about mail relays. If the from address isn't locally-deliverable, it punts the message with a "relay not permitted". This is simply foolish, and I've already complained, but I have my doubts they'll change anything. In my case, the linsec.ca site is hosted at my domain hoster, but the mail for linsec.ca is handled by Google. So when a message goes out from wordpress@linsec.ca (regardless of whether it's a deliverable address or not, regardless of whether I define an email address on the domain server (that would never really get mail, but I was hoping it would trick exim somewhat)), it gets punted as a relayed address because the MX records for linsec.ca don't point to the server.

This could all be extremely easily avoided by letting people change the From address in WordPress. And it's such a stupidly simple hack. So when I upgraded to the latest WordPress and found it still didn't allow it, I finally implemented a quick fix and am putting it here for others who face the same irritation.

Index: wp-config.php
===================================================================
--- wp-config.php   (revision 1109)
+++ wp-config.php   (working copy)
@@ -23,6 +23,9 @@
 // to enable German language support.
 define ('WPLANG', '');

+// set the from address for mail
+define ('WPFROMADR', 'wordpress@annvix.ca');
+
 /* That's all, stop editing! Happy blogging. */

 if ( !defined('ABSPATH') )
Index: wp-includes/pluggable.php
===================================================================
--- wp-includes/pluggable.php   (revision 1109)
+++ wp-includes/pluggable.php   (working copy)
@@ -346,8 +346,9 @@
        if ( substr( $sitename, 0, 4 ) == 'www.' ) {
            $sitename = substr( $sitename, 4 );
        }
-
-       $from_email = 'wordpress@' . $sitename;
+// why this is hardcoded is beyond me so we'll let it be defined in wp-config.php
+//     $from_email = 'wordpress@' . $sitename;
+       $from_email = WPFROMADR;
    }

    // Set the from name and email
@@ -1562,4 +1563,4 @@
 }
 endif;

-?>
\ No newline at end of file
+?>

And that's it. This would be so easy to have implemented upstream, I'm not sure why they haven't done it already. Now I can set the from domain to something that is hosted on that machine and mails are delivered.