【问题标题】:PHP "Contact" form, e-mail address safe from spam?PHP“联系”表格,电子邮件地址不受垃圾邮件影响?
【发布时间】:2025-12-31 21:15:02
【问题描述】:

所以我在线获得了“联系我们”表单的这个 PHP 代码(我自己没有编写 PHP 代码),但它包含了我的完整电子邮件地址。以下表格是否使我的电子邮件免受垃圾邮件发送者的侵害?

contact.php 文件(真实邮箱已替换为 MYEMAIL@COMPANY.COM):

<?php
// Contact Form 

// Get posted data into local variables
$EmailFrom = Trim(stripslashes($_POST['EmailFrom'])); 
$EmailTo = "MYEMAIL@COMPANY.COM";
$Subject = "A User Has Contacted You";
$Name = Trim(stripslashes($_POST['Name'])); 
$Message = Trim(stripslashes($_POST['Message'])); 

// Validation
$validationOK=true;
if (Trim($EmailFrom)=="") $validationOK=false;
if (Trim($Name)=="") $validationOK=false;
if (Trim($Message)=="") $validationOK=false;
if (!$validationOK) {
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
  exit;
}

// Prepare email body text
$Body = "";
$Body .= "Name: ";
$Body .= $Name;
$Body .= "\n";
$Body .= "Message: ";
$Body .= $Message;
$Body .= "\n";

// Send E-Mail 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

// Redirect to Success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=success.htm\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
}
?>

html sn-p:

<form method="POST" action="contact.php">

...

</form> 

我已经读到 PHP 中包含的电子邮件地址对于爬虫来说是完全安全的,因为它都是服务器端的(假设您的服务器/站点是安全的)。不知道这是否属实,网上搜了这么多信息,我找不到确切的答案。如果有人可以确认此代码是否可以安全使用,那就太好了,谢谢!

【问题讨论】:

  • 这是真的——只要你的服务器被正确配置为执行 PHP,你的地址是安全的。这并不意味着垃圾邮件发送者不能只是填写您的表单来向您发送垃圾邮件 - 他们会的,这就是联系表单的生活,除非您像填写算术问题、验证码或越来越多的非用户一样跳过这些问题- 友好的东西。
  • 看起来写它的人自己也没有写太多 PHP 代码:P
  • Alex,那条评论让我很伤心,以为我选择了错误的表单模板:(哈哈...
  • Michael,如果字段(姓名、电子邮件--xxxx@xxxx.xxx 格式要求和消息)都是必需的/需要验证,机器人是否仍会发送垃圾邮件?我已经为人类垃圾邮件做好了充分的准备哈哈。将来我可能会集成验证码。

标签: php forms email spam


【解决方案1】:

除非他们有权访问该文件并阅读它,否则你没问题。他们无法做到。就像你说的,都是服务器端的。

【讨论】:

    【解决方案2】:

    地址是安全的,除非文件以纯文本形式提供并且可读(如 Sean 所说),但您应该阅读email injection attacks,因为您很容易受到这些影响。

    【讨论】:

      【解决方案3】:

      您的电子邮件受到保护,因为它都是服务器端的,除非他可以通过 fpt 访问您的网站,或者您有某种类型的漏洞。

      您可能还想考虑这样的事情来防止洪水泛滥。

          session_start()
      
          define('TIME_INTERVAL', 120);
      
          if(isset($_SESSION['ip']) && (time() - $_SESSION['last_post']) < TIME_INTERVAL) 
          }
             die('stop spamming !');
          {
      
          $_SESSION['last_post'] = time();
          $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
      

      此外,关于您的电子邮件验证,您可能想看看这个,它还会验证电子邮件的域以查看它是否是现有的电子邮件服务器。

      function validate_mail($email)
      {
       if (filter_var($email, FILTER_VALIDATE_EMAIL)) 
       {
          list($username,$domain)=split('@',$email);
          if(checkdnsrr($domain,'MX')) 
          {
            return true;
          } 
       }
       return false;
      }
      

      【讨论】:

      • 哇,谢谢,这看起来很棒,我假设两者都进入了 contact.php 文件,但不确定在哪里。任何地方都有效吗?看来我需要开始更熟悉 javascript/PHP 了。我可以理解代码 :)
      • 是的,将它们添加到您的 contact.php 中并使用 $validationOK = validate_mail($email); // 它将分配 true 或 false;
      • 关于洪水脚本,在执行任何操作之前将其添加到您的 php 文件顶部。
      • 还有关于 = split('@',$email) 你可能想用explode来试试,因为它可能会弹出一些错误。
      【解决方案4】:

      简单的回答,你是安全的。因为 PHP 元素只会在服务器上处理,因此任何人都无法看到您的电子邮件地址。

      【讨论】:

        最近更新 更多