Both the mail()
function in PHP and wp_mail()
in WordPress do support passing an array or string of headers, but the difference is:
-
With
mail()
, the array keys are the header names and its values are the respective header values, e.g.array( 'Content-type' => 'text/html; charset=utf-8' )
. -
wp_mail()
on the other hand, expects that the header name and value are put in the array values, e.g.array( 'Content-type: text/html; charset=utf-8' )
.
So this statement is not necessarily true:
If you want to use an array for the headers in wp_mail, you have to
convert it text
Because you could actually instead convert the format of your $mailheader
array to:
$mailheader = array(
'MIME-Version: 1.0',
'Content-type: text/html; charset=utf-8',
'From: [email protected]',
);
Or create a headers array specifically for wp_mail()
, from that array, like so:
$headers = array();
foreach ( $mailheader as $key => $value ) {
$headers[] = "$key: $value";
}
Example by Codex (see https://developer.wordpress.org/reference/functions/wp_mail/#comment-348):
To send HTML formatted mail, you also can specify the Content-Type
HTTP header in the$headers
parameter:$to = '[email protected]'; $subject="The subject"; $body = 'The email body content'; $headers = array('Content-Type: text/html; charset=UTF-8'); wp_mail( $to, $subject, $body, $headers );
And the documentation also stated that:
-
$headers
can be a string or an array, but it may be easiest to use
in the array form. -
When you are using the array form, you do not need to supply line
breaks (“\n” or “\r\n”).And thus, we could save time from trying to figure out whether CRLF (
\r\n
) or LF (\n
) should be used..