プレーンな古いPHP mail()がそうするのにwp_mail()がFrom:ヘッダーを設定させないのはなぜですか?


32

wp_mail( $to, $subject, $message, $headers )(もちろん値が設定されている)を使用すると、送信元の名前と、(PHPやApacheの設定でも)どこにも設定されていない電子メールが送信されます。ただし、mail( $to, $subject, $message, $headers )代わりに使用しても問題ありません。これwp_mail()を引き起こすために何が起こる可能性がありますか?

回答:


44

こんにちは@helenyhou:

パラメータではなく、ヘッダーを設定できます。WordPressの使い方「フック」とあなたがされている必要があるフック'wp_mail_from''wp_mail_from_name'フック。

メールアドレスに使用するときfunctions.php"From:"ヘッダーを変更するためにテーマのファイルに追加できるフックは次のとおりです。wp_mail()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';
}

私はただフィルターを見ていました、あなたは正しいです、それは問題を解決します。コーデックスを更新する必要があると思いますか?codex.wordpress.org/Function_Reference/wp_mail 関連:これは、強力なGravityFormsを含む、多くのフォームプラグインに影響しているようです。現在、カスタムフォームを作成していますが、これがWPの動作方法である場合、通常の古いメソッドを使用してヘッダーを設定すると、他の(および他のサイトでも)動作するのはなぜですか?
-helenhousandi

@helenyhou-他のフォームに影響を与えないようにするには、プラグインに呼び出される直前にフィルターを追加し、すぐにwp_mail()削除する必要があります。ヘッダーの設定が機能する理由については、他のユースケースが何であるかはわかりませんが、wp_mail()そのように機能するかどうかは驚きです。
マイクシンケル

2
ああ、私は何が起こっているのかを発見しました-別のプラグインは、私が求めていない、オプトアウトできないもののためにフィルターをグローバルに追加していました-悪い、悪い、悪い したがって、今や通常のヘッダーは結局機能します。ただし、これらのフィルターを使用することをお勧めします。
-helenhousandi

プラグインが追加するフィルターは、remove_filter(HOOK、FUNCTION)を使用して削除できます。
ジェイソンコールマン

fromメールドメインがサイトと同じ場合にのみ機能します。
オメル

4

From: "Your Name" <youremail@example.com>\r\nヘッダーで形式を使用している場合、問題は発生しないはずです(wp_mail関数をオーバーライドするプラグインがインストールされている場合を除く)。

ただし、マイクが言ったように、これらのフィルターで最終的な値をフィルター処理することも、このプラグインをインストールすることもできます。

送信元

wp_mailで使用する名前と電子メールを決定するオプション設定を提供します。


1

古い質問を復活させてすみませんが、次のようにヘッダーで設定する方が良いとは言えません:

$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()の後に削除することを心配する必要はありません。


2
私はフィルターを設定しませんでした、別のプラグインは設定しました。フィルタはヘッダーよりも優先されます。また、site_url()代わりに使用する必要がありますget_bloginfo('wpurl')
-helenhousandi

しかし、確かにそのプラグインはそれ自体をきれいにしないために悪いです......あなたはそれに対してできることはたくさんありません:その場合、別のプラグインが壊れた場合に備えてフィルターを使用するようにプラグインを変更する方が良いです
Brady

@helenyhou-site_url()を思い出させるための+1。また、$ headersを使用するのではなく、フィルターを使用するようにプラグインを変更しました。さらに、他の邪魔にならないようにメールを送信したら、これらのフィルターを削除するようにしました:)
Brady

はい、プラグインはそれらのフィルターを使用しないオプションを与えないのは悪いことですが、幸いなことに私のフィルターはフィルターをコメントアウトしました。おそらく、今後使用する方が良いかどうかを確認するために周りに尋ねます-使用ごとのフィルターまたはより馴染みのあるヘッダー。ヘッダーはおそらくより効率的ですが、なぜそれらのフィルターがそこにあるのでしょうか?常により多くの質問:)
helenhousandi

現在のバージョンでは、使用することは完全に受け入れられますget_bloginfo('wpurl')。これはsite_url()すでに返されます。get_bloginfo('home')およびget_bloginfo('siteurl')廃止されました。developer.wordpress.org/reference/functions/get_bloginfo
ジェームズM

1

ちょっとしたハックですが、Reply Toヘッダータグを使用することもできます。

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

残念なことに、これにより電子メールアドレスが差出人リストに追加され、返信すると、wp_mail_fromフィルターで構成されたアドレスを手動で削除する必要があります。


これは私のためにそれを修正しました。ライフメイトを救った!;)
user382738

0

同じ問題がありました。私にとっては、ホスティングプロバイダー(BlueHost)がfromフィールドの変更を妨げていることがわかりました。ここではhttps://my.bluehost.com/cgi/help/206で説明しています

メールをcPanelメールボックスに追加することで問題を修正しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.