Почему wp mail() не позволяет мне установить заголовок From:, когда обычный старый PHP mail() будет?


Когда я использую wp_mail( $to, $subject, $message, $headers ) (со значениями на месте, конечно), электронное письмо отправляется с именем и адресом электронной почты, которые я нигде не могу найти (даже в настройках PHP или Apache). Однако использование mail( $to, $subject, $message, $headers ) вместо этого работает просто отлично. Что может произойти с wp_mail(), чтобы вызвать это?

Author: Max Yudin, 2011-02-10

5 answers

Привет@helenyhou:

Вы можете задать заголовок, но не с помощью параметра. WordPress использует " крючки" и крючки, которые вам нужны, - это 'wp_mail_from' и 'wp_mail_from_name' крючки.

Вот крючки, которые вы можете добавить в файл functions.php своей темы, чтобы изменить заголовок "From:" при использовании wp_mail() на адрес электронной почты Helen Hou-Sandi <[email protected]>:

add_filter('wp_mail_from','yoursite_wp_mail_from');
function yoursite_wp_mail_from($content_type) {
  return '[email protected]';
}
add_filter('wp_mail_from_name','yoursite_wp_mail_from_name');
function yoursite_wp_mail_from_name($name) {
  return 'Helen Hou-Sandi';
}
 46
Author: MikeSchinkel, 2011-02-10 20:56:02

Что ж, если вы используете формат From: "Your Name" <[email protected]>\r\n в своих заголовках, у вас не должно возникнуть проблем (если только у вас не установлен плагин, который переопределяет функцию wp_mail).

Однако, как сказал Майк, вы можете отфильтровать конечные значения с помощью этих фильтров, или вы можете просто установить этот плагин:

Отправить С

Это даст вам возможность настроить параметры, чтобы определить, какое имя и адрес электронной почты использовать в wp_mail().

 4
Author: John P Bloch, 2019-12-13 17:20:05

Извините, что возвращаю старый вопрос, но не лучше ли задать его через заголовки следующим образом:

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

Таким образом, вам не придется беспокоиться об использовании фильтра, а затем об удалении после wp_mail().

 3
Author: Scott, 2019-12-13 17:19:35

Это немного взлом, но вы также можете использовать тег заголовка Reply To:

$headers = 'Reply-To: "Aaren A. Aarenson" <[email protected]>';

К сожалению, этот добавляет адрес электронной почты в список "От", и ответ означает, что вам придется вручную удалить адрес, настроенный в фильтре wp_mail_from.

 1
Author: Sjors Hijgenaar, 2015-09-14 19:01:04

У меня была та же проблема. Для меня выяснилось, что хостинг-провайдер (Bluehost) препятствовал изменению поля "От". Здесь они объясняют это https://my.bluehost.com/cgi/help/206 .

Я исправил проблему, добавив электронное письмо в почтовые ящики cPanel, как они говорят.

 0
Author: Tigran, 2015-08-14 13:33:29