我一直在尝试在我的投资组合网站(目前在免费的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>
答案 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()命令)
- 如果您有权访问日志文件,请按照上面的建议检查这些文件。
- 您是否检查了“发件人:”地址是否有可能的退回邮件(“退回发件人”)?您还可以设置单独的“错误到”地址。