php简单的联系表格即使在确认后也不会发送邮件

时间:2010-01-26 14:01:43

标签: php xhtml forms smtp

我一直在尝试在我的投资组合网站(目前在免费的megabyet.net帐户上)上运行一个php联系表单,但是在测试它(在上传的网站上),即使我收到了谢谢/确认消息,我仍然没有收到我的邮件帐户上的任何消息(在代码中指定),我似乎无法理解这里的问题....需要帮助!

可以是与SMTP相关的东西吗?


以下是代码:

<?php
if(isset($_POST['submit'])) {

$to = "vishu_unlocker@yahoo.com";
$subject = "Portfolio Contact";
$name_field = $_POST['name'];
$email_field = $_POST['email'];
$message = $_POST['message'];
$headers = "From: $email_field";
$body = "From: $name_field\n E-Mail: $email_field\n Message:\n $message";

echo "Mail has been sent, thankyou!";
mail($to, $subject, $body, $headers);

} else {

echo "blarg!";

}
?>

HTML代码:

<form id="contact_frm" action="mail.php" method="POST">
<h4>Name :</h4>
<input type="text" id="f_name" name="name"/><br/><br/>
<h4>E-Mail Address :</h4>
<input type="text" id="f_email" name="email"/><br/><br/>
<h4>Message :</h4>
<textarea id="f_msg" name="message" cols="22" rows="5"/></textarea><br/><br/>
<input id="send_btn" type="submit" value="Send >>" name="submit" /><br/>
</form>

5 个答案:

答案 0 :(得分:1)

首先,您应检查mail()是否返回true以确定邮件是否已成功发送:

<?php
if(isset($_POST['submit'])) {

    $to = "vishu_unlocker@yahoo.com";
    $subject = "Portfolio Contact";
    $name_field = $_POST['name'];
    $email_field = $_POST['email'];
    $message = $_POST['message'];
    $headers = "From: $email_field";
    $body = "From: $name_field\n E-Mail: $email_field\n Message:\n $message";

    $success = mail($to, $subject, $body, $headers);
    if ($success) {
        echo "Mail has been sent, thankyou!";
        // redirect to thank you page here
    }
    else {
        echo "message failed";
    }
} else {

echo "blarg!";

}
?>

尝试并告知我们是否有效。

此外,您是否尝试过发送到其他电子邮件地址?可能是雅虎阻止该网络主机发送垃圾邮件。作为一个免费的主机,这是一种非常可能的情况。

答案 1 :(得分:0)

如果您正在寻找与通过SMTP发送电子邮件相关的内容。我建议你使用Code Igniters邮件程序类。

http://codeigniter.com/user_guide/libraries/email.html

这也可以优雅地调试和处理SMTP错误。

答案 2 :(得分:0)

  

可以是与SMTP相关的东西吗?

可能。为什么不检查您的mailq和MTA中的日志文件?

答案 3 :(得分:0)

@John ..如果条件使用下面的代码检查,我得到输出失败= / ...所以我的mail()函数返回false =(...而且我已经尝试过gmail但邮件功能在第一时间运行不正常....它不起作用......

<?php
if(isset($_POST['submit'])) {

$to = "vishu_unlocker@yahoo.com";
$subject = "Portfolio Contact";
$name_field = $_POST['name'];
$email_field = $_POST['email'];
$message = $_POST['message'];
$headers = "From: $email_field";
$body = "From: $name_field\n E-Mail: $email_field\n Message:\n $message";

$success = mail($to, $subject, $body, $headers);

if($success) { 
 echo "Mail has been sent, thankyou!";

} else {
 echo "message sending failed!";
 }
} else {
 echo "blarg!";
 }
?>

输出 - 邮件发送失败!

那么,我是否需要在这里定义一些额外的参数?...我也看到我的主机给了sendmail的路径 - /usr/sbin/sendmail它与我的邮件功能有什么关系?...我的意思是我需要在其中定义sendmail参数吗?

@unknown - hmm codeigniter可能会有所帮助,但我以前从未使用过它......让我们看看......

@symcbean - 抱歉我不知道该怎么做:P ... probabaly因为我不太熟悉SMTP了吗?....仍然是学习者/初学者...

答案 4 :(得分:0)

如果电子邮件正确发送但从未到达,则可能是垃圾邮件过滤器捕获了该电子邮件。几个月前我在回复an similar question时写的一些要点:

  
      
  • 发件人地址(“发件人”)是否属于您服务器上的域?如果没有,那就这样做。
  •   
  • 您的服务器是否在黑名单上(例如,检查spamhaus.org上的IP)?这是共享托管的远程可能性。
  •   
  • 邮件是否通过垃圾邮件过滤器过滤?使用具有垃圾邮件文件夹的freemailer打开一个帐户并查找。此外,尝试将邮件发送到没有垃圾邮件过滤器的地址。
  •   
  • 您是否可能需要mail()的第五个参数“-f”来添加发件人地址? (参见PHP手册中的mail()命令)
  •   
  • 如果您有权访问日志文件,请按照上面的建议检查这些文件。
  •   
  • 您是否检查了“发件人:”地址是否有可能的退回邮件(“退回发件人”)?您还可以设置单独的“错误到”地址。
  •