user892134
user892134

Reputation: 3224

Sending emails with bcc and cc with wp_mail

I want to send the following fields to wp_mail

enter image description here

If i put all the emails in Email to,Copy to and Bcc to in an array $emails and pass it to wp_mail. How do i set the headers for cc and bcc in wp_mail?

$headers = 'From: Test <[email protected]>' . '\r\n';
$headers.= 'Content-type: text/html\r\n'; 
$success = wp_mail( $emails, $subject, $message, $headers );  

Upvotes: 19

Views: 36654

Answers (1)

Dez
Dez

Reputation: 5838

You can use an array to send all the info you need, thus:

$headers[] = 'From: Test <[email protected]>';
$headers[] = 'Cc: [email protected]';
$headers[] = 'Cc: [email protected]';
...
$headers[] = 'Bcc: [email protected]';
$headers[] = 'Bcc: [email protected]';
$success = wp_mail( $emails, $subject, $message, $headers );  

You can get it programmatically, being $copy_to and $bcc_to arrays of said form fields after splitting them by the comma you state in the inner field text, and having defined array $headers:

$headers[] = 'From: Test <[email protected]>';
foreach($copy_to as $email){
    $headers[] = 'Cc: '.$email;
}
foreach($bcc_to as $email){
    $headers[] = 'Bcc: '.$email;
}
$success = wp_mail( $emails, $subject, $message, $headers );  

These work because wp_mail() doesn't trust you, so normalizes and concatenates multiple Cc: and Bcc: headers correctly. The RFC spec mandates that these headers occur only once, with multiple recipients comma-separated, and "folded" if the lines are too long, so it wouldn't work in plain PHP.

Upvotes: 49

Related Questions