Save WordPress emails to the filesystem

There is no shortage of WordPress plugins that disable or log the sent emails. You can pick your favorite, but lately, I reach for a solution that I found in the WordPress.com VIP Support repo.

Since wp_mail is a pluggable function, the implementation can be overwritten from a plugin. The approach that WordPress.com VIP Support takes is writing the email to a filesystem. Perfect for dropping the code below in a single file mu-plugin called wp-mail-save-to-filesystem.php.

Here's the slightly modified version that I used the last time:

function wp_mail($to, $subject, $message)
{
    $uploadsDirInfo = wp_get_upload_dir();
    $storageDir = trailingslashit($uploadsDirInfo['basedir']) . 'wp-mail';

    $fileName = sanitize_file_name(time() . "-$to");
    $filePath = trailingslashit($storageDir) . $fileName;

    $content = "TO: $to" . PHP_EOL;
    $content .= "SUBJECT: $subject" . PHP_EOL . PHP_EOL;
    $content .= $message;

    if (!is_dir($storageDir)) {
        mkdir($storageDir);
    }

    return (bool)file_put_contents($filePath, $content);
}

This does not save the attachments, but that would be doable too!