2011-08-31 99 views
0

我试图在WordPress主题中包含一个简单的联系表单我为某人编写代码(他们希望它的功能没有使用任何WP插件,所以我只是使用PHP)。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._-][email protected][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; ?> 

错误处理似乎很动听,它返回所有正确的错误,但如果所有信息均正确无误它去,而不是发送和显示“谢谢你..空白“ 信息。

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

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

+0

你检查了服务器日志,看看'mail'命令是否失败? – cdeszaq

+0

您可以尝试在此代码段中使用像'$ subject'和'$ message'这样的变量。有两个原因:在没有提交表单的情况下,测试会更容易,并且您可以更安全地过滤“POST”数据以保持更安全。 –

回答

1

您使用:

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

作为检查你的if语句,但是如果使用“消息”作为替代。如果未设置“问题”,则不会尝试发送,但也不会打印错误。

+0

宾果。太感谢了。总是有人帮助别人看着代码后,我一直在盯着它,并摆弄它的年龄:) – Justine

+0

它被称为'橡胶鸭'。通常只用英文将你的代码解释为无生命的对象可以帮助你找到问题。 –

0

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

代码看起来不错,所以没有更多的信息,这个问题很可能是无法回答的。