【问题标题】:PHP form sending blank mailsPHP表单发送空白电子邮件
【发布时间】:2013-04-16 18:01:52
【问题描述】:

我已经在 SO 上搜索了一段时间,但我似乎无法找到我的问题的答案。我有一个 PHP 邮件脚本,可以成功地将电子邮件发送到正确的邮件地址,没有问题。我使用 Gmail 作为我的邮件客户端,它运行良好,但是当我在我的主机站点(Mamutmail at active24)检查网络邮件时,我注意到很多电子邮件不会被重定向到 Gmail。

当我一年前开始使用我的邮件脚本时,我也收到了很多空白邮件,尽管我对表单进行了有效的验证。我每天收到大约 5 到 8 封空白邮件,但我在谷歌上搜索了很多并认为这是“随机主机问题”后决定在 Gmail 中过滤掉它们(我知道,这很愚蠢)。

所以,总结一下:

--> 从网站上的表单发送的邮件正在发送到主机 webmail,但有些没有导入到我的 Gmail 中

--> 我每天都收到很多空白邮件,即使我认为我有验证

这是我的表单代码:

<form id="mailForm" method="post" action="sendMailPre.php">
            Ditt namn <span style="color: red;">*</span><br/>
            <input type="text" name="name" class="required" /><br/><br/>

            Din mailadress <span style="color: red;">*</span><br/>
            <input type="text" name="mail" class="required email" /><br/><br/>

            Ditt telefonnummer<br/>
            <input type="text" name="tele" /><br/><br/>

            Din stad<br/>
            <input type="text" name="city" /><br/><br/>

            Ditt meddelande <span style="color: red;">*</span><br/>
            <textarea type="text" name="message" rows="8" class="required"></textarea><br/><br/>

            <input type="submit" class="submit" value="Skicka meddelande" /><br/><br/>
            </form>

这是 PHP 中的邮件脚本:

$ToEmail = 'test@mail.com'; 
$EmailSubject = $_POST["name"] . ' - Mail från hemsidan';
$mailheader = 'From: ' . $_POST["name"] . '' . "\n" .
'Reply-To: ' . $_POST["mail"] . '' . "\n" .
"X-Mailer: PHP/" . phpversion()."\n";


$mailheader .= "MIME-Version: 1.0\n";
$mailheader .= "Content-Type: text/html; UTF-8\n";

$message = '<html><head>';
$message .= '<style>';
$message .= 'body{line-height: 60%; padding: 35px; margin: 0;}';
$message .= '</style></head>';
$message .= '<body>';
$message .= '<span style="font-family: Trebuchet MS; font-size: 16px; font-weight: bold; color: #4c7eb0; font-weight: normal;">NAMN</span><br/>';
$message .= str_replace("\n", "<br />", ($_POST["name"])); 
$message .= '<br/><br/>';
$message .= '<span style="font-family: Trebuchet MS; font-size: 16px; font-weight: bold; color: #4c7eb0; font-weight: normal;">MAIL</span><br/>';
$message .= str_replace("\n", "<br />", ($_POST["mail"])); 
$message .= '<br/><br/>';
$message .= '<span style="font-family: Trebuchet MS; font-size: 16px; font-weight: bold; color: #4c7eb0; font-weight: normal;">TELEFONNUMMER</span><br/>';
$message .= str_replace("\n", "<br />", ($_POST["tele"])); 
$message .= '<br/><br/>';       $message .= '<span style="font-family: Trebuchet MS; font-size: 16px; font-weight: bold; color: #4c7eb0; font-weight: normal;">STAD</span><br/>';   $message .= str_replace("\n", "<br />", ($_POST["city"]));  $message .= '<br/><br/>';
$message .= '<span style="font-family: Trebuchet MS; font-size: 16px; font-weight: bold; color: #4c7eb0; font-weight: normal;">MEDDELANDE</span><br/>';
$message .= str_replace("\n", "<br />", ($_POST["message"])); 
$message .= '</span>';
$message .= '</body></html>';
mail($ToEmail, $EmailSubject, $message, $mailheader) or die ("Meddelandet kunde inte skickas.");

非常感谢一些帮助!提前谢谢!

【问题讨论】:

  • 工作验证“在哪里”? Javascript?在 PHP 中?如果是 javascript,则很容易绕过。
  • @MarcB 它在 Javascript 中。容易绕过吗?你能推荐任何好的验证吗?

标签: php forms email


【解决方案1】:

我敢打赌,您的脚本的设置方式是任何人在任何时候加载该页面时都会触发一封电子邮件。我会包含一个隐藏变量:

<input type="hidden" name="formEmail" value="1"/>

然后在 sendMailPre.php 页面上的 $_POST["formEmail"] 中检查它,如果该变量存在,则仅发送电子邮件。

我的最佳猜测是您可能正在让搜索引擎机器人访问该页面。

【讨论】:

  • 或者只是将整个生成/发送逻辑包装在if($_SERVER['REQUEST_METHOD'] == 'POST') { ... } 中。检查特定的表单字段可能不可靠。
  • @MarcB 到目前为止,您的解决方案非常好,要等一两个小时才能看到它是否真的有效。但是感谢你们俩的快速响应!