如何仅为一个特定的wp_mail()设置SMTP

时间:2018-06-26 作者:Unnikrishnan R

我只想为的特定实例设置SMTPwp_mail().

我已经测试了像“Easy WP SMTP”这样的插件,还检查了如何手动设置SMTP,但所有these apply to the entire site 然后,来自该站点的每封电子邮件都通过SMTP帐户发送。

我不想通过同一SMTP帐户发送任何其他电子邮件,如时事通讯或评论批准电子邮件。

1 个回复
SO网友:butlerblog

以下是处理您的问题的方法。它分为两部分。首先,您将创建连接作为常量,以便稍后使用。最好的方法是在wp config中。php。(您提到您正在自定义插件中执行此操作。如果这是可移植的,那么您可能希望将此更改为在db中保存设置。)其次,您将应用一个钩住WP使用的phpmailer的函数。在该函数中,您可以定义使用SMTP连接而不是默认连接的条件。

您可以在wp config中设置SMTP凭据和服务器连接信息。php作为常量,如下所示:

/*
 * 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配置后。php文件,您可以使用常量通过SMTP连接和发送任何电子邮件。可以通过挂接phpmailer\\u 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

结束