Как отправить email используя wp_mail с несколькими BCC в заголовке

2 июн. 2015 г., 18:02:27
Просмотры: 56.2K
Голосов: 6

У меня есть часть кода, которая отвечает за получение переменных из контактной формы и отправку электронного письма мне и моим коллегам.

add_action('wp_ajax_nopriv_submit_contact_form', 'submit_contact_form'); 
// Отправка информации из контактной формы
function submit_contact_form(){

    // Если существует $_POST['email']...
    if( isset($_POST['email']) && ($_POST['validation'] == true ) ) {

        $email = $_POST['email'];       
        $email_to = "aaaa@example.pro";
        $fullname = $_POST['fullname'];
        $headers = 'From: '. $fullname .' <'. $email .'>' . "\r\n";
        $group_emails = array(
            'bbb@example.com', 
            'ccc@example.com', 
            'ddd@example.com', 
            'eee@example.pro', 
            'fff@example.pro' 
            );
        $email_subject = "example intro: $email";
        $message = $_POST['text']; 

        if(wp_mail($group_emails,$email_subject,$message,$headers)) {
            echo json_encode(array("result"=>"complete"));
        } else {
            echo json_encode(array("result"=>"mail_error"));
            var_dump($GLOBALS['phpmailer']->ErrorInfo);
    }
        wp_die();
    }
}

Я хочу добавить в заголовки 4 email-адреса как BCC.

Как сделать это правильно? Я пробовал несколько вариантов написания без какого-либо успеха.

0
Все ответы на вопрос 1
3

$headers может быть строкой или массивом, но проще всего использовать массив. Для этого добавляйте строки в массив, начиная с "From:", "Bcc:" или "Cc:" (обратите внимание на двоеточие ":"), за которым следует корректный email-адрес.

https://codex.wordpress.org/Function_Reference/wp_mail#Using_.24headers_To_Set_.22From:.22.2C_.22Cc:.22_and_.22Bcc:.22_Parameters

Другими словами:

$headers = array(
    'From: bbb@example.com', 
    'CC: ccc@example.com', 
    'CC: ddd@example.com', 
    'BCC: eee@example.pro', 
    'BCC: fff@example.pro' 
);

Вот где в ядре WordPress происходит разбор строки путем разделения по двоеточию ":":

296  list( $name, $content ) = explode( ':', trim( $header ), 2 );
297 
298                                 // Очистка данных
299                                 $name    = trim( $name    );
300                                 $content = trim( $content );
301 
302                                 switch ( strtolower( $name ) ) {
303                                         // В основном для обратной совместимости - обработка заголовка From: если он присутствует
304                                         case 'from':

Примечание: Это не тестировалось, но я достаточно уверен. Я не хотел начинать отправку писем на адреса без предупреждения (если эти адреса вообще активны).

2 июн. 2015 г. 21:08:22
Комментарии

Единственное, что я изменил для работы - использование $header вместо $group_emails. Спасибо!

Kar19 Kar19
7 июн. 2015 г. 18:27:23

Можете опубликовать ваш финальный код? Буду благодарен за помощь.

WordCent WordCent
8 авг. 2019 г. 13:55:46

Отмечу, что обработка дополнительных заголовков в wp_mail работает не совсем так же, как в PHP-функции mail(). WP_MAIL использует дополнительные заголовки в одномерном массиве ("from:somebody@example.com"). Функция mail() в PHP позволяет использовать двумерный массив, например $header = array("from" => "somebody@example.com"). Если вы передадите двумерный массив дополнительных заголовков, wp_mail не обработает их корректно.

Rick Hellewell Rick Hellewell
2 авг. 2022 г. 00:35:40