我在不同的网站上使用php电子邮件表单,偶尔可以使用。有时电子邮件会被发送,有时它会消失在黑洞中。这发生在不同的服务器上(Dreamhost,Bluehost)。电子邮件未显示在垃圾邮件中。
我有一个标有“URL”的隐藏字段,用于阻止垃圾邮件机器人。是不是有可能绊倒它?对我而言,它有时可以工作而不能在其他时间工作是没有意义的。
这是代码:
$thebox = "<textarea name='comment' rows='9' cols='70' wrap='hard' style='background-color: #E8E8E8;'></textarea>";
$error_name = "";
$error_email = "";
$error_message = "";
if(!isset($_POST['submit'])) {
$name = "";
$email = "";
}
if(isset($_POST['submit']))
{
$url = cleanup($_POST['url']); // this field should be empty
if (!empty($url)) { exit; } // if it's not, exit the script
$name=cleanup($_POST['name']);
$email=cleanup($_POST['email']);
$message=cleanup($_POST['comment']);
$subject="Email sent via MyWebsite.com website";
$find = array("\r\n", "\n", "\r", "\r\n\r\n");
$message = str_replace( $find, "<br />",$message);
$message = stripslashes($message);
$MailTo="info@MyWebsite.com";
$bad_name="Please fill in your name.";
$bad_email="Please provide a valid e-mail address.";
$bad_message="You forgot to type in a message.";
$error = 0;
$error_message="";
if ((empty($message)) || (strlen($message)<5 ) )
{
$error_message = $bad_message;
$error = 1;
}
if (!empty($message))
{
$thebox="<textarea name='comment' rows='9' cols='70' wrap='hard' style='background-color: #E8E8E8;'>".$message."</textarea>";
}
if ((!preg_match("/^([a-zA-Z0-9._])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/", $email)) || (empty($email) ) )
{
$error = 1;
$error_email = $bad_email;
}
if (empty($name))
{
$error = 1;
$error_name = $bad_name;
}
if (!empty($name) && !empty($email) && !empty($message) && $error==0)
{
$header = "From: '$name' <$email>\r\n" .
"Reply-To: $email\r\n".
"Return-Path: $email\r\n".
'X-Mailer: PHP/' . phpversion() . "\n" .
"MIME-Version: 1.0\n" .
"Content-Type: text/html; charset=utf-8\r\n" .
"Content-Transfer-Encoding: 8bit\r\n\r\n";
$Body = $message;
mail ($MailTo, $subject, $Body, $header);
echo "<p> </p> <p> </p>
<h3>
Your email has been sent.
Thank you!
</h3>
<p> </p> <p> </p><p> </p> <p> </p>";
答案 0 :(得分:0)
我回答了我自己的问题,以防其他人遇到此问题。问题确实在两台主机的服务器端。作为阻止电子邮件欺骗的一部分,他们会关注&#34; From&#34;领域。
在Dreamhost的案例中,他们不允许&#34; From&#34;字段来自Dreamhost服务器以外的任何地方。使用Bluehost,它必须是一个有效的电子邮件地址,他们能够追溯。 (我在测试中使用了一个虚构的电子邮件地址。)
我在两种情况下使用的解决方法是不使用访问者的电子邮件地址&#34; From&#34;领域。我在该字段中使用自己的电子邮件地址,并将访问者的电子邮件地址放在&#34;回复&#34;而是场。
我已经有一个清理功能来检查返回的任何数据。另外,我添加了另一层保护,以确保使用以下代码不会将任何内容插入到标题字段中:
$email= urldecode($email);
if (eregi("(\r|\n)", $email)) {exit();}
我希望这些信息有所帮助。