设置2个SMTP帐户:1个用于WordPress,1个用于WooCommerce

时间:2020-05-24 作者:jamey

我希望在我的wordpress站点上设置2个smtp帐户:

1适用于woocommerce订单1适用于所有其他形式

我有以下代码,但我无法过滤Woocommerce订单。我错过了一些事情。代码如下:

add_action( \'phpmailer_init\', \'send_smtp\' );
function send_smtp( $phpmailer ) {

    if ( true === \'WC_Email\' ) 
    {
       $phpmailer->Host       = SMTP_WC_HOST;
        $phpmailer->SMTPAuth   = SMTP_WC_AUTH;
        $phpmailer->Port       = SMTP_WC_PORT;
        $phpmailer->Username   = SMTP_WC_USER;
        $phpmailer->Password   = SMTP_WC_PASS;
        $phpmailer->SMTPSecure = SMTP_WC_SECURE;
        $phpmailer->From       = SMTP_WC_FROM;
        $phpmailer->FromName   = SMTP_WC_NAME;
    }

    else{
        $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;
    }
}   
结果,无论是在woocommerce中还是在正则形式中,都会导致“else”;因此,我没有正确过滤woocommerce订单。

2 个回复
最合适的回答,由SO网友:butlerblog 整理而成

您的前提是正确的-您可以根据您可以构建到操作功能中的任何标准连接到不同的STMP帐户。

WooCommerce有点棘手,因为它有两个电子邮件对象,一个用于创建电子邮件,另一个用于发送。此外,挂接WC发送进程需要仔细研究WC,以找出需要挂接phpmailer\\u init操作的位置。

要确定发送的电子邮件是否为WC电子邮件,一个简单的方法是在设置中使用不同的“发件人”地址设置WC(这个地址无论如何都无关紧要,因为您是通过SMTP服务器发送的,并且在设置SMTP设置时设置的是“发件人”)。进入WooCommerce>Settings>Emails,设置一个与WP设置不同的唯一“发件人”地址。然后,您可以在逻辑中使用它来确定电子邮件是通过WC还是其他方式生成的。

add_action( \'phpmailer_init\', \'send_smtp\' );
function send_smtp( $phpmailer ) {

    // Assuming the WC email is set to a different address than all others (i.e. WP General Settings email).
    $woo_from = get_option( \'woocommerce_email_from_address\' );

    // If phpMailer is initialized with the WooCommerce from address...
    if ( $phpmailer->From == $woo_from ) {

        // This is a WooCommerce email.

        $phpmailer->Host       = SMTP_WC_HOST;
        $phpmailer->SMTPAuth   = SMTP_WC_AUTH;
        $phpmailer->Port       = SMTP_WC_PORT;
        $phpmailer->Username   = SMTP_WC_USER;
        $phpmailer->Password   = SMTP_WC_PASS;
        $phpmailer->SMTPSecure = SMTP_WC_SECURE;
        $phpmailer->From       = SMTP_WC_FROM;
        $phpmailer->FromName   = SMTP_WC_NAME;

    } else {

        // It\'s NOT a WooCommerce email.

        $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;

    }
}   
UPDATE: 请重新阅读您的问题,这样可能会有点偏离。你说你想要一个用于WC订单,另一个用于所有其他表单。我上面提到的是任何WC电子邮件与任何非WC电子邮件。取决于你所说的“其他表单”(因为还有其他WC表单和电子邮件),这可能不是你所需要的。如果是这样,请在评论中提及,我将进行相应的编辑。可能您只需要检查主题行,看看它是否是订单。

SO网友:Leon William

目前,无法添加多个SMTP地址。但是,如果您仍然需要从同一域中的不同帐户发送电子邮件,则可以使用基于域的邮件,如Sendgrid、Sendinblue或Mailgun。这些邮件程序通常要求首先验证域,而不是验证邮箱帐户。在这种情况下,您可以使用它从您自己域的电子邮件地址发送电子邮件。