Depending on your setup, PHP might not be sending properly encoded e-mails if you just use the mail() function. Specifically, headers might not be properly encoded, and this includes the subject, the To, and Reply-To, etc. Just give it a try using some non-ASCII characters and see if it works. If it doesn't, here's a better way:
// At the beginning of each page load, set internal encoding to UTF-8
mb_internal_encoding('UTF-8');
// ... rest of initialization code
// Headers are an associative array, unlike the original mail() function
function better_mail($email, $subject, $body, Array $headers = array(), $additional_parameter = NULL) {
// Make sure we set Content-Type and charset
if ( !isset( $headers['Content-Type'] ) ) {
$headers['Content-Type'] = 'text/plain; charset=utf-8';
}
$headers_str = '';
foreach( $headers as $key => $val ) {
$headers_str .= sprintf( "%s: %s\r\n", $key, $val );
}
// Use mb_send_mail() function instead of mail() so that headers, including subject are properly encoded
return mb_send_mail( $email, $subject, $body, $headers_str, $additional_parameters );
}
better_mail( 'example@example.com', 'Résumé with non-ASCII characters', 'Résumé content.', array( 'From' => 'noreply@example.com' ) );
For more information see: