【发布时间】:2014-04-15 16:49:02
【问题描述】:
所以我正在尝试学习 PHP,但我在某些代码方面遇到了问题。
我想要实现的是我的网站上有一个非常简单的评论表单,访问者可以使用它向我发送电子邮件,但我收到了很多垃圾邮件。
所以我想做的是放在一个隐藏的空字段中,然后只在它为空时发送电子邮件。如果有人有建议,他们将不胜感激。
这是我的 HTML 代码:
<form id="contact" name="contact" method="post" action="send.php">
<h3 class="send-comments-hdr">Your Comments?</h3>
<ul class="form-holder">
<li><label for="name" class="comment-labels">Name</label></li>
<li><input type="text" name="name" id="name" class="comment-inputs" placeholder="Your Name"/></li>
<li><label for="email-input" class="comment-labels">Email</label></li>
<li><input type="email" name="email" id="email-input" class="comment-inputs" placeholder="your.name@example.com" /></li>
<li><label for="comments" class="comment-labels">Comments</label></li>
<li><textarea name="comments" id="comments" class="comment-inputs" rows="4"></textarea></li>
<li class="center"><button id="send-comments" type="submit" class="send-button">Send</button></li>
</ul>
</form>
还有我的 PHP 发送文件:
<?
$parent = $_SERVER["HTTP_REFERER"];
$name = $_POST['name'];
$email = $_POST['email'];
$comments = $_POST['comments'];
$to = "myemail@gmail.com";
$subject = "Comments From a Website Visitor";
$message = "<p>A visitor from mydomain.com has left the following comments:</p>";
$message .= '<html><body>';
$message .= '<table rules="all" style="border-color: #666" cellpadding="10">';
$message .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td><td>" . $name . "</td></tr>";
$message .= "<tr><td><strong>Email:</strong> </td><td>" . $email . "</td></tr>";
$message .= "<tr><td><strong>Comments:</strong> </td><td>" . $comments . "</td></tr>";
$message .= "</table>";
$message .= "</body></html>";
$message .= "<p>Please reply ASAP, Thank you.</p>";
$headers = "From: $name <$email>" . "\r\n";
$headers .= "Reply-To: $email" . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
if (mail($to, $subject, $message, $headers)) {
header("Location:$parent");
}
?>
我昨天一整天都尝试了几种代码变体,但似乎无法使其正常工作。感谢大家的建议,希望今天能学到一些东西。
【问题讨论】:
-
表单中的隐藏字段在哪里?
-
无论如何,您认为这会有什么帮助?无论您需要隐藏字段包含什么,垃圾邮件发送者都可以将相同的内容放入其中。
-
如果您想减缓自动垃圾邮件发送者的速度,您需要使用 CAPTCHA 之类的东西。
-
一旦你弄清楚如何减缓自动垃圾邮件发送者的速度(我们大多数人都使用验证码或 csrf 令牌),你应该弄清楚如何防止标题注入到你的电子邮件中......这要糟糕得多有问题。
-
很多人使用这个系统说垃圾邮件机器人倾向于填写表格中的所有字段。因此,如果您将其设置为仅在为空时发送,它们就可以工作。