wp_mail not sending

时间:2017-02-11 作者:Francisco F.

因此,我有一个本地主机WordPress服务器,并且wp\\u mail功能可以完美地工作并发送。当我将完全相同的文件作为主题放在实际的WordPress网站上时,它只显示一个空白屏幕,不发送任何内容。代码:

<?php
if (isset($_POST[\'submit\'])) {
$first_name = $_POST[\'first_name\'];
$last_name = $_POST[\'last_name\'];
$email = $_POST[\'email\'];
$subject = $_POST[\'subject\'];
$message = $_POST[\'message\'];
$company = $_POST[\'company\'];
$to = "[email protected]";


function wpse27856_set_content_type(){
return "text/html";
}
add_filter( \'wp_mail_content_type\',\'wpse27856_set_content_type\' );

$msg = \'<html><body><h1>Contact Service</h1><table rules="all" style="border-color: #666;" cellpadding="10"><tr style="background: #E3E8EC;"><td><strong>First Name:</strong> </td><td>\' . strip_tags($_POST[\'first_name\']) . \'</td></tr><tr><td><strong>Last Name:</strong> </td><td>\' . strip_tags($_POST[\'last_name\']) . \'</td></tr><tr><td><strong>Email:</strong> </td><td>\' . strip_tags($_POST[\'email\']) . \'</td></tr><tr><td><strong>Company:</strong> </td><td>\' . strip_tags($_POST[\'company\']) . \'</td></tr><tr><td><strong>Message:</strong> </td><td>\' . strip_tags($_POST[\'message\']) . \'</td></tr></body></html>\';
wp_mail( $to, $subject, $msg );
?>
然后是一个表单,您可以在其中输入所有内容。任何帮助都将不胜感激:)

3 个回复
SO网友:Rick Hellewell

我将尝试一个简单的wp\\u mail()代码段,它将测试wp\\u mail进程是否正常工作:

wp_mail( \'[email protected]\', \'The subject\', \'The message\' ); 
我还在wp Codex中的wp\\U邮件中看到一条注释,即某些主机将需要\'[email protected]\'邮件帐户在发送邮件之前创建。

看看这里的开发页面https://developer.wordpress.org/reference/functions/wp_mail/ . 请注意,您可能需要设置wp\\u mail\\u from()值以指定“发件人”地址。

此外,当您将测试发送到自己的电子邮件时,请检查垃圾邮件/垃圾文件夹是否被拦截。

当然,还要清理表单字段中的输入。

SO网友:butlerblog

屏幕变为空白的原因是出现错误。您需要打开调试输出(例如将WP\\u DEBUG设置为true),以便了解错误是什么。

在查看代码时,最可能的问题是您缺少了开头“if”的右大括号。问您的问题时,这可能只是一个复制/粘贴错误?

<?php
if (isset($_POST[\'submit\'])) {
    $first_name = $_POST[\'first_name\'];
    $last_name = $_POST[\'last_name\'];
    $email = $_POST[\'email\'];
    $subject = $_POST[\'subject\'];
    $message = $_POST[\'message\'];
    $company = $_POST[\'company\'];
    $to = "[email protected]";


    function wpse27856_set_content_type(){
    return "text/html";
    }
    add_filter( \'wp_mail_content_type\',\'wpse27856_set_content_type\' );

    $msg = \'<html><body><h1>Contact Service</h1><table rules="all" style="border-color: #666;" cellpadding="10"><tr style="background: #E3E8EC;"><td><strong>First Name:</strong> </td><td>\' . strip_tags($_POST[\'first_name\']) . \'</td></tr><tr><td><strong>Last Name:</strong> </td><td>\' . strip_tags($_POST[\'last_name\']) . \'</td></tr><tr><td><strong>Email:</strong> </td><td>\' . strip_tags($_POST[\'email\']) . \'</td></tr><tr><td><strong>Company:</strong> </td><td>\' . strip_tags($_POST[\'company\']) . \'</td></tr><tr><td><strong>Message:</strong> </td><td>\' . strip_tags($_POST[\'message\']) . \'</td></tr></body></html>\';
    wp_mail( $to, $subject, $msg );

} // this closes the "if" and was omitted in the original code.

?>

SO网友:sMyles

代码中存在很多问题:

您需要关闭if 带右括号的语句}$_POST HTML中的值

  • 您应该始终养成对任何类型的用户输入进行清理的习惯。当过滤器工作时,您还可以设置Content-Type 在标题中,我将使用以下内容:

    if ( isset( $_POST[\'submit\'] ) ) {
    
        $first_name = sanitize_text_field( $_POST[\'first_name\'] );
        $last_name  = sanitize_text_field( $_POST[\'last_name\'] );
        $email      = sanitize_text_field( $_POST[\'email\'] );
        $subject    = sanitize_text_field( $_POST[\'subject\'] );
        $message    = wp_kses( $_POST[\'message\'], false );
        $company    = sanitize_text_field( $_POST[\'company\'] );
        $to         = "[email protected]";
    
        $msg = \'<html><body><h1>Contact Service</h1><table rules="all" style="border-color: #666;" cellpadding="10"><tr style="background: #E3E8EC;"><td><strong>First Name:</strong> </td><td>\' . $first_name . \'</td></tr><tr><td><strong>Last Name:</strong> </td><td>\' . $last_name . \'</td></tr><tr><td><strong>Email:</strong> </td><td>\' . $email . \'</td></tr><tr><td><strong>Company:</strong> </td><td>\' . $company . \'</td></tr><tr><td><strong>Message:</strong> </td><td>\' . $message . \'</td></tr></body></html>\';
        $sent = wp_mail( $to, $subject, $msg, array( \'content-type\' => \'text/html\') );
    
        if( $sent ){
            echo "Email Sent!";
        } else {
            echo "Email NOT Sent!";
        }
    }
    
    正如巴特勒博客(butlerblog)也提到的,WSOD(死亡的白屏)很可能意味着500个内部服务器错误。在页面上显示(生产站点应禁用此选项)

    有关更多信息,请访问以下链接,或联系您的托管公司:https://codex.wordpress.org/WP_DEBUG

    具体来说,如果要在站点上启用调试输出,则应在wp-config.php 如上面文档链接中定义的文件。

    define( \'WP_DEBUG\', true );
    define( \'WP_DEBUG_DISPLAY\', true );
    define( \'WP_DEBUG_LOG\', true );
    
    你一定有WP_DEBUG true 为了WP_DEBUG_DISPLAY 要使用,应将其设置为false,以防止在站点前端(用于生产)输出PHP警告,以及true 用于调试(在屏幕上显示)。

    WP_DEBUG_LOG 将创建位于的文件wp-content/debug.log 错误日志输出(设置为true)

    这应该告诉你你的实际错误是什么

  • 相关推荐

    无法在模板函数.php中使用IS_HOME

    我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请