Perché wp_mail() non mi permette di impostare l'intestazione From: mentre la funzione PHP mail() lo consente?

10 feb 2011, 22:45:28
Visualizzazioni: 37.5K
Voti: 36

Quando uso wp_mail( $to, $subject, $message, $headers ) (con i valori appropriati, ovviamente), l'email viene inviata con un nome mittente e un'email che non sono impostati da nessuna parte che riesco a trovare (nemmeno nelle impostazioni di PHP o Apache). Tuttavia, usando invece mail( $to, $subject, $message, $headers ) funziona perfettamente. Cosa potrebbe causare questo comportamento con wp_mail()?

0
Tutte le risposte alla domanda 5
5
45

Ciao @helenyhou:

Puoi impostare l'intestazione, ma non con un parametro. WordPress utilizza gli "hook" e gli hook di cui hai bisogno sono 'wp_mail_from' e 'wp_mail_from_name'.

Ecco gli hook che potresti aggiungere al file functions.php del tuo tema per modificare l'intestazione "From:" quando usi wp_mail() con l'indirizzo 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
Commenti

Stavo proprio guardando i filtri e hai ragione, risolve il problema. Suppongo che il Codex dovrebbe essere aggiornato? http://codex.wordpress.org/Function_Reference/wp_mail

Inoltre, correlato: sembra che questo influenzi molti plugin per moduli disponibili, incluso il potente GravityForms. Attualmente sto scrivendo un modulo personalizzato, ma se questo è il comportamento previsto da WP, perché impostare gli header utilizzando il vecchio metodo funziona per altri (e anche per alcuni dei miei altri siti)?

helenhousandi helenhousandi
10 feb 2011 23:47:17

@helenyhou - Per evitare di influenzare altri moduli, dovresti aggiungere i filtri nel tuo plugin appena prima di chiamare wp_mail() e poi rimuoverli subito dopo. Per quanto riguarda il motivo per cui impostare gli header funziona, non so quali siano i tuoi altri casi d'uso, ma sarei sorpreso se wp_mail() funzionasse in quel modo.

MikeSchinkel MikeSchinkel
11 feb 2011 00:49:37

Ahhhh ho capito cosa stava succedendo - un altro plugin stava aggiungendo i filtri globalmente per qualcosa che non avevo richiesto e da cui non potevo escludermi - male, male, male. Quindi ora gli header regolari funzionano dopo tutto. Sembra che utilizzare quei filtri sarebbe la migliore pratica, se sono presenti.

helenhousandi helenhousandi
11 feb 2011 01:00:35

Nota che qualsiasi filtro aggiunto da un plugin può essere rimosso tramite remove_filter(HOOK, FUNCTION).

Jason Coleman Jason Coleman
17 set 2012 00:27:06

funziona solo se il dominio dell'email mittente è lo stesso del sito.

Omer Omer
28 apr 2018 10:02:22
0

Bene, se stai utilizzando il formato From: "Tuo Nome" <tuaemail@example.com>\r\n nelle tue intestazioni, non dovresti avere problemi (a meno che non sia installato un plugin che sovrascrive la funzione wp_mail).

Tuttavia, come ha detto Mike, puoi filtrare i valori finali con quei filtri, oppure puoi semplicemente installare questo plugin:

Send From

Ti fornirà un'impostazione delle opzioni per determinare quale nome e email utilizzare in wp_mail().

10 feb 2011 22:59:09
5

Scusate se riapro una vecchia domanda, ma non è meglio impostare tramite gli header in questo modo:

$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);

In questo modo non è necessario preoccuparsi di utilizzare un filtro e poi rimuoverlo dopo wp_mail().

15 apr 2011 18:29:03
Commenti

Non ho impostato io il filtro, è stato un altro plugin. Il filtro ha la precedenza sull'header. Inoltre, dovresti davvero usare site_url() invece di get_bloginfo('wpurl')

helenhousandi helenhousandi
16 apr 2011 07:14:47

Ma allora sicuramente quel plugin è fatto male perché non pulisce dopo sé stesso... non c'è molto che tu possa fare però :( in tal caso è meglio che modifichi il mio plugin per usare il filtro nel caso in cui un altro plugin lo abbia rotto.

Scott Scott
16 apr 2011 11:59:29

@helenyhou - +1 per avermi ricordato di site_url(). Ho anche modificato il mio plugin per usare i filtri invece di usare $headers. Inoltre mi sono assicurato di rimuovere quei filtri una volta inviata l'email per non interferire con nient'altro :)

Scott Scott
16 apr 2011 16:36:40

sì, è colpa di quel plugin che non mi dà l'opzione di non usare quei filtri, ma per fortuna commentare i filtri ha funzionato nel mio caso. Probabilmente chiederò in giro per capire cosa sia meglio usare in futuro - un filtro per ogni utilizzo o i più familiari header. Gli header sono probabilmente più efficienti, ma allora perché ci sono quei filtri? Sempre più domande :)

helenhousandi helenhousandi
26 apr 2011 15:45:45

Nella versione corrente, è totalmente accettabile usare get_bloginfo('wpurl'): Questo restituisce già site_url(). get_bloginfo('home') e get_bloginfo('siteurl') sono deprecati. https://developer.wordpress.org/reference/functions/get_bloginfo/

Ion Ion
25 dic 2016 18:03:43
1

È un po' un hack, ma puoi anche utilizzare il tag di intestazione Reply To:

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

Sfortunatamente, questo aggiunge l'indirizzo email alla lista From, e rispondere significa che dovrai rimuovere manualmente l'indirizzo configurato nel filtro wp_mail_from.

14 set 2015 22:01:04
Commenti

Questo ha risolto il problema per me. Mi hai salvato la vita amico! ;)

user382738 user382738
27 giu 2017 02:43:04
0

Ho avuto lo stesso problema. Nel mio caso è risultato che il provider di hosting (BlueHost) impediva la modifica del campo "from". Qui lo spiegano https://my.bluehost.com/cgi/help/206.

Ho risolto il problema aggiungendo l'email alle caselle di posta in cPanel come indicato.

14 ago 2015 16:33:29