1

我正在尝试改进使用 PHP 通过电子邮件发送表单的方式。目前我的代码如下所示:

<?php
  //==== FORM DATA
  $name = $_REQUEST['cName'];
  $email = $_REQUEST['cEmail'];
  $message = $_REQUEST['cMessage'];

  //==== EMAIL DETAILS
  $to = "myemailaddress@test.com";
  $subject = "Web Query";
  $headers .= "From:".$email;
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

  //==== EMAIL CONTENT
  $content =
  "<b>From: </b>".$name."<br />".
  "<b>Email: </b>".$email."<br /><br />".
  "<b>Message: </b>".$message;

  //==== SEND EMAIL
  mail($to, $subject, $content, $headers);
?> 

我在做这件事的方式中发现了一个潜在的缺陷。我输入了“收件人”电子邮件地址,我担心这可能会导致垃圾邮件(所有其他数据都来自 html 表单提交,除了直接进入 PHP 的“收件人”地址)。混淆该电子邮件地址的最简单方法是什么,是否有必要这样做?

4

4 回答 4

3

您的电子邮件地址是在您的 PHP 代码中设置的,因此它不会暴露给客户端浏览器。

但是,您在电子邮件标题中使用了未受保护的表单数据(正如 MMM 所指出的),这是更令人担忧的问题,应该在将此代码投入使用之前解决。

于 2013-05-25T11:03:00.877 回答
2

您应该在使用 $_REQUEST 变量之前转义它们,例如使用 mysql_real_escape_string 并且您应该检查它们是否具有正确的值类型并使用自定义函数(有效的电子邮件?)验证它们,filter_var就像我提到的常识一样: https://stackoverflow。 com/a/16748986/753676

于 2013-05-25T11:06:05.617 回答
2
$name = htmlspecialchars($_REQUEST['cName']);
$email = filter_var($_REQUEST['cEmail'], FILTER_VALIDATE_EMAIL);
$message = htmlspecialchars($_REQUEST['cMessage']);
于 2013-05-25T11:16:17.870 回答
0

如果您希望避免邮件不被视为垃圾邮件,您应该尝试使用 smtp 身份验证发送邮件。为此,您可以使用phpmailer

于 2013-05-25T11:06:59.963 回答