PHP mail()起作用,但wp_mail()不起作用

时间:2016-08-19 作者:Pierre

我完全被WordPress(WP 4.6 multisites)中的邮件功能弄糊涂了。

我在本地(我的本地主机上)测试了WordPress发送邮件。乍一看,这很好(我真的不知道为什么,因为我从未在WordPress中配置过任何SMTP服务器地址)。创建用户后,通知邮件将正确发送到正确的地址。

BUT, 如果我尝试在我的一个主题页中使用wp\\u mail()函数,它就是不起作用!如果我改用mail()php函数,它会工作得很好。(php mail()是在我的smtp服务器“smtp”上设置的,该服务器是在我的提供商的smtp服务器上设置的,具有有效的“发件人地址”)

同样的问题here (Dead link, question was removed). 区别在于,在我的例子中,wp\\u mail()does work 在仪表板部分,但不在我的主题中。。。非常感谢你的跟踪,皮埃尔。(希望这篇帖子能被贴出来!:)

3 个回复
SO网友:Ethan O\'Sullivan

插件,WP Mail SMTP, 看起来是使用wp_mail() 在本地主机上正常运行。根据描述:

重新配置wp_mail() 函数使用SMTP代替mail() 并创建一个选项页来管理设置。

SO网友:Shashank Sharma

添加操作方法phpmailer_init 在主题函数中。php。并使用SMTP服务器详细信息配置设置。

add_action( \'phpmailer_init\', \'phpmailer_ss_SMTP\' );
function phpmailer_ss_SMTP( $phpmailer )
{
    $phpmailer->IsSMTP();
    $phpmailer->Host        = \'mail.domainname.com\';
    $phpmailer->Port        = 588; 
    $phpmailer->SMTPAuth    = true; 
    $phpmailer->Username    = \'[email protected]\';
    $phpmailer->Password    = \'Set Password\';
    $phpmailer->From        = \'[email protected]\';
    $phpmailer->FromName    = \'Website Name\';
    $phpmailer->AuthType    = \'LOGIN\';
    $phpmailer->SMTPAutoTLS = false;
    $phpmailer->SMTPSecure  =\'\'; 
}

SO网友:butlerblog

其他答案为检查设置SMTP提供了很好的解决方案,无论这是否是您的实际问题,您都应该这样做。

然而,根据你的描述,我认为这不是真正的问题。更可能的是,在您尝试使用wp_mail() 尚未加载该函数。

您是否在调试模式下运行WP?如果没有,请启用它并再次测试。如果出现错误wp_mail() 函数未定义,那么您的问题是wp_mail() (和pluggable.php)未加载,无法使用。

当人们不将进程挂接到特定操作,或者不知道操作的典型顺序,而使用在加载函数之前触发的钩子时,就会发生这种情况。

wp_mail() 是一个可插入的函数,这意味着插件可以改变它。可插入函数在过程的后期加载,以便插件可以首先定义它们。

将使用可插入函数的进程挂接到init 操作将有所帮助,因为所有可插入函数都是在该点加载的。因此,您的流程应该如下所示:

add_action( \'init\', \'my_hooked_function\' );
function my_hooked_function() {
    // doing something here...
    wp_mail( $to, $subject, $message );
}
如果你正在做的过程是在你的主题功能中。php但没有连接到操作,连接到适当的操作将解决您的问题。

您将看到提到的另一个不太理想的选择是简单地确保可插拔。php包括:

function my_not_hooked_function() {
    include_once( ABSPATH . \'/wp-includes/pluggable.php\' );
    // doing something here...
    wp_mail( $to, $subject, $message );
}

相关推荐

Throttling email frequency

我有一个工作委员会网站,运行着wp job manager,通常发送电子邮件的次数很低,但偶尔一个操作会触发数百名收件人的电子邮件更新,以了解列表状态的变化或雇主在申请人列表上的状态变化。我目前通过Dreamhost使用WP Mail SMTP发送。Dreamhost的电子邮件限制为每小时100封。由于这些状态更新和来自该站点的大多数电子邮件都不太需要时间,我正在寻找一种解决方案,即将电子邮件指令排队,每分钟只发送一封电子邮件,和/或计算过去人力资源中发送的数量,当达到某个上限时,延迟队列,然后重新开始。