Wp_mail () मुझे सेट क्यों नहीं करेगा: हेडर जब सादे पुराने PHP मेल () होगा?


32

जब मैं wp_mail( $to, $subject, $message, $headers )(निश्चित रूप से मूल्यों के साथ) का उपयोग करता हूं , तो ईमेल एक नाम और ईमेल के साथ भेजा जाता है जो कहीं भी सेट नहीं होता है जो मुझे मिल सकता है (यहां तक ​​कि पीएचपी या अपाचे सेटिंग्स में भी नहीं)। हालांकि, mail( $to, $subject, $message, $headers )इसके बजाय का उपयोग करना ठीक काम करता है। इसका क्या wp_mail()कारण हो सकता है ?

जवाबों:


44

हाय @ हेलेनह्यो:

आप हेडर सेट कर सकते हैं, बस एक पैरामीटर के साथ नहीं। वर्डप्रेस "हुक" का उपयोग करता है और आपको जिस हुक की आवश्यकता है वह है '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 को कैसे व्यवहार करना चाहिए, तो अन्य (और यहां तक ​​कि मेरी कुछ साइटों के लिए) नियमित पुरानी पद्धति का उपयोग करके हेडर क्यों सेट करता है?
हेलनहसंडी 21

@helenyhou - अन्य रूपों को प्रभावित करने से रोकने के लिए आपको कॉल करने से पहले अपने प्लगइन में फिल्टर जोड़ने की आवश्यकता होगी wp_mail()और उसके ठीक बाद उन्हें हटा दें। हेडर कार्य को सेट करने के लिए के रूप में, मुझे नहीं पता कि आपके अन्य उपयोग के मामले क्या हैं, लेकिन मुझे आश्चर्य wp_mail()होगा कि अगर वह इस तरह से काम करेगा।
मिकशिंकेल

2
अह्ह्ह मैंने पाया कि क्या हो रहा था - एक और प्लगइन कुछ के लिए विश्व स्तर पर फिल्टर जोड़ रहा था जो मैंने नहीं पूछा और खराब, खराब, खराब से बाहर नहीं निकल सकता। इसलिए अब नियमित हेडर काम करते हैं। लगता है कि उन फिल्टर का उपयोग करना सबसे अच्छा अभ्यास होगा, अगर वे वहां हैं।
हेलनहुंडी

बस यहाँ एक नोट जो किसी भी फ़िल्टर को जोड़ रहा है उसे remove_filter (HOOK, FUNCTION) के माध्यम से हटाया जा सकता है।
जेसन कोलमैन

यह केवल तभी काम करता है जब ईमेल डोमेन से साइट के समान हो।
ओमर

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')
हेलनहसंडी

लेकिन फिर निश्चित रूप से वह प्लगइन ख़ुद के बाद न साफ़ करने के लिए बुरा है .... नहीं एक बहुत आप इसके बारे में कर सकते हैं हालांकि :( उस मामले में मैं बेहतर फ़िल्टर बदलने के लिए अपने प्लगइन का उपयोग करता हूं बस एक और प्लगइन ने इसे तोड़ दिया है।
ब्रैडी

@helenyhou - +1 मुझे site_url () के बारे में याद दिलाने के लिए। मैंने $ हेडर का उपयोग करने के बजाय फ़िल्टर का उपयोग करने के लिए अपना प्लगइन भी बदल दिया है। इसके अलावा, मैंने एक बार ईमेल भेजने के बाद उन फिल्टरों को हटाना सुनिश्चित कर लिया है ताकि किसी और चीज के रास्ते में न आए :)
ब्रैडी

हाँ, यह है कि मुझे उन फिल्टर का उपयोग नहीं करने के लिए एक विकल्प नहीं देने के लिए प्लगइन का बुरा है, लेकिन सौभाग्य से फिल्टर के बारे में टिप्पणी करते हुए मेरे मामले के लिए काम किया। मैं शायद यह देखने के लिए चारों ओर से पूछूंगा कि भविष्य में उपयोग करने के लिए कौन सा बेहतर है - प्रति-उपयोग फ़िल्टर या अधिक परिचित हेडर। हेडर शायद अधिक कुशल हैं, लेकिन फिर वे फिल्टर वहां क्यों हैं? हमेशा अधिक सवाल :)
हेलनहसंडी

वर्तमान संस्करण के रूप में, यह उपयोग करने के लिए पूरी तरह से स्वीकार्य है get_bloginfo('wpurl'): यह site_url()पहले से ही रिटर्न करता है । get_bloginfo('home')और get_bloginfo('siteurl')पदावनत हो जाते हैं। developer.wordpress.org/reference/functions/get_bloginfo
जेम्स एम

1

यह थोड़ा हैक है लेकिन आप Reply Toहेडर टैग का उपयोग भी कर सकते हैं :

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

अफसोस की बात यह है कि ईमेल पते को सूची से जोड़ा जाता है, और उत्तर देने का मतलब है कि आपको मैन्युअल रूप से wp_mail_fromफ़िल्टर में कॉन्फ़िगर किए गए पते को निकालना होगा ।


इसने मेरे लिए इसे ठीक कर दिया। आपने एक जीवन साथी को बचा लिया! ;)
प्रयोक्ता 382738

0

मुझे भी यही समस्या थी। मेरे लिए यह पता चला कि होस्टिंग प्रदाता (ब्लूहॉस्ट) को क्षेत्र से बदलने से रोक रहा था। यहाँ उन्होंने इसे https://my.bluehost.com/cgi/help/206 बताया

मैंने ईमेल में cPanel मेलबॉक्सों को ईमेल में जोड़कर समस्या को ठीक कर दिया, जैसा कि वे कहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.