Почему wp mail() не позволяет мне установить заголовок From:, когда обычный старый PHP mail() будет?
Когда я использую wp_mail( $to, $subject, $message, $headers )
(со значениями на месте, конечно), электронное письмо отправляется с именем и адресом электронной почты, которые я нигде не могу найти (даже в настройках PHP или Apache). Однако использование mail( $to, $subject, $message, $headers )
вместо этого работает просто отлично. Что может произойти с wp_mail()
, чтобы вызвать это?
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';
}
Что ж, если вы используете формат From: "Your Name" <[email protected]>\r\n
в своих заголовках, у вас не должно возникнуть проблем (если только у вас не установлен плагин, который переопределяет функцию wp_mail).
Однако, как сказал Майк, вы можете отфильтровать конечные значения с помощью этих фильтров, или вы можете просто установить этот плагин:
Это даст вам возможность настроить параметры, чтобы определить, какое имя и адрес электронной почты использовать в wp_mail()
.
Извините, что возвращаю старый вопрос, но не лучше ли задать его через заголовки следующим образом:
$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()
.
Это немного взлом, но вы также можете использовать тег заголовка Reply To
:
$headers = 'Reply-To: "Aaren A. Aarenson" <[email protected]>';
К сожалению, этот добавляет адрес электронной почты в список "От", и ответ означает, что вам придется вручную удалить адрес, настроенный в фильтре wp_mail_from
.
У меня была та же проблема. Для меня выяснилось, что хостинг-провайдер (Bluehost) препятствовал изменению поля "От". Здесь они объясняют это https://my.bluehost.com/cgi/help/206 .
Я исправил проблему, добавив электронное письмо в почтовые ящики cPanel, как они говорят.