কীভাবে প্রোগ্রামিং হিসাবে এসএমটিপি সেট করবেন


18

ধরে নিন আমাদের কাছে ফাঁকা WP সাইট রয়েছে এবং আমরা আমাদের প্লাগইন বা থিমে প্রোগ্রামগতভাবে এসএমটিপি সেটিংস সেটআপ করতে চাই। কোর ফাইলগুলি পরিবর্তন না করে এটি করার সহজতম উপায় কী?

উত্তর:


31

প্রথমত wp_mail, আমরা যদি ফাংশনটির বাস্তবায়নটি একবার দেখে নিই, আমরা দেখতে পাব যে এই ফাংশনটি PHPMailerইমেলগুলি প্রেরণের জন্য শ্রেণি ব্যবহার করে । এছাড়াও আমরা লক্ষ করতে পারি যে এখানে হার্ড কোডিং ফাংশন কল রয়েছে $phpmailer->IsMail();যা পিএইচপি এর mail()ফাংশনটি ব্যবহার করতে সেট করে। এর অর্থ হ'ল আমরা এর সাথে এসএমটিপি সেটিংস ব্যবহার করতে পারি না। আমাদের ক্লাসের isSMTPফাংশন কল করতে হবে PHPMailer। এবং পাশাপাশি আমাদের এসএমটিপি সেটিংসও সেট করা দরকার।

এটি অর্জন করতে আমাদের $phpmailerভেরিয়েবলের অ্যাক্সেস পেতে হবে । এবং এখানে আমরা ক্রিয়াতে আসি phpmailer_initযা ইমেল প্রেরণের আগে ডাকা হয়। সুতরাং আমরা আমাদের অ্যাকশন হ্যান্ডলারটি লিখে আমাদের যা প্রয়োজন তা করতে পারি:

add_action( 'phpmailer_init', 'wpse8170_phpmailer_init' );
function wpse8170_phpmailer_init( PHPMailer $phpmailer ) {
    $phpmailer->Host = 'your.smtp.server.here';
    $phpmailer->Port = 25; // could be different
    $phpmailer->Username = 'your_username@example.com'; // if required
    $phpmailer->Password = 'yourpassword'; // if required
    $phpmailer->SMTPAuth = true; // if required
    // $phpmailer->SMTPSecure = 'ssl'; // enable if required, 'tls' is another possible value

    $phpmailer->IsSMTP();
}

এবং সব শেষ.


দুর্দান্ত জিনিস, ইউজিন, থেক্স! আমার ধারণা, এই 10 টি লাইন কোডটি একটি সম্পূর্ণ এসএমটিপি
প্লাগইনকে

@ ব্রাসোফিলো থেক্স! আমি মনে করি এটি একটি এসএমটিপি প্লাগইনকে বিকল্প হিসাবে নিতে পারে না, কারণ প্লাগইন আপনাকে অ্যাডমিন প্যানেলে সেটিংস কনফিগার করতে দেয়। এই স্নিপেটটি মূল ফাইলগুলি ভাঙা বা পুনরায় লেখার wp_mailফাংশন ছাড়াই "কীভাবে প্রোগ্রামিং ইমেল সেটিংস পরিবর্তন করবেন" সম্পর্কে সেরা অনুশীলন ।
ইউজিন মানুয়িলভ

2
এই কোডটি কোথায় রাখা উচিত? আমি আমার সমস্ত থিমগুলি একই এসএমটিপি সার্ভারগুলি ব্যবহার করতে চাই।
অঞ্জন

1
খুব আশ্চর্যজনক ডাব্লুপিপি এটিকে সহজ করে না কারণ আপনি ভাবেন যে এটি পরিবর্তন করা সাধারণ।
কারসন রিঙ্ক 13

1
এটি আমার পক্ষে কাজ করে, @ জ্যাকনিচলসনের আপনারও এটি শেষ হওয়া উচিত।
ইউজিন মানুয়িলভ

7

@ ইউজিন মানুয়িলভ উত্তরের সাথে যোগ করুন।

এসএমটিপি সেটিংস

ডিফল্টরূপে এগুলি কেবলই পাবেন - @ ইউজেনমানুইভ হিসাবে ইতিমধ্যে জবাব দেওয়া হয়েছে - একটিতে সংযুক্ত একটি কলব্যাকের সময় সেট করুন do_action_ref_array()উত্স / কোর

<?php
defined( 'ABSPATH' ) OR exit;
/**
 * Plugin Name: (WCM) PHPMailer SMTP Settings
 * Description: Enables SMTP servers, SSL/TSL authentication and SMTP settings.
 */

add_action( 'phpmailer_init', 'phpmailerSMTP' );
function phpmailerSMTP( $phpmailer )
{
    # $phpmailer->IsSMTP();
    # $phpmailer->SMTPAuth   = true;  // Authentication
    # $phpmailer->Host       = '';
    # $phpmailer->Username   = '';
    # $phpmailer->Password   = '';
    # $phpmailer->SMTPSecure = 'ssl'; // Enable if required - 'tls' is another possible value
    # $phpmailer->Port       = 26;    // SMTP Port - 26 is for GMail
}

এসএমটিপি ব্যতিক্রম

প্রতি ডিফল্ট ওয়ার্ডপ্রেস আপনাকে কোনও ডিবাগ আউটপুট দেয় না। পরিবর্তে এটি কেবল FALSEত্রুটি দেখা দিলে ফিরে আসে । এটি ঠিক করার জন্য এখানে ছোট প্লাগইন রয়েছে:

<?php
defined( 'ABSPATH' ) OR exit;
/**
 * Plugin Name: (WCM) PHPMailer Exceptions & SMTP
 * Description: WordPress by default returns <code>FALSE</code> instead of an <code>Exception</code>. This plugin fixes that.
 */

add_action( 'phpmailer_init', 'WCMphpmailerException' );
function WCMphpmailerException( $phpmailer )
{
    if ( ! defined( 'WP_DEBUG' ) OR ! WP_DEBUG )
    {
        $phpmailer->SMTPDebug = 0;
        $phpmailer->debug = 0;
        return;
    }
    if ( ! current_user_can( 'manage_options' ) )
        return;

    // Enable SMTP
    # $phpmailer->IsSMTP();
    $phpmailer->SMTPDebug = 2;
    $phpmailer->debug     = 1;

    // Use `var_dump( $data )` to inspect stuff at the latest point and see
    // if something got changed in core. You should consider dumping it during the
    // `wp_mail` filter as well, so you get the original state for comparison.
    $data = apply_filters(
        'wp_mail',
        compact( 'to', 'subject', 'message', 'headers', 'attachments' )
    );

    current_user_can( 'manage_options' )
        AND print htmlspecialchars( var_export( $phpmailer, true ) );

    $error = null;
    try
    {
        $sent = $phpmailer->Send();
        ! $sent AND $error = new WP_Error( 'phpmailerError', $sent->ErrorInfo );
    }
    catch ( phpmailerException $e )
    {
        $error = new WP_Error( 'phpmailerException', $e->errorMessage() );
    }
    catch ( Exception $e )
    {
        $error = new WP_Error( 'defaultException', $e->getMessage() );
    }

    if ( is_wp_error( $error ) )
        return printf(
            "%s: %s",
            $error->get_error_code(),
            $error->get_error_message()
        );
}

সংগ্রহস্থলের প্রয়োগ

প্লাগইনগুলি গিটহাবের এই গিস্টে উভয়ই উপলভ্য , সুতরাং কোনও আপডেট পেতে এই প্লাগইনগুলি সেখান থেকে চেক করে বিবেচনা করুন।


3

এই পোস্টের অন্যান্য উত্তরগুলি, একটি কার্যক্ষম সমাধান সরবরাহ করার সময়, আপনার এসএমটিপি শংসাপত্রগুলি কোনও প্লাগইন ফাইল বা ফাংশন.এফপি-তে সংরক্ষণ করার সুরক্ষার সমস্যাটির সমাধান করবেন না। কিছু ক্ষেত্রে যা ঠিক আছে, তবে সর্বোত্তম অনুশীলনগুলি আরও সুরক্ষিত ফ্যাশনে এই তথ্য সংরক্ষণ করার নির্দেশ দেয়। আপনার শংসাপত্রগুলি সুরক্ষিত করার ক্ষেত্রে সেরা অনুশীলনগুলি অনুসরণ না করার কোনও সত্য কারণ নেই।

কেউ কেউ এটি বিকল্প হিসাবে ডিবিতে সংরক্ষণ করার পরামর্শ দিবে, তবে আপনার সাইটের প্রশাসনিক ব্যবহারকারীর সংখ্যা এবং সেই ব্যবহারকারীরা এই লগইন শংসাপত্রগুলি দেখতে সক্ষম হবেন কিনা তার উপর নির্ভর করে একই সুরক্ষা সমস্যা সরবরাহ করে। এটির জন্য প্লাগিন ব্যবহার না করার একই কারণ।

এটি করার সর্বোত্তম উপায় হ'ল আপনার wp-config.php ফাইলের phpmailer তথ্যের জন্য ধ্রুবকগুলি সংজ্ঞায়িত করা। এটি আসলে মেল উপাদানগুলির একটি বৈশিষ্ট্য হিসাবে আলোচিত হয়েছে , তবে এই মুহূর্তে প্রকৃত বর্ধন হিসাবে গ্রহণ করা হয়নি। তবে আপনি wp-config.php এ নিম্নলিখিত যোগ করে নিজেই এটি করতে পারেন:

/**
 * Set the following constants in wp-config.php
 * These should be added somewhere BEFORE the
 * constant ABSPATH is defined.
 */
define( 'SMTP_USER',   'user@example.com' );    // Username to use for SMTP authentication
define( 'SMTP_PASS',   'smtp password' );       // Password to use for SMTP authentication
define( 'SMTP_HOST',   'smtp.example.com' );    // The hostname of the mail server
define( 'SMTP_FROM',   'website@example.com' ); // SMTP From email address
define( 'SMTP_NAME',   'e.g Website Name' );    // SMTP From name
define( 'SMTP_PORT',   '25' );                  // SMTP port number - likely to be 25, 465 or 587
define( 'SMTP_SECURE', 'tls' );                 // Encryption system to use - ssl or tls
define( 'SMTP_AUTH',    true );                 // Use SMTP authentication (true|false)
define( 'SMTP_DEBUG',   0 );                    // for debugging purposes only set to 1 or 2

এগুলি একবার wp-config.php এ সংজ্ঞায়িত হয়ে গেলে এগুলি সংজ্ঞায়িত ধ্রুবক ব্যবহার করে যে কোনও জায়গায় ব্যবহার করা যেতে পারে। সুতরাং আপনি সেগুলি প্লাগইন ফাইলে বা আপনার ফাংশন.পিপিতে ব্যবহার করতে পারেন। (ওপিতে নির্দিষ্ট, একটি প্লাগইন ফাইল ব্যবহার করুন))

/**
 * This function will connect wp_mail to your authenticated
 * SMTP server. Values are constants set in wp-config.php
 */
add_action( 'phpmailer_init', 'send_smtp_email' );
function send_smtp_email( $phpmailer ) {
    $phpmailer->isSMTP();
    $phpmailer->Host       = SMTP_HOST;
    $phpmailer->SMTPAuth   = SMTP_AUTH;
    $phpmailer->Port       = SMTP_PORT;
    $phpmailer->Username   = SMTP_USER;
    $phpmailer->Password   = SMTP_PASS;
    $phpmailer->SMTPSecure = SMTP_SECURE;
    $phpmailer->From       = SMTP_FROM;
    $phpmailer->FromName   = SMTP_NAME;
}

এই পোস্টে এ সম্পর্কে আরও কিছু বিশদ এবং গিথুবের একটি বক্তব্য এখানে রয়েছে


সত্যিই ভাল সমাধান!
ফিল হিলি

1
ছোট সংযোজন: বলা বাহুল্য, সংস্করণ নিয়ন্ত্রণে শংসাপত্রগুলি সংরক্ষণ করবেন না। .envপরিবর্তে gitignored ফাইল ব্যবহার করুন। তবে যে কোনও বিষয়ে সংবেদনশীল কিছু রাখে না সে wp-config.phpযাইহোক, সংস্করণ নিয়ন্ত্রণ ব্যবহার করছে না ...
jsphpl
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.