De ce wp_mail() nu-mi permite să setez antetul From: când funcția PHP mail() o face?

10 feb. 2011, 22:45:28
Vizualizări: 37.5K
Voturi: 36

Când folosesc wp_mail( $to, $subject, $message, $headers ) (cu valori completate, bineînțeles), emailul este trimis cu un nume și o adresă de expeditor care nu sunt setate nicăieri unde pot găsi (nici măcar în setările PHP sau Apache). Totuși, folosind mail( $to, $subject, $message, $headers ) în schimb, funcționează perfect. Ce s-ar putea întâmpla cu wp_mail() pentru a cauza acest comportament?

0
Toate răspunsurile la întrebare 5
5
45

Salut @helenyhou:

Poți seta antetul, doar că nu printr-un parametru. WordPress folosește "hook-uri" iar hook-urile de care ai nevoie sunt 'wp_mail_from' și 'wp_mail_from_name'.

Iată hook-urile pe care le-ai putea adăuga în fișierul functions.php al temei tale pentru a modifica antetul "From:" când folosești wp_mail() pentru adresa de email Helen Hou-Sandi <helenyhou@example.com>:

add_filter('wp_mail_from','yoursite_wp_mail_from');
function yoursite_wp_mail_from($content_type) {
  return 'helenyhou@example.com';
}
add_filter('wp_mail_from_name','yoursite_wp_mail_from_name');
function yoursite_wp_mail_from_name($name) {
  return 'Helen Hou-Sandi';
}
10 feb. 2011 22:56:02
Comentarii

Tocmai mă uitam la filtre și ai dreptate, rezolvă problema. Cred că Codex-ul ar trebui actualizat? http://codex.wordpress.org/Function_Reference/wp_mail

Totodată, legat de asta: se pare că afectează multe pluginuri de formulare, inclusiv puternicul GravityForms. Momentan scriu un formular custom, dar dacă așa ar trebui să se comporte WP, de ce funcționează setarea headerelor prin metoda veche pentru alții (și chiar pentru unele dintre celelalte site-uri ale mele)?

helenhousandi helenhousandi
10 feb. 2011 23:47:17

@helenyhou - Pentru a nu afecta alte formulare, ar trebui să adaugi filtrele în pluginul tău chiar înainte de a apela wp_mail() și apoi să le elimini imediat după. În ceea ce privește funcționarea setării headerelor, nu știu care sunt celelalte cazuri de utilizare ale tale, dar aș fi surprins dacă wp_mail() ar funcționa în acest fel.

MikeSchinkel MikeSchinkel
11 feb. 2011 00:49:37

Ahaaa, am înțeles ce se întâmpla - un alt plugin adăuga filtrele global pentru ceva ce nu am cerut și de care nu pot renunța - rău, rău, rău. Deci acum header-ile normale funcționează până la urmă. Se pare că folosirea acestor filtre ar fi cea mai bună practică, dacă sunt deja acolo.

helenhousandi helenhousandi
11 feb. 2011 01:00:35

Doar o notă aici că orice filtru adăugat de un plugin poate fi eliminat prin remove_filter(HOOK, FUNCTION).

Jason Coleman Jason Coleman
17 sept. 2012 00:27:06

funcționează doar dacă domeniul de e-mail de la care se trimite este același cu cel al site-ului.

Omer Omer
28 apr. 2018 10:02:22
0

Dacă folosești formatul From: "Numele Tău" <emailultau@exemplu.com>\r\n în anteturile tale, nu ar trebui să ai nicio problemă (cu excepția cazului în care ai un plugin instalat care suprascrie funcția wp_mail).

Cu toate acestea, așa cum a menționat Mike, poți filtra valorile finale cu acele filtre sau poți pur și simplu instala acest plugin:

Send From

Îți va oferi o setare de opțiuni pentru a determina ce nume și email să folosești în wp_mail().

10 feb. 2011 22:59:09
5

Îmi cer scuze că reînviu o întrebare veche, dar nu ar fi mai bine să setați prin antete astfel:

$subject  = "MyPlugin: Alertă (".get_bloginfo('wpurl').")";
$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=".get_bloginfo('charset')."" . "\r\n";
$headers .= "From: MyPlugin <".$this->settings['from_address'].">" . "\r\n";
wp_mail($this->settings['notify_address'], $subject, $alertMessage, $headers);

În acest fel, nu trebuie să vă faceți griji cu privire la utilizarea unui filtru și apoi eliminarea lui după wp_mail().

15 apr. 2011 18:29:03
Comentarii

Nu eu am setat filtrul, ci un alt plugin. Filtrul are prioritate față de header. De asemenea, ar fi bine să folosești site_url() în loc de get_bloginfo('wpurl')

helenhousandi helenhousandi
16 apr. 2011 07:14:47

Dar atunci acel plugin este prost pentru că nu curăță după sine... nu prea ai ce face în acest caz :( în această situație, mai bine modific plugin-ul meu să folosească filtre pentru orice eventualitate în care un alt plugin l-a stricat.

Scott Scott
16 apr. 2011 11:59:29

@helenyhou - +1 pentru că mi-ai reamintit de site_url(). De asemenea, am modificat plugin-ul meu să folosească filtre în loc să utilizeze $headers. În plus, m-am asigurat să elimin acele filtre după ce am trimis emailul ca să nu interfereze cu altceva :)

Scott Scott
16 apr. 2011 16:36:40

da, e vina acelui plugin că nu îmi oferă opțiunea de a nu folosi acele filtre, dar din fericire comentarea filtrelor a funcționat în cazul meu. Probabil voi întreba în jur pentru a afla care este mai bun de utilizat în viitor - un filtru pe utilizare sau headerele mai familiare. Headerele sunt probabil mai eficiente, dar atunci de ce există acele filtre? Întotdeauna mai multe întrebări :)

helenhousandi helenhousandi
26 apr. 2011 15:45:45

În versiunea actuală, este perfect acceptabil să folosești get_bloginfo('wpurl'): Aceasta returnează deja site_url(). get_bloginfo('home') și get_bloginfo('siteurl') sunt învechite. https://developer.wordpress.org/reference/functions/get_bloginfo/

Ion Ion
25 dec. 2016 18:03:43
1

Este un pic de hack, dar poți folosi și header-ul Reply To:

$headers = 'Reply-To: "Aaren A. Aarenson" <aaron@somemail.com>';

Din păcate, acest lucru adaugă adresa de email la lista From, iar răspunsul înseamnă că va trebui să eliminați manual adresa configurată în filtrul wp_mail_from.

14 sept. 2015 22:01:04
Comentarii

Asta a rezolvat problema pentru mine. Mi-ai salvat viața, frate! ;)

user382738 user382738
27 iun. 2017 02:43:04
0

Am avut aceeași problemă. În cazul meu, a rezultat că furnizorul de hosting (BlueHost) împiedică modificarea câmpului "from". Ei explică acest lucru aici https://my.bluehost.com/cgi/help/206.

Am rezolvat problema prin adăugarea adresei de email în căsuțele poștale din cPanel, exact cum recomandă ei.

14 aug. 2015 16:33:29