繁体   English   中英

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

[英]php simple contact form not sending mail even after confirmation

我一直在尝试在我的投资组合网站(目前在免费的megabyet.net帐户上)上使用php联系人表格,但是即使我收到了Thankyou / confirmation消息,在进行测试(在上载的网站上)时,我仍然不会没有在我的邮件帐户(在代码中指定)上收到任何消息,在这里我似乎无法理解问题。...需要帮助!

可以和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>

首先,您应该检查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!";

}
?>

试试看,让我们知道是否可行。

另外,您是否尝试过发送到其他电子邮件地址? 可能是Yahoo阻止了该Web主机的垃圾邮件。 作为免费主机,这很可能会发生。

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

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

这也允许优雅地调试和处理SMTP错误。

可以和SMTP相关吗?

大概。 为什么不检查MTA中的mailq和日志文件?

@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 cuz我还不是很熟悉SMTP吗?.....还是一个学习者/初学者...

如果电子邮件正确发送但从未发送,则可能是垃圾邮件过滤器捕获了该电子邮件。 我在几个月前回答类似问题时写了几点要点:

  • 发件人地址(“发件人”)是否属于您服务器上的域? 如果不是,请这样做。
  • 您的服务器是否列入黑名单(例如,在spamhaus.org上检查IP)? 共享托管的可能性很小。
  • 邮件是否被垃圾邮件过滤器过滤? 使用带有垃圾邮件文件夹的freemailer开一个帐户,然后查找。 另外,请尝试将邮件发送到没有垃圾邮件过滤器的地址。
  • 您是否可能需要mail()的第五个参数“ -f”添加发件人地址? (请参阅PHP手册中的mail()命令)
  • 如果您有权访问日志文件,请按照上面的建议进行检查。
  • 您是否检查“发件人:”地址中是否存在退回邮件(“退回发件人”)? 您也可以设置一个单独的“ errors-to”地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM