Problem att skicka mail i WordPress

Problem när WordPress körs i default vhost i Nginx: "Kunde inte skicka mail. Möjlig orsak: ditt webbhotell/din server har inaktiverat funktionen mail()."

WordPress wp_mail har en funktion som gör att den försökte räkna ut vad det ska vara för avsändare på e-post som skickas från WordPress.

if ( !isset( $from_email ) ) {
// Get the site domain and get rid of www.
$sitename = strtolower( $_SERVER['SERVER_NAME'] );
if ( substr( $sitename, 0, 4 ) == 'www.' ) {
$sitename = substr( $sitename, 4 );
}
$from_email = 'wordpress@' . $sitename;
}

Om man kör WordPress-siten i default vhost i Nginx, vilket man ofta vill göra om man bara har en multisite på servern och vill slippa ange alla domäner som ska mappas mot vhosten kör man följande konfiguration i Nginx:

server {
listen 80 default;
listen [::]:80 default;
server_name "";
root /mnt/persist/www/docroot;
...

Nginx behöver inte något server_name eftersom det är default vhost. Tyvärr blir då $_SERVER[”SERVER_NAME”] tom, vilket gör att e-postadressen som WordPress kommer fram till blir ”wordpress@”, vilket inte är en giltig address och då blir det exception i PHP-mailer.

Lösningen är att sätta ett server_name i Nginx som du vill ha som avsändardomän.

Glöm inte att lägga till serverns IP-adresser (både IPv4 och IPv6) i din SPF-record. Kör du Cloudnet Managed Hosting så får du självklart hjälp med det!