【问题标题】:e-mails getting sent automatically every morning每天早上自动发送电子邮件
【发布时间】:2015-07-08 16:25:32
【问题描述】:

我有一个为客户构建的表单,它接收用户信息并将其发送给我的客户和我。它具有输入验证功能,并且不允许用户在未填写表单的情况下发送电子邮件。

我无法弄清楚表格是如何连续 3 天每天早上发送给我的,并且在早上 7:48 准确地发送了 5 封电子邮件。关于它的最奇怪的部分是表格是空白的。

另请注意:表单在测试时每次都能从多个不同的设备和浏览器正常工作。

我正在使用 PHP 发送表单、用于表单验证的 javascript、HTML 和 CSS。下面是相关代码(为了减少我遗漏了大部分输入的代码,我只保留了一个字段,这样你就可以看到一切是如何工作的)

HTML

<form method="post" name="form" id="email-form" action="css/form-to-email.php">

    <p class="blue" id="body-text-name">Name: <input id="input-name" name="fname" type="text" required />

    <input class="btn" onClick="return IsEmpty()" type="submit" name='submit' />

</form>

javascript

function IsEmpty() {
   if (document.forms['form'].name.value == "") {
        alert("empty");
       return false;
   }
    return true;
}

和 PHP

<?php
if(!isset($_POST['submit']))
{
    echo "error; you need to submit the form!";
}

$fname = $_POST['fname'];


$to = 'someEmail@some.com';
$cc = '';
$recipients = $to.", ".$cc;


$email_subject = "Order Form";
$email_body = "Order For: $fname\n\n";


$headers = "From: Order_Form\r\n";
$headers .= "Reply-To: \r\n";

mail($recipients,$email_subject,$email_body,$headers);

header('Location: ../index1.html');

?> 

我已经搜索并搜索了一个答案,但我终其一生都无法弄清楚是什么导致了这种情况或将要寻找的原因。任何帮助将不胜感激。

【问题讨论】:

  • 我会检查这实际上在做什么!我不认为它是你的想法。 document.forms['form'].name.value 修复这个问题,爬虫可能无法让表单运行。试试这个document.getElementById('input-name').value
  • @blex 这听起来像是一个非常可能的解决方案。但是我不确定参数检查是什么意思。您能否给我一些代码或给我一个链接,我可以在哪里找到并阅读它?
  • @AdamBuchananSmith 如果未设置$_POST['submit'],只需执行echo "error; you need to submit the form!"; exit(); 即可退出脚本。因为使用您发布的代码,如果您直接在浏览器地址栏中键入脚本的 URL,您会收到错误消息,但仍会发送电子邮件。
  • @RiggsFolly 我可以测试它的唯一方法是等到明天早上 7:48 对吗?
  • @AdamBuchananSmith 不,要测试它,您只需要转到yoursite.com/path/to/css/form-to-email.php 然后查看您的收件箱(应该什么都没有)。

标签: javascript php html forms email


【解决方案1】:

有可能某些东西(用户、机器人)正在直接访问您的 css/form-to-email.php。

所以,当你直接访问 css/form-to-email.php 时

在“If”块中,您正在回显一条消息,但不会阻止脚本继续执行,因此该块之后的其他代码始终运行。

echo "error; you need to submit the form!";

应该是:

return  echo "error; you need to submit the form!";

 echo "error; you need to submit the form!";
 exit(); // || die() its the same.

你也可以抛出异常。

throw new Exception("error; you need to submit the form!");

【讨论】:

  • 这听起来很有希望,我会用这个更新我的代码。但糟糕的是,直到明天早上 7 点 48 分,我才能确定它是否有效:/
  • 您可以自己尝试,只需在浏览器中手动访问css/form-to-email.php,尝试不返回,它应该发送电子邮件,尝试返回或退出,它不应该发送电子邮件。
  • 是的,请阅读我在原始问题下的最后一条评论。你们两个帮了我很多忙,谢谢!
【解决方案2】:

这个函数

function IsEmpty() {
   if (document.forms['form'].name.value == "") {
        alert("empty");
       return false;
   }
    return true;
}

错了!

document.forms['form'].name.value

返回表单标记的名称字段的值,即在您的情况下,从这个 HTML 中返回“表单”并且将始终设置为该值

<form method="post" name="form" id="email-form" action="css/form-to-email.php">

来自name="form" 属性。

更改脚本以获取您实际要检查的字段的内容!

function IsEmpty() {
   if (document.getElementById('input-name').value == "") {
        alert("empty");
       return false;
   }
    return true;
}

此验证也应在接受此数据并生成电子邮件的 PHP 脚本中完成。

<?php
if( ! isset($_POST['submit']) )
{
    echo "error; you need to submit the form!";
    exit;
}

if ( ! isset($_POST['fname'] ) {
    echo "error; You must have something in this field!";
    exit;
}

$fname = $_POST['fname'];

$to = 'someEmail@some.com';
$cc = '';
$recipients = $to.", ".$cc;

$email_subject = "Order Form";
$email_body = "Order For: $fname\n\n";

$headers = "From: Order_Form\r\n";
$headers .= "Reply-To: \r\n";

mail($recipients,$email_subject,$email_body,$headers);

header('Location: ../index1.html');

?> 

【讨论】:

  • 我标记了你的答案,帮助我解决这个错误。然而,这个问题最终成为了 ecarrizo 提出的答案。但是谢谢你!感谢您为我更正表格的那一部分!
  • 这是你的问题。您正在测试一个字段是否存在数据,始终包含数据,而不是您感兴趣的实际字段。
【解决方案3】:

可能是使用原始 URL 发送电子邮件,很可能是网络爬虫,因为您提到了时间一致性。最好在服务器端也进行验证,这应该会阻止它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2013-08-22
    • 2013-08-22
    • 2014-05-22
    • 2016-11-26
    相关资源
    最近更新 更多