web-dev-qa-db-ja.com

特定の1つのwp_mail()だけにSMTPを設定する方法

私はwp_mail()の特定のインスタンスに対してSMTPを設定したいだけです。

私は "Easy WP SMTP"のようなプラグインをテストし、SMTPを手動で設定する方法も調べましたが、すべてこれらはサイト全体に当てはまりますそしてサイトからのすべてのEメールSMTPアカウントを介して送信されます。

ニュースレターやコメント承認のEメールなど、他のEメールを同じSMTPアカウントで送信したくありません。

2
Unnikrishnan R

以下はあなたの質問を処理する方法です。それは2つの部分にあります。まず、後で使用する定数として接続を作成します。これを行う最良の方法はwp-config.phpにあります。 (あなたがこれをカスタムプラグインでやっていると言った。それが移植可能なものであれば、代わりにこれをdbで設定を保存するように変更したいかもしれない)。 WPが使用するphpmailer。その機能では、デフォルトの代わりにSMTP接続を使用する基準を定義できます。

以下のようにwp-config.phpであなたのSMTP認証情報とサーバー接続情報を定数として設定できます。

/*
 * Set the following constants in wp-config.php
 * These should be added somewhere BEFORE the
 * constant ABSPATH is defined.
 */
define( 'SMTP_USER',   '[email protected]' );    // 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',   '[email protected]' ); // 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ファイルに追加すると、SMTPを介して電子メールに接続して送信するために使用できる定数が得られます。これを行うには、phpmailer_initアクションをフックし、それを使って上記で定義した定数を使って接続条件を設定します。

あなたの特定のケースでは、あなたがSMTPを介して送信したい条件を識別するために関数にいくつかの条件付きロジックを追加したいでしょう。あなたの条件だけがphpmailerのためにSMTP接続を使うようにあなたの条件を設定してください、そして他の全てはすでに使われているものは何でも使うでしょう。

それがあなたのOPから何なのかわからないので、ここでは一般的なtrue === $some_criteriaで表しました。

add_action( 'phpmailer_init', 'send_smtp_email' );
function send_smtp_email( $phpmailer ) {

    if ( true === $some_criteria ) {
        if ( ! is_object( $phpmailer ) ) {
            $phpmailer = (object) $phpmailer;
        }

        $phpmailer->Mailer     = 'smtp';
        $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;
    }

    // any other case would not change the sending server
}

この概念は、githubに関する次の要旨に基づいています。 https://Gist.github.com/butlerblog/c5c5eae5ace5bdaefb5d

ここにそれに関する一般的な指示: http://b.utler.co/Y3

2
butlerblog