PHP mail()麻烦

时间:2011-08-31 14:08:47

标签: php email sendmail

我正在尝试在WordPress主题中包含一个简单的联系表单,我正在为某人编写代码(他们希望它在不使用任何WP插件的情况下运行,所以我只是使用PHP)。

这是我正在使用的代码:

<?php

include "../../../../wp-blog-header.php"; // include WP to be able to use some options

if (of_get_option('ss_contact_email', 'no entry' )) { // custom WP option
    $mailto = of_get_option('ss_contact_email', 'no entry' );
} else {
    $mailto = get_option('admin_email'); // WP option to get email address of the admin
};

$cc = "";
$bcc = "";
$subject = "[Contact Form] " .$_POST['subject']. ""; 

$vname = ucwords($_POST['user']);

$email = $_POST['email'];

function validateEmail($email)
{
   if(eregi('^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2,3})?(\.[a-zA-Z]{2,3})?$', $email))
      return true;
   else
      return false;
}


if((strlen($_POST['user']) < 1 ) || (strlen($email) < 1 ) || (strlen($_POST['question']) < 1 ) || validateEmail($email) == FALSE){
    $emailerror .= '';

    if(strlen($_POST['user']) < 1 ){
        $emailerror .= '<span class="wrong">Please enter your name. </span>';
    }

    if(validateEmail($email) == FALSE || strlen($email) < 1 ) {
        $emailerror .= '<span class="wrong">Please enter a valid e-mail address. </span>';
    } 

    if(strlen($_POST['message']) < 1 ){
        $emailerror .= '<span class="wrong">Please enter your message. </span>';
    }

} else {

    $emailerror .= "<span>Your message has been sent. Thank you!</span>";

    // NOW SEND THE ENQUIRY

    $timestamp = date("F j, Y, g:ia");

    $messageproper ="\n\n" .
        "Name: " .
        ucwords($_POST['user']) .
        "\n" .
        "Email: " .
        $email .
        "\n" .
        "Website: " .
        $_POST['url'] .
        "\n" .
        "Subject: " .
        $_POST['subject'] .
        "\n" .
        "Comments: " .
        "\n" .
        $_POST['message'] .
        "\n" .
        "\n\n" ;

        $messageproper = trim(stripslashes($messageproper));

        mail($mailto, $subject, $messageproper, "From: \"$vname\" <".$_POST['email'].">\nReply-To: \"".ucwords($_POST['user'])."\" <".$_POST['email'].">\nX-Mailer: PHP/" . phpversion() );

}
?>

<?php echo $emailerror; ?>

错误处理似乎很好,它返回所有正确的错误,但如果所有字段都正确,它会变为空白而不是发送并显示“谢谢你......”消息。

我在同一台服务器上多次使用相同的脚本,从来没有遇到任何问题,但这次我偶然发现了一个问题 - 邮件没有收到发送,即使它没有返回任何错误

我不确定出了什么问题。任何人都能够浏览代码并寻找一些明显的错误?

2 个答案:

答案 0 :(得分:1)

您正在使用:

 strlen($_POST['question']) < 1

作为if语句的检查,然后使用“message”作为替换。如果未设置'question',它将不会尝试发送,但也不会打印错误。

答案 1 :(得分:0)

由于电子邮件未被发送,因此很可能PHP正在mail()调用时死亡。你没有检查来自mail()的返回值,这是一种糟糕的形式 - 永远不会假设对外部服务的调用成功。打开错误报告,启用显示错误等...然后再次尝试联系表单。检查服务器日志,看看浏览器中是否显示任何内容。

否则代码看起来很好,所以没有任何更多信息,这个问题很可能无法回答。