wp_mail() nu funcționează pe localhost

28 iul. 2015, 10:17:53
Vizualizări: 15.3K
Voturi: 2

Încerc să testez funcția wp_mail() în mediul meu local. Când fac var_dump pe wp_mail, primesc Boolean false. Iată codul meu:

    $to = "abcd@gmail.com";
    $subject = 'subiectul meu';
    $message = 'Aș dori să lucrez cu tine';
    $headers = '';


    $sent_message = wp_mail( $to, $subject, $message, $headers);
    var_dump($sent_message); // primesc boolean false aici
    if ( $sent_message ) {
        echo 'Mesajul de test a fost trimis. Verifică-ți inboxul de email.';
    } else {
        echo 'Mesajul nu a fost trimis!'; // acesta se afișează la final
    }

Orice ajutor ar fi apreciat.

0
Toate răspunsurile la întrebare 3
1

wp_mail() folosește în mod implicit funcția PHP mail() care necesită un MTA (Agent de Transfer de Mesaje) configurat pe gazda dumneavoastră. Deci, fie instalați și configurați un astfel de MTA. Dacă folosiți un sistem de operare asemănător cu Linux, SSMTP este o soluție simplă prin care puteți utiliza orice furnizor de e-mail pentru a trimite mesaje de sistem prin SMTP. Un alt MTA ar fi Sendmail, un MTA complet, dar dificil de configurat.

Sau puteți pur și simplu să folosiți un plugin precum WP Mail SMTP care implementează o conexiune SMTP directă în PHP și ocolește utilizarea funcției mail().

28 iul. 2015 10:38:06
Comentarii

Dacă dorești doar să testezi funcționalitatea de e-mail în timpul dezvoltării, poți folosi mailcatcher: https://mailcatcher.me Nu l-am testat pe Windows - dar pe Mac OS funcționează. Pe alte sisteme de operare Linux ar trebui să funcționeze de asemenea.

Luckyfella Luckyfella
24 aug. 2017 22:56:38
1

Dacă cineva dă peste această întrebare veche:

În cazul meu, motivul a fost că am dat site-ului de pe localhost un nume fără un domeniu de nivel superior. De exemplu, "mysite" (în loc de "mysite.com"). Astfel, WordPress a presupus că adresa "From" este "wordpress@mysite".

Phpmailer (care este apelat de wp_mail) a generat apoi eroarea: "Adresă invalidă: (From): wordpress@mysite"

Soluția a fost să setez explicit adresa de expediere prin antet:

    $headers[] = 'From: Wordpress<wordpress@mysite.com>';
    $sent_message = wp_mail( $to, $subject, $message, $headers );

Apoi wp_mail a funcționat.

4 mai 2021 21:49:36
Comentarii

Funcționează perfect. Bună soluție!

Christer Fernstrom Christer Fernstrom
7 mar. 2024 20:12:35
0

Extinzând răspunsul util al lui Ronni, iată cum poți suprascrie adresa From: pentru toate emailurile trimise:

if (defined('WP_CLI')) {
    WP_CLI::add_wp_hook('wp_mail_from', function () {
        return 'my@addr.com';
    });
} else {
    add_filter('wp_mail_from', function () {
        return 'my@addr.com';
    });
}

Pentru mediul meu de dezvoltare locală, am considerat util să plasez acest cod în wp-config.php, chiar la sfârșit, după require_once ABSPATH . 'wp-settings.php';.

Am adăugat o soluție pentru wp-cli, deoarece acesta nu oferă funcția add_filter() precum ar face WordPress în mod normal.

30 sept. 2022 06:47:31