वर्डप्रेस ने मेल भेजने से मना कर दिया, "... आपके होस्ट ने मेल को निष्क्रिय कर दिया है () फ़ंक्शन"


9

मैंने हाल ही में अपनी वेबसाइट पर एक टिप्पणी क्षेत्र लागू किया और काम करने के लिए ईमेल अधिसूचना प्राप्त करने की कोशिश की। जब नई टिप्पणियाँ की जाती हैं तो यह ईमेल सूचनाएँ भेजना नहीं चाहता है।

बस यह देखने के लिए कि क्या PHP ईमेल भेज सकती है, मैंने पासवर्ड रीसेट करने की कोशिश की (क्योंकि आपको मेल के जरिए नया पासवर्ड मिलेगा), और मुझे संदेश मिल गया:

ई-मेल नहीं भेजा जा सका। संभावित कारण: आपके होस्ट ने मेल () फ़ंक्शन को अक्षम कर दिया होगा

मैंने सेटिंग्स -> चर्चा में चेकबॉक्स की जाँच की है, और ईमेल मान्य है, इसलिए यह एक सेटिंग मुद्दा नहीं है। मैंने एक PHP फ़ाइल बनाने और उपयोग करने की कोशिश की mail(), और इसे सफलतापूर्वक भेजा। तो वर्डप्रेस के साथ कुछ अजीब चल रहा होगा।

कोई विचार?


जवाबों:


9

स्टेप बाय स्टेप: सबसे पहले उस फाइल को ढूंढें जहां एरर मैसेज दिखाई देता है। मैं फ़ाइलों में खोज करने के लिए नोटपैड ++ और CTRL+ Fकमांड का उपयोग करता हूं । त्रुटि संदेश के केवल पहले कुछ शब्दों को खोजना एक अच्छा विचार है, क्योंकि कुछ त्रुटि संदेश विभिन्न संदेशों के संयुक्त होते हैं।

आपका त्रुटि संदेश wp-login.phpऔर पवित्र भाग्य में ही दिखाई देता है । तो आइए नजर डालते हैं कि यह त्रुटि क्यों हो सकती है।

if ( $message && !wp_mail($user_email, $title, $message) )

दो शर्तें हैं। $messageसच होना चाहिए (खाली स्ट्रिंग नहीं, झूठी नहीं, अशक्त नहीं, आदि)। और wp_mail()झूठ नहीं लौटाना चाहिए।

एक पंक्ति ऊपर, एक फ़िल्टर है $message = apply_filters('retrieve_password_message', $message, $key);, इसलिए यह संभव है कि एक प्लगइन (या थीम) इस फ़िल्टर का उपयोग करता है और एक मान लौटाता है जो सही नहीं है (खाली स्ट्रिंग, गलत, अशक्त, आदि)।

लेकिन यह जांचना बहुत आसान है कि wp_mail()क्या काम कर रहा है या नहीं। अपने आप को एक परीक्षण मेल भेजने के लिए एक छोटा सा प्लगइन लिखें:

<?php
/**
 * Plugin Name: Stackexchange Testplugin
 * Plugin URI:  http://yoda.neun12.de
 * Description: Send me a test email
 * Version:     0.1
 * Author:      Ralf Albert
 * Author URI:  http://yoda.neun12.de
 * Text Domain:
 * Domain Path:
 * Network:
 * License:     GPLv3
 */

namespace WordPressStackexchange;

add_action( 'init', __NAMESPACE__ . '\plugin_init' );

function plugin_init(){
    $to      = 'your-email-adress@some-domain.tld';
    $subject = 'Testemail';
    $message = 'FooBarBaz Testmail is working';

    wp_mail( $to, $subject, $message );
}

(यह PHP5.3 कोड है। यदि आप PHP5.2 चला रहे हैं, तो नाम स्थान की चीजों को हटा दें)

सक्रियण के तुरंत बाद प्लगइन को एक टेस्टमेल भेजना चाहिए। यदि नहीं, तो कुछ बैकेंड पेज (जैसे डैशबोर्ड) पर कॉल करना चाहिए।

यदि टेस्टीमेल नहीं आती है, तो आपके पास संभवतः एक मुद्दा है wp_mail()। इसलिए डिबगिंग चालू करें:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
@ini_set( 'display_errors',1 );

इस कोड को अपने पास रखें wp-config.phpऔर अपने आप को एक टेस्टीमेल भेजने की कोशिश करें। अब आपको कुछ त्रुटि संदेश प्राप्त होने चाहिए और उन्हें भी लॉग इन किया जाना चाहिए wp-content/debug.log(यदि डिबग लॉग बहुत बड़े हो सकते हैं यदि प्लगइन्स और / या थीम के कारण अधिक त्रुटियां हैं)।

इस बिंदु पर, आपको असफलता मिली wp_mail()और यदि ऐसा है तो क्यों। अगर wp_mail()सही तरीके से काम किया गया और टेस्टीमेल आ गया, तो वापस ऊपर जाएं और पता करें कि $messageसच क्यों नहीं है।

यदि आपके पास समस्याएँ हैं wp_mail(), तो ध्यान रखें कि wp_mail()PHPs mail()फ़ंक्शन का उपयोग न करें । वर्डप्रेस एक PHP वर्ग ( PHPMailer ) का उपयोग करते हैं । हो सकता है कि आपको sendmail के बजाय SMTP का उपयोग करने के लिए एक प्लगइन की आवश्यकता हो । या समस्या किसी अन्य स्थान पर स्थित है। हम नहीं जानते। आपको जांच करनी होगी।


हाँ, मैंने कोर में खुदाई करने की कोशिश की और यह मुझे PHPMailer की ओर भी ले गया, और यह वास्तव में php का उपयोग करता हैmail() । कम से कम कुछ मामलों में (पंक्ति 732 में देखें wp-includes/class-phpmailer.php। मेरे पास ftp atm तक पहुंच नहीं है, लेकिन मैं जितनी जल्दी हो सके आपके सुझावों की कोशिश करूंगा। निश्चित रूप से यह मुझे कहीं ले जाना चाहिए। बहुत बहुत धन्यवाद!
qwerty

मैंने परीक्षण किया wp_mail()और यह ठीक काम करने लगता है, मुझे उम्मीद के मुताबिक मेल मिला। WP अभी भी टिप्पणी / पासवर्ड-रीसेट ईमेल नहीं भेजेगा, और मुझे लॉग फ़ाइल में कुछ भी नहीं मिला (यह नहीं बनाया गया था), इसलिए मैंने एक एसएमटीपी मेल प्लगइन स्थापित करने की कोशिश की और इसके लिए एक नया ईमेल खाता स्थापित किया Wordpress। यह अब काम करता है, लेकिन मुझे अभी भी समझ में नहीं आया कि यह पहले क्यों नहीं भेज सका। धन्यवाद!
क्वर्टी

मुझे कोई त्रुटि नहीं मिल रही है और यहाँ तक कि मेल भी नहीं
baldraider

2

यह एक सुपर कष्टप्रद त्रुटि संदेश है क्योंकि यह कई चीजें हो सकती हैं, और यह वास्तविक त्रुटि को प्रकट नहीं करता है (जो अक्सर कोड के अन्य भागों में खामोश हो जाता है)।

यह त्रुटि तब दिखाई देती है जब wp_mail()फ़ंक्शन गलत लौटता है, जो बदले में गलत हो सकता है phpmailer->Send()या अपवाद छोड़ सकता है।


PHP के mail()फ़ंक्शन से चेतावनी कैसे प्रदर्शित करें

ये आम तौर पर डिफ़ॉल्ट रूप से खामोश हो जाते हैं, लेकिन दुर्भाग्य से वर्डप्रेस कभी भी उन्हें पकड़ नहीं पाता है। उन्हें दिखाने के लिए, बस हटाने @से संकेत @mail(...में wp-includes/class-phpmailer.phpमें mailPassthru()समारोह:

if (ini_get('safe_mode') || !($this->UseSendmailOptions)) {
    $rt = @mail($to, $this->encodeHeader($this->secureHeader($subject)), $body, $header);
} else {
    $rt = @mail($to, $this->encodeHeader($this->secureHeader($subject)), $body, $header, $params);
}


अन्य संभावित कारणों का शिकार कैसे करें:

  1. की तह तक एक पंक्ति जोड़े wp_mail()में /wp-includes/pluggable.php:

    // Send!
    try {
        return $phpmailer->Send();
    } catch ( phpmailerException $e ) {
        //------------- This next line is the one to add -------------------
        if (WP_DEBUG) echo '<pre>' . esc_html(print_r($e, TRUE)) . '</pre>';
        return false;
    }
  2. यह पूर्ण विवरण को डंप करेगा जहां अपवाद उठाया गया था। दुर्भाग्य से यह कभी-कभी इस अनपेक्षित अपवाद संदेश को शामिल करता है: " मेल फ़ंक्शन को तुरंत नहीं कर सकता "। हाँ धन्यवाद वर्डप्रेस, यह असली मददगार है।

  3. अपवाद को देखकर आप त्रुटि की लाइन नंबर पा सकते हैं, और वास्तविक कारण खोजने के लिए कोड के माध्यम से इसे वापस ट्रेस कर सकते हैं।

सौभाग्य। उम्मीद है कि वर्डप्रेस भविष्य में कुछ बिंदु पर ईमेल त्रुटि से निपटने में सुधार करता है।


2

मेरे पास Amazon EC2 पर उबंटू सर्वर के साथ एक ही समस्या है। मुझे रीसेट पासवर्ड लिंक का उपयोग करते समय समस्या आती है और अन्य अधिसूचना ईमेल भी काम नहीं कर रहे थे।

तो यहाँ समाधान है जो मेरे लिए काम wp_mail()करता है। ईमेल को भेजने के लिए वर्ड-प्रेस का उपयोग किया जाता है, जिसे PHPMailerक्लास की आवश्यकता होती है जो कि स्टोर किए गए php मेलर का उपयोग करता है /usr/sbin/sendmail

Php मेल चेक करने के लिए सबसे पहले इस साधारण php फंक्शन का उपयोग करें

<?php
$to = "example@gmail.com";
$subject = "Test Email Function";
$txt = "Hello world!";
$headers = "From: webmaster@example.com" . "\r\n" .
"CC: xyz@example.com";

mail($to,$subject,$txt,$headers);
?>

यदि यह काम नहीं कर रहा है, तो आपको php मेलर स्थापित करने की आवश्यकता है। Ubuntu सर्वर पर php मेल को स्थापित करने के लिए इस कमांड का उपयोग करें।

sudo apt-get install sendmail

फिर शब्द-प्रेस ईमेल फ़ंक्शन की जांच करें।


यह उत्तर वह है जिसे किसी को भी किसी भी अन्य उत्तर से पहले प्रयास करना चाहिए, यह तरीका है
hatenine

1

यदि अन्य महान जवाब यहाँ मदद नहीं करते हैं, तो यह कोशिश करें:

मुझे इस समस्या का सामना करना पड़ा और वर्डप्रेस के लिए किसी भी सुझाव में मुझे कुछ भी नहीं मिला, मेरे लिए इसे हल कर दिया।

फिर मैंने जांच शुरू की कि क्या यह PHP इंस्टॉलेशन ही था जिसने मेल फ़ंक्शन को अक्षम कर दिया था, लेकिन इसमें से किसी ने भी काम नहीं किया। सब कुछ ऐसा लग रहा था कि यह ठीक से कॉन्फ़िगर किया गया था।

मेरे लिए इन सभी समस्याओं की शुरुआत एक बार मैंने अपने सर्वर को CentOS 7 में अपग्रेड करने के लिए की थी जो SELinux (सुरक्षा संवर्धित लिनक्स) का उपयोग करता है और जो मैंने पिछले कुछ हफ्तों में SELinux के साथ सीखा है वह यह है कि अगर कुछ काम नहीं कर रहा है, लेकिन सब कुछ ऐसा दिखता है यह काम कर रहा होना चाहिए ... इसका मतलब है कि SELinux चुपचाप है और गुप्त रूप से आपको पृष्ठभूमि में रोक रहा है।

और वियोला।

यदि आप चल रहे हैं और ओएस जो SELinux का उपयोग करता है, तो बस निम्नलिखित कमांड को रूट के रूप में निष्पादित करें:

setsebool -P httpd_can_sendmail=1

एक सुरक्षा सेटिंग है जो वेबसर्वर को ईमेल भेजने से स्वाभाविक रूप से रोकती है। जब आप उस स्विच को फ्लिप करते हैं और SELinux को बताते हैं कि वेबसर्वर के लिए ईमेल भेजना ठीक है, सब कुछ अचानक काम करता है।


0

मैं आज इस में भाग गया; मेरे मामले में स्थिति यह हुई क्योंकि सर्वर की होस्ट फ़ाइल में ईमेल पते का एक ही डोमेन नाम है, जो लोकलहोस्ट की ओर इशारा करता है। एमएक्स रिकॉर्ड एक अलग सर्वर को इंगित करता है, लेकिन मेजबानों की फाइल DNS और ओवरराइडिंग है जो ईमेल को स्थानीय रूप से वितरित करने की कोशिश कर रही है। मेजबानों की फाइल से डोमेन को हटाना और सेंडमेल को फिर से शुरू करना इस मुद्दे को हल करता है।


0

मुझे नहीं पता कि यह आपके लिए अभी भी प्रासंगिक है या नहीं, लेकिन चूंकि कोई जवाब नहीं चुना गया है, इसलिए मैंने सोचा कि मुझे इसे एक बार आजमाकर देखें।

वास्तव में, मुझे उसी समस्या का सामना करना पड़ा था क्योंकि मेरे ओपनशिफ्ट होस्ट ने आज अचानक रास्ता दे दिया और मेल भेजना बंद कर दिया। कोड और कोडेक्स के माध्यम से खुदाई करने पर, मुझे wp_mail () फ़ंक्शन के बारे में पता चला और आखिरकार Google ने मुझे यहां पहुंचाया और मैंने देखा कि इसे कैसे ओवरराइड किया जा सकता है।

@ Ralf912 के उत्तर पर बिल्डिंग, मैंने स्क्रिप्ट को थोड़ा संशोधित किया ताकि कोड वर्डप्रेस डिफ़ॉल्ट एक के बजाय मेल भेजने के लिए sendgrid.com की वेब एप का उपयोग करे (जो मुझे लगता है:

<?php

function sendgridmail($to, $subject, $message, $headers)
{
    $url = 'https://api.sendgrid.com/';
    //$user = 'yourUsername';
    //$pass = 'yourPassword';

    $params = array(
        'api_user'  => $user,
        'api_key'   => $pass,
        'to'        => $to,
        'subject'   => $subject,
        'html'      => '',
        'text'      => $message,
        'from'      => 'abc@hotmail.com',
      );


    $request =  $url.'api/mail.send.json';

    // Generate curl request
    $session = curl_init($request);
    // Tell curl to use HTTP POST
    curl_setopt ($session, CURLOPT_POST, true);
    // Tell curl that this is the body of the POST
    curl_setopt ($session, CURLOPT_POSTFIELDS, $params);
    // Tell curl not to return headers, but do return the response
    curl_setopt($session, CURLOPT_HEADER, false);
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

    // obtain response
    $response = curl_exec($session);
    curl_close($session);

    // print everything out
    //print_r($response);
}

//only for testing:
/*$to      = 'abc@yahoo.com';
$subject = 'Testemail';
$message = 'It works!!';
echo 'To is: ' + $to;
#wp_mail( $to, $subject, $message, array() );
sendgridmail($to, $subject, $message, $headers);
print_r('Just sent!');*/

if (!function_exists('wp_mail')) {
    function wp_mail($to, $subject, $message, $headers = '', $attachments = array())
    {
        // use the PHP GnuPG library here to send mail.
        sendgridmail($to, $subject, $message, $headers);
    }
}

function plugin_init()
{
   /* $to      = 'xyz@yahoo.com';
    $subject = 'Testemail';
    $message = 'It works Live!';
    //echo 'To is: ' + $to;
    wp_mail( $to, $subject, $message, array() );
    //print_r('Just sent!');*/
}

और यह काम किया!


0

मेरे पास एक ही त्रुटि थी, दोनों फ़ंक्शन (मेल और wp_mail) ने काम किया, लेकिन मुझे अभी भी यह कष्टप्रद त्रुटि थी। फिक्स बहुत आसान था, लेकिन मुझे कारण खोजने में कुछ घंटे लग गए। तो मैं यहाँ पर आपके साथ जो समस्या हो सकती है (या नहीं हो सकती) पर आपके समाधान को साझा करूँगा।

मैंने मेल () फ़ंक्शन की कोशिश की और यह काम कर गया, लेकिन जब आप इसका परीक्षण करते हैं तो आप मेल () फ़ंक्शन में 'पैरामीटर' नामक अंतिम पैरामीटर निर्दिष्ट नहीं करते हैं। और WP इसका उपयोग करता है।

@mail("example@exmaple.com",$title,$body,$headers,"-fexample@exmaple.com");

तो, मूल रूप से, यह पैरामीटर ("-fexample@exmaple.com") ध्वज के साथ "-f" मेल बनाता है () फ़ंक्शन की जांच करता है कि "विश्वसनीय ईमेल" सूची में सूचीबद्ध ईमेल पता "example@exmaple.com" क्या है।

इसलिए यदि ऐसा नहीं होता है, तो यह गलत है, जो wp_mail बनाता है () गलत रिटर्न करता है और त्रुटि संदेश की ओर जाता है।

तो, समाधान यह है कि आप के लिए होस्ट करने के लिए कहें, या यदि आप cPanel का उपयोग कर रहे हैं, तो बस इस पते के लिए ईमेल खाता जोड़ें और यह स्वचालित रूप से इसे "विश्वसनीय सूची" में जोड़ देगा।


0

इसका नाम है -मैनेज रजिस्टर्ड ईमेल-आईडीएस फॉर सेलिंग मेल्स फ्रॉम स्क्रिप् ट्स यानी (वर्डप्रेस)।

  1. अपना Cpanel लॉगिन करें।
  2. ईमेल सेक्शन पर जाएं> फिर रजिस्टर्ड ईमेल आईडी पर क्लिक करें।
  3. फिर जोड़ें (wordpress@yourdomain.com) या जहाँ आपका वर्डप्रेस होस्ट किया गया है। यानी (wordpress@blog.yourdomain.com)। फिर सबमिट करें, आपके होस्टिंग प्रदाता के आधार पर प्रतीक्षा 15 मिनट को सक्रिय करने में कुछ मिनट लगते हैं, फिर यह काम करेगा।

0

मेरे पास उम्र के लिए यह त्रुटि थी और इतने सारे समाधान की कोशिश की जो काम नहीं करती थी। मेरे पास AWS EC2 पर एक कस्टम वर्डप्रेस इंस्टाल है। सबसे पहले यह सुनिश्चित करें कि आपका एडब्ल्यूएस एसईएस मेल समर्थन के माध्यम से सक्षम है, वे एसईएस और ईसी 2 में एक ही (या करीबी) क्षेत्र में होना चाहिए। मैंने मेल प्राप्त / भेजने के लिए ईमेल के लिए Google सुइट (gsuite) का उपयोग किया।

सुनिश्चित करें कि परीक्षण ईमेल AWS SES और Gsuite में भेजता है।

वर्डप्रेस प्लगइन WP मेल एसएमटीपी स्थापित करें, "अन्य एसएमटीपी" विकल्प का उपयोग करें, एडब्ल्यूएस एसईएस से अपने एसएमटीपी क्रेडेंशियल्स को पकड़ो, यह वह जगह है जहां मैं फंस गया।

आपको एन्क्रिप्शन के लिए टिक बॉक्स "एसएसएल" को सक्षम करना होगा, यह मेरे लिए पोर्ट को 465 में बदलता है। पिछले पर मेरा ईमेल परीक्षण Worpdress से सफलतापूर्वक भेजा गया।

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