ওয়ার্ডপ্রেস মেল প্রেরণ প্রত্যাখ্যান করে, "... আপনার হোস্ট মেইল ​​() ফাংশন অক্ষম করতে পারে"


9

আমি সম্প্রতি আমার ওয়েবসাইটে একটি মন্তব্যের ক্ষেত্রটি বাস্তবায়িত করেছি এবং ইমেলের বিজ্ঞপ্তিটি কাজে লাগানোর চেষ্টা করেছি। নতুন মন্তব্য করা হলে ইমেল বিজ্ঞপ্তিগুলি প্রেরণ করতে চায় বলে মনে হয় না।

পিএইচপি ইমেল প্রেরণ করতে পারে কিনা তা দেখার জন্য, আমি পাসওয়ার্ডটি পুনরায় সেট করার চেষ্টা করেছি (কারণ আপনি মেইলের মাধ্যমে একটি নতুন পাসওয়ার্ড পাবেন), এবং আমি বার্তাটি পেয়েছি:

ই-মেইল পাঠানো যায়নি। সম্ভাব্য কারণ: আপনার হোস্ট মেল () ফাংশনটি অক্ষম করে থাকতে পারে

আমি সেটিংস -> আলোচনায় চেকবক্সগুলি চেক করেছি এবং ইমেলটি বৈধ, সুতরাং এটি কোনও সেটিংসের সমস্যা নয়। আমি একটি পিএইচপি ফাইল তৈরি এবং ব্যবহার করে প্রেরণ করার চেষ্টা করেছি mail(), এবং এটি সফলভাবে প্রেরণ করা হয়েছে। সুতরাং ওয়ার্ডপ্রেস দিয়ে কিছু অদ্ভুত কিছু অবশ্যই চলছে।

কোন ধারনা?


অনুগ্রহ করে ডিবাগ তথ্য
s_ha_dum

উত্তর:


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

(এটি পিএইচপি 5.3 কোড PH আপনি যদি পিএইচপি 5.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()পিএইচপি mail()ফাংশন ব্যবহার করে না । ওয়ার্ডপ্রেস একটি পিএইচপি ক্লাস ( পিএইচপিএমেলার ) ব্যবহার করে। হয়তো আপনার কেবল সেন্ডমেলের পরিবর্তে এসএমটিপি ব্যবহারের জন্য একটি প্লাগইন প্রয়োজন । অথবা সমস্যাটি অন্য জায়গায় অবস্থিত। আমরা জানি না। তদন্ত করতে হবে।


হ্যাঁ আমি কোর মধ্যে খনক চেষ্টা এবং এটি PHPMailer আমাকে নেতৃত্ব, এবং এটা আসলে না ব্যবহার পিএইচপি এর mail()। কমপক্ষে কিছু ক্ষেত্রে (লাইন 7৩২ ইন দেখুন) wp-includes/class-phpmailer.phpআমার কাছে এফটিপি এটেমের অ্যাক্সেস নেই তবে আমি যত তাড়াতাড়ি সম্ভব আপনার পরামর্শগুলি চেষ্টা করব। অবশ্যই এটি আমাকে অন্য কোথাও নিয়ে যেতে হবে। অনেক ধন্যবাদ!
কিওয়ার্টি

আমি পরীক্ষা করেছি wp_mail()এবং মনে হচ্ছে এটি ঠিকঠাক কাজ করেছে, আমি প্রত্যাশা অনুযায়ী মেলটি পেয়েছি। ডব্লিউপি এখনও মন্তব্য / পাসওয়ার্ড-রিসেট ইমেলগুলি প্রেরণ করবে না এবং লগ ফাইলে আমি কিছুই পাইনি (এটি তৈরি হয়নি), তাই আমি একটি এসএমটিপি মেল প্লাগইন ইনস্টল করার চেষ্টা করেছি এবং এর জন্য একটি নতুন ইমেল অ্যাকাউন্ট সেট আপ করেছি ওয়ার্ডপ্রেস। এটি এখন কাজ করে তবে আমি কেন এখনও এটি পাঠাতে পারিনি তা এখনও বুঝতে পারি না। ধন্যবাদ!
কিওয়ারটি

আমি কোনও ত্রুটি পাচ্ছি না এমনকি
মেলও পাচ্ছি

2

এটি একটি দুর্দান্ত বিরক্তিকর ত্রুটি বার্তা কারণ এটি অনেক কিছুই হতে পারে এবং এটি আসল ত্রুটিটি প্রকাশ করে না (যা প্রায়শই কোডের অন্যান্য অংশে নিঃশব্দ হয়ে যায়)।

এই ত্রুটিটি উপস্থিত হয় যখন wp_mail()ফাংশনটি মিথ্যা প্রত্যাবর্তন করে, phpmailer->Send()ফলস্বরূপ ঘটতে পারে যদি মিথ্যা ফেরত দেয় বা কোনও ব্যতিক্রম উত্থাপন করে।


কীভাবে পিএইচপি এর 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

আমাজন ইসি 2 তে উবুন্টু সার্ভারে আমার একই সমস্যা রয়েছে reset রিসেট পাসওয়ার্ড লিঙ্কটি ব্যবহার করার সময় আমি সমস্যাটি পাই এবং অন্যান্য বিজ্ঞপ্তি ইমেলও কাজ করে না।

সুতরাং এখানে আমার জন্য কাজ করা সমাধানগুলি রয়েছে ord ওয়ার্ড-প্রেসটি wp_mail()ইমেল প্রেরণের জন্য ফাংশন ব্যবহার করেছে যা PHPMailerক্লাসের প্রয়োজন যা পিএইচপি মেলার সঞ্চিত ছিল /usr/sbin/sendmail

পিএইচপি মেল চেক করতে প্রথমে এই সাধারণ পিএইচপি ফাংশনটি ব্যবহার করুন

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

যদি এটি কাজ না করে থাকে তবে আপনার পিএইচপি মেলার ইনস্টল করতে হবে। উবুন্টু সার্ভারে পিএইচপি মেল ইনস্টল করতে এই কমান্ডটি ব্যবহার করুন।

sudo apt-get install sendmail

তারপরে ওয়ার্ড-প্রেসের ইমেল ফাংশনগুলি পরীক্ষা করুন।


এই উত্তরটি এক যে কেউ অন্য কোন উত্তর আগে চেষ্টা করা উচিত, এই যেতে উপায় হল
hatenine

1

এখানে অন্যান্য দুর্দান্ত উত্তরগুলি যদি সহায়তা না করে তবে এটি ব্যবহার করে দেখুন:

আমি এই একই সমস্যার মুখোমুখি হয়েছি এবং ওয়ার্ডপ্রেস এর জন্য আমার কোনও পরামর্শের মধ্যে এটির সমাধান আমি পাইনি।

তারপরে আমি তদন্ত শুরু করেছিলাম যে এটি নিজেই পিএইচপি ইনস্টলেশন ছিল যা মেল ফাংশনটি অক্ষম করেছিল, তবে এর কোনওটিই কাজ করেনি। সবকিছু দেখে মনে হচ্ছে এটি সঠিকভাবে কনফিগার করা হয়েছে।

এই সমস্যাগুলি আমার জন্য একবার শুরু হয়েছিল যখন আমি আমার সার্ভারটি সেন্টোস to এ আপগ্রেড করেছিলাম যা সেলইনক্স (সুরক্ষা বর্ধিত লিনাক্স) ব্যবহার করে এবং সেলইনাক্সের সাথে আমি গত কয়েক সপ্তাহে যা শিখেছি তা হ'ল যদি কিছু কাজ না করে তবে সবকিছু দেখতে মনে হচ্ছে এটি কাজ করা উচিত ... এর অর্থ হ'ল সেলইনাক্স নীরবে এবং গোপনে আপনাকে পটভূমিতে অবরুদ্ধ করছে।

এবং ভায়োলা।

আপনি যদি চালাচ্ছেন এবং ওএস যা SELinux ব্যবহার করে, কেবল নীচের কমান্ডটি রুট হিসাবে প্রয়োগ করুন:

setsebool -P httpd_can_sendmail=1

এমন একটি সুরক্ষা সেটিংস রয়েছে যা ওয়েব সার্ভারকে ইমেল প্রেরণে সহজাতভাবে বাধা দেয়। আপনি যখন সেই স্যুইচটি ফ্লিপ করেন এবং সেলইনাক্সকে বলুন যে ওয়েবসারকের ইমেল প্রেরণ করা ঠিক আছে, সবকিছু হঠাৎ করেই কাজ করে।


0

আমি আজ এই মধ্যে দৌড়ে; আমার ক্ষেত্রে পরিস্থিতিটি ঘটল কারণ সার্ভারের হোস্ট ফাইলটিতে ইমেল ঠিকানার একই ডোমেন নাম রয়েছে, লোকালহোস্টের দিকে ইঙ্গিত করে। এমএক্স রেকর্ডটি একটি ভিন্ন সার্ভারকে দেখায়, তবে হোস্ট ফাইলটি ডিএনএসকে ওভাররাইড করছে এবং ডাব্লুপি স্থানীয়ভাবে ইমেলটি সরবরাহ করার চেষ্টা করছে। হোস্ট ফাইল থেকে ডোমেন সরানো এবং সেন্ডমেল পুনরায় চালু করা এই সমস্যার সমাধান করেছে।


0

এটি এখনও আপনার পক্ষে প্রাসঙ্গিক কিনা তা আমি জানি না, তবে যেহেতু কোনও উত্তর চয়ন করা হয়নি, তাই আমি ভেবেছিলাম একবার চেষ্টা করে দেখি।

প্রকৃতপক্ষে, আমার ওপেনশিফ্ট হোস্টটি হঠাৎ করেই আজকের দিনটি মেলে এবং মেলগুলি পাঠানো বন্ধ করার পরে আমি ঠিক একই সমস্যার মুখোমুখি হয়েছি। কোড এবং কোডেক্সের মাধ্যমে খনন করে, আমি ডাব্লুপি_মেল () ফাংশন সম্পর্কে জানতে পেরেছিলাম এবং অবশেষে গুগল আমাকে এখানে নেতৃত্ব দিয়েছিল এবং আমি দেখলাম যে এটি কীভাবে ওভাররাইড করা যায়।

@ রালফ 912 এর উত্তরে বিল্ডিং করে, আমি স্ক্রিপ্টটি কিছুটা সংশোধন করেছি যাতে কোডটি ওয়ার্ডপ্রেস ডিফল্টের পরিবর্তে মেইলগুলি প্রেরণের জন্য সেন্ডগ্রিড.কমের ওয়েব এপিআই ব্যবহার করে (আমার ধারণা:

<?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) কাজ করেছিল, তবে আমার এখনও এই বিরক্তিকর ত্রুটি ছিল। ফিক্সটি খুব সহজ ছিল, তবে কারণটি খুঁজে পেতে আমার কয়েক ঘন্টা সময় লেগেছে। সুতরাং আমি এখানে সমস্যার সমাধানটি এখানে ভাগ করব যা আপনার সাথে একই হতে পারে (বা নাও হতে পারে)।

আমি মেল () ফাংশনটি চেষ্টা করেছি এবং এটি কাজ করেছে, তবে আপনি যখন এটি পরীক্ষা করেন আপনি মেল () ফাংশনে 'পরামিতি' নামক শেষ প্যারামিটারটি নির্দিষ্ট করেন না। এবং ডাব্লুপি এটি ব্যবহার করে না।

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

সুতরাং, মূলত, "-f" পতাকাযুক্ত এই প্যারামিটারটি "-fxample@exmaple.com") মেল () ফাংশনটি চেক করে "ইমেল ঠিকানা" উদাহরণস্বরূপ "উদাহরণস্বরূপ" যদি "বিশ্বস্ত ইমেলগুলি" তালিকায় তালিকাভুক্ত হয়।

সুতরাং যদি এটি না হয়, এটি মিথ্যা প্রত্যাবর্তন করে, যা ডাব্লুপি_মেলকে () মিথ্যা ফিরিয়ে দেয় এবং ত্রুটির বার্তার দিকে নিয়ে যায়।

সুতরাং সমাধানটি হ'ল হোস্টকে আপনার জন্য এটি করতে বলুন, বা আপনি সিপ্যানেল ব্যবহার করছেন, কেবল এই ঠিকানার জন্য ইমেল অ্যাকাউন্ট যুক্ত করুন এবং এটি স্বয়ংক্রিয়ভাবে এটিকে "বিশ্বস্ত তালিকায়" যুক্ত করবে।


0

এটিকে স্ক্রিপ্টের মাধ্যমে মেল প্রেরণের জন্য ম্যানেজ নিবন্ধিত ইমেল-আইডি বলা হয় (ওয়ার্ডপ্রেস)

  1. আপনার সিপানেল লগইন করুন।
  2. ইমেল বিভাগে যান> তারপরে নিবন্ধিত ইমেল আইডি ক্লিক করুন।
  3. তারপরে (wordpress@yourdomain.com) যোগ করুন বা যেখানে আপনার ওয়ার্ডপ্রেস হোস্ট করেছে। অর্থাত্ (ওয়ার্ডপ্রেস@blog.yourdomain.com)। তারপরে জমা দিন, আপনার হোস্টিং সরবরাহকারীর উপর নির্ভর করে 15 মিনিট থেকে 1 ঘন্টা অপেক্ষা সক্রিয় করতে কয়েক মিনিট সময় নেয়, তবে এটি কার্যকর হবে।

0

আমার যুগে যুগে এই ত্রুটি ছিল এবং এতগুলি সমাধান চেষ্টা করে যা কাজ করে না। আমি এডাব্লুএস ইসি 2 এ একটি কাস্টম ওয়ার্ডপ্রেস ইনস্টল করেছি। প্রথমে আপনার AWS SES মেল সমর্থনের মাধ্যমে সক্ষম হয়েছে তা নিশ্চিত করে প্রথমে সেগুলি এসইএস এবং ইসি 2-তে একই (বা নিকটবর্তী) অঞ্চলে থাকতে হবে। আমি মেইল ​​গ্রহণ / প্রেরণের জন্য ইমেলের জন্য গুগল স্যুট (জিসুইট) ব্যবহার করেছি।

পরীক্ষা ইমেল AWS SES এবং Gsuite এ প্রেরণ করেছে তা নিশ্চিত করুন।

ওয়ার্ডপ্রেস প্লাগইন ডাব্লুপি মেল এসএমটিপি ইনস্টল করুন, "অন্যান্য এসএমটিপি" বিকল্পটি ব্যবহার করুন, এডাব্লুএস এসইএস থেকে আপনার এসএমটিপি শংসাপত্রগুলি ধরুন, এখান থেকেই আমি আটকে গেলাম।

এনক্রিপশনের জন্য আপনার অবশ্যই টিক বাক্স "এসএসএল" সক্ষম করতে হবে, এটি আমার জন্য পোর্টটি 465 এ পরিবর্তন করবে। অবশেষে আমার ইমেল পরীক্ষাটি ওয়ার্পড্রেস থেকে সফলভাবে পাঠানো হয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.