Cum să trimiți un email folosind wp_mail cu mai mulți destinatari BCC în antet

2 iun. 2015, 18:02:27
Vizualizări: 56.2K
Voturi: 6

Am această parte de cod responsabilă pentru preluarea variabilelor din formularul de contact - și trimiterea unui email către mine și colegii mei de muncă.

add_action('wp_ajax_nopriv_submit_contact_form', 'submit_contact_form'); 
// Trimite informațiile din formularul de contact
function submit_contact_form(){

    // Dacă există $_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();
    }
}

Vreau să adaug în antete 4 emailuri ca BCC.

Cum pot face acest lucru corect? Am încercat câteva variante de scriere fără succes.

0
Toate răspunsurile la întrebare 1
3

$headers poate fi un șir de caractere sau un array, dar cel mai ușor este să îl utilizați sub formă de array. Pentru a-l folosi, adăugați un șir în array, începând cu "From:", "Bcc:" sau "Cc:" (observați folosirea ":"), urmat de o adresă de email validă.

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

Cu alte cuvinte:

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

Puteți vedea unde Core parsează șirul despărțindu-l după ":":

296  list( $name, $content ) = explode( ':', trim( $header ), 2 );
297 
298                                 // Curățare
299                                 $name    = trim( $name    );
300                                 $content = trim( $content );
301 
302                                 switch ( strtolower( $name ) ) {
303                                         // În principal pentru compatibilitate - procesează un header From: dacă există
304                                         case 'from':

Notă: Acest lucru nu a fost testat, dar sunt destul de încrezător. Nu am vrut să încep să trimit emailuri la adrese fără avertizare (dacă acele adrese sunt încă active).

2 iun. 2015 21:08:22
Comentarii

Singurul lucru pe care l-am schimbat pentru a funcționa este folosirea lui $header și nu $group_emails. Mulțumesc!

Kar19 Kar19
7 iun. 2015 18:27:23

Poți posta codul tău final? Ajutorul ar fi apreciat.

WordCent WordCent
8 aug. 2019 13:55:46

Am observat că procesarea antetelor suplimentare în wp_mail nu funcționează exact la fel ca comanda PHP mail(). WP_MAIL folosește antete suplimentare într-un array unidimensional ("from:cineva@exemplu.com"). Funcția PHP mail() permite un array bidimensional, ca în $header = array("from" => "cineva@exemplu.com"). Dacă furnizezi un array bidimensional pentru antetele suplimentare, wp_mail nu le va procesa corect.

Rick Hellewell Rick Hellewell
2 aug. 2022 00:35:40