【问题标题】:PHP Contact form editingPHP 联系表单编辑
【发布时间】:2009-12-08 21:00:06
【问题描述】:

我不是 PHP 方面的专家,只是刚刚开始,想知道您是否可以帮助我。

我试图让这个联系表给我发电子邮件,说明人名和这样的消息。

名称:弗雷德博客 消息:消息,消息。

但是当我尝试得到的只是消息时,我似乎无法在任何地方插入名称变量。

这是代码

<?php 
$name = $_REQUEST['name'] ;
$email = $_REQUEST['email'] ;
$message = $_REQUEST['message'] ;
$subject = $_REQUEST['subject'] ;

mail( "keiron.lowe@example.com", "Name: $name", "$subject", $message, "From: $email" );
header( "Location:contact.php" );
?>

【问题讨论】:

  • 也许在这里发布您的实时电子邮件地址并不是最好的选择。但话又说回来,谷歌的垃圾邮件过滤器做得很好。
  • 已编辑以编辑电子邮件(尽管很明显它会出现在历史记录和答案中......)
  • 我敢打赌,因为@Tomalak 说谷歌是@gmail 或@googlemail...天才

标签: php email forms contact


【解决方案1】:

你的论点有点混乱:

mail( "keiron.lowe@gmail.com", $subject, "Name: $name\nMessage: $message", "From: $email" );

此外,您不应在未验证电子邮件地址的情况下执行 "From: $email" - 这将使您的脚本打开发送垃圾邮件。

【讨论】:

  • +1,标头信息是正确的,因为不道德的用户可能会发送额外的标头,例如 CC、附加 To 字段等。
【解决方案2】:

您向mail() 函数传递了太多参数。试试这样的:

<?php 
ob_start();
$name = $_POST['name'] ;
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$message = $_POST['message'] ;
$subject = strtr($_POST['subject'],array(':' => ' ', "\r" => ' ', "\n" => ' '));

$message = "Name: {$name}\r\nmessage: {$message}";
mail("redacted@example.com", $subject, $message, "From: {$email}");
header("Location: contact.php", true, 302);
ob_end_clean();
die;
?>

【讨论】:

  • 太棒了,我不能从 billgate@microsoft.com 发送电子邮件;)。您应该评估来自外部的所有内容(例如 GET/POST/REQUEST/COOKIE)..
  • 虽然你是对的,但这超出了问题的范围。再说一次,我并不反对将所有事情都转移到 BCP 安全性的讨论中。最后,我更新了我的版本以反映这一点 =)
  • 谢谢你这正是我想要的!但是你能帮我多一点吗?我同意上述 cmets 说我应该验证电子邮件地址,但我该怎么做?
  • 对filter_input( ... ) 的调用会为您清理发件人电子邮件地址。清理主题可能也是一个好主意,因为它位于标题中并受用户输入的影响。
  • 你这是什么意思?这将如何阻止垃圾邮件?
【解决方案3】:

查看mail()的手册:

mail("keiron.lowe@gmail.com", "Name: $name", $message, "From: $email");

但无论如何,我强烈建议您不要依赖 PHP 的 mail() 函数,因为它的返回值并不表示邮件是否真的已发送。请改用phpmailer 发送邮件。

最好的祝愿,
费边

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    相关资源
    最近更新 更多