【问题标题】:Wordpress Cron phpmailerexceptionWordpress Cron phpmailer异常
【发布时间】:2017-09-18 01:21:57
【问题描述】:

我有一个安装了 EasySMTP 插件的 wordpress 网站。

我有一个真正的 cron 任务,并且我有非活动的 wp 模拟 cron。

我的 cron 正在运行,但在其中我想发送邮件但无法正常工作。

在我的日志中,我看到:

[20-Apr-2017 14:46:02 UTC] PHP Fatal error:  Uncaught exception 'phpmailerException' with message 'Invalid address:  (setFrom) wordpress@[domain]' in /home/user/public_html/wp-includes/class-phpmailer.php:1023
Stack trace:
#0 /home/user/public_html/wp-includes/pluggable.php(352): PHPMailer->setFrom('wordpress@[domain...', 'WordPress', false)
#1 /home/user/public_html/wp-content/plugins/innovation-factory/includes/php/functions.php(350): wp_mail('msolla@domain...', 'Tienes 1 ideas ...', '\n\t\t<html>\n\t\t<bo...', Array)
#2 /home/user/public_html/wp-content/plugins/innovation-factory/innovation-factory.php(301): enviarNotificacion('msolla@domain...', 'Tienes 1 ideas ...', NULL, Array, '\n\t\t<html>\n\t\t<bo...')
#3 [internal function]: do_this_hourly()
#4 /home/user/public_html/wp-includes/class-wp-hook.php(298): call_user_func_array('do_this_hourly', Array)
#5 /home/user/public_html/wp-includes/class-wp-hook.php(323): WP_Hook->apply_filters('', Array)
#6 /home/des in /home/user/public_html/wp-includes/class-phpmailer.php on line 1023

显然我在 EasySMTP 中有其他 smtp 配置。事实上,我有一个 smtp 托管在其他服务器上,其他域与网页域不同。

如果我从 cron 中调用 do_this_hourly() 函数,它会正确发送电子邮件。我需要做一些与 cron 任务中的邮件不同的事情吗?也许那个 wp-cron.php 还没有加载 EasySMTP?

我的 cron 是用这个命令编写的:

php /home/user/public_html/wp-cron.php

谢谢!

【问题讨论】:

    标签: php wordpress email cron


    【解决方案1】:

    $_SER 问题是,当通过 crontab 执行时,php 没有得到 $_SERVER['SERVER_NAME']。这就是 phpmailer 抛出异常的原因。

    我通过在 crontab 中手动传递变量来解决它。 F.e:

    */15 * * * * export SERVER_NAME="server.domain.name" && php /var/www/clients/client2/web8/web/wp-base/wp-cron.php 
    

    这个问题的详细描述可以在这里找到https://www.ask-sheldon.com/wordpress-cron-using-wp_mail-function/

    【讨论】:

    • 我终于解决了它在我的 wp 安装的根目录上创建 cron.php 文件并在 wordpress 之外做我的事情。这不是一个好方法,但这是我唯一可以做到的。
    【解决方案2】:

    这似乎是因为使用 cron 通过 crontab、cli 或其他命令行脚本发送邮件时未设置 $_SERVER['SERVER_NAME']。

    $_SERVER['SERVER_NAME'] 抛出一个通知,$sitename 是一个空字符串,$from_email 只是 'wordpress@'。

    WordPress 至少让您有机会在尝试发送之前设置$from_email,在这种情况下,我添加了一个似乎对我有用的过滤器。

    add_filter( 'wp_mail_from', function( $from_email ) {
        // Domain ends with an @. Append the domain from the site url.
        if ( substr( $from_email, -1 ) === '@' ) {
            // Trim protocol, double forward slash, preceeding www, port, and remaind of request uri.
            $from_email .= preg_replace( '#^(?:[hftps]*:)?//(?:www\.)?|[:/?].*$#i', '', get_site_url() );
        }
        return $from_email;
    } );
    

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 1970-01-01
      • 2015-11-23
      • 2020-11-08
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      相关资源
      最近更新 更多