【问题标题】:PHP mail form won't send with spaces in email fieldPHP 邮件表单不会发送电子邮件字段中的空格
【发布时间】:2013-07-17 19:35:33
【问题描述】:

我的问题: 我有一个发送到电子邮件地址的联系表。它通常可以正常工作,但如果“电子邮件”文本字段中包含空格(发送邮件的人将输入他们的电子邮件),则表单将不会发送。如果任何其他表单有空格,该表单仍会发送。

我知道电子邮件地址中不允许使用空格,但如果发送的邮件在电子邮件字段中包含空格,用户仍会被带到另一个页面,说明邮件已发送,而实际上并未发送。因此,如果有人在输入电子邮件时不小心输入了空格,网站将不会发送表单,但会显示发送。

我是这样设置的: 在表单上,​​电子邮件字段由用户存储为用户帐户电子邮件的内容自动填充。然后使用POST 将此变量传递到不同的页面“wl_process.php”,其中字段被发送到电子邮件地址。但是,即使它会自动为用户填写电子邮件字段,他们也可能希望将其回复发送回另一封电子邮件。

我想做什么,不想做什么: 我不确定为什么包含空格会阻止邮件发送。即使包含空格,我也希望它发送表格。我正在寻找从文本字段中删除所有空格的 PHP 标记或方法。我不确定这是否存在。我认为另一种解决方案可能是检查电子邮件中的空格,如果有空格,则会弹出一些内容并说“输入的电子邮件无效,请重试”。但理想情况下,我只希望它发送电子邮件。而且,如果有人知道它为什么这样做,那将对将来的使用非常有益。

其他信息

请记住,在“电子邮件”字段中输入空格之前,该表单可以正常工作。如果在任何其他字段中输入了空格,表单仍然会发送!

另外:$var_email 是从位于页面顶部的<? include?> 中提取的。包含有一些$_SESSION 信息,还有MYSQLI 调用,它从数据库中抓取电子邮件并变成PHP 变量。我怀疑这与问题有关。我的问题是空格会阻止邮件发送

什么不重要

我的命名约定。不要以为我的变量$email 会以任何方式被视为电子邮件地址。它可以重命名任何东西。它在这里只是一个变量和文本字段,发布然后通过电子邮件发送。

我的代码

第 1 页(表格所在的位置)

<div class="form_box">
...
    <div class="field clearfix">
      <label>Email <span>&#42;</span></label>
      <input id="element_1_email" name="element_1_email" value="<? echo $var_email;?>" size="30" class="validate[optional]" type="text" onClick="(this).value=''"/>
    </div>

第 2 页(发送和邮寄数据的地方)

    <?
 $name = $_POST['element_0_name'];
 $email = $_POST['element_1_email'];
 $company = $_POST['element_2_company'];
 $date = $_POST['element_3_date'];
 $comment = $_POST['element_4_comment'];
 $list = $_POST['element_5_list'];
 $email_to = "contact@website.com";
 $email_subject = "Online Form";
 $email_message = "\n\n";

    function clean_string($string) {
        $bad = array ("content-type", "bcc:", "to:", "cc:", "href");
        return str_replace($bad, "",$string);
    }
    $email_message .= '<div style="font-family:Arial, Helvetica, sans-serif;padding-left: 90px;font-weight: 100;font-size: 14px;color: #2a2a2a;"><table width="1070px" height="685px;"border="0" cellspacing="0" background="http://www.website/image.jpg">
                    <tr>
                    <td style="vertical-align:top;padding-left:88px;">
                    <h2 style="padding-top:150px;padding-left:90px;">Form Information:</h2>';   
    $email_message .= "Name: ".clean_string($name)."<br>";
    $email_message .= "Email: " .clean_string($email). "<br>";
    $email_message .= "Company: " .clean_string($company). "<br>";
    $email_message .= "Date Required: " .clean_string($date). "<br>";
    $email_message .= "Comment: " .clean_string($comment). "<br>";
    $email_message .= '<u>List Of Things:<style> tr:nth-child(2n) {background-color:#d6d6d6;}</style> </u><br><table cellspacing="0" style="margin-top:10px;min-width:390px;border:1px solid #cccccc;">' .clean_string($list). '</table>';
    $email_message .= "</div>";

    $headers = 'From: '.$email."\r\n".
    'Reply-To: '. $email."\r\n" .
    'X-Mailer: PHP/' .phpversion();
    $headers .= "MIME-Version:1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    @mail($email_to, $email_subject, $email_message, $headers);
 //
 ?>

【问题讨论】:

  • 我认为电子邮件地址中不允许有空格,因此“无论如何都发送电子邮件”的尝试是行不通的。这里真正的问题是您告诉用户电子邮件已成功发送而实际上没有检查 是否已成功发送。如果对@mail() 的调用导致错误,则应告知用户出现错误。
  • 您没有检查mail() 的返回值,因此您假设电子邮件已发送。事实上,使用 @,您可以隐藏您可能收到的任何错误消息。
  • 是的,但“电子邮件字段”只是一个文本字段,就像任何其他字段一样。它与表单的发送位置无关。它只是告诉接收者发件人的电子邮件地址是什么。它可以称为“地址”或“城市”。
  • 不知何故,即使电子邮件地址无效,您也没有意识到发送电子邮件的愿望永远不会导致真正发送消息。使用“@”可以抑制错误消息。您可以用来告诉用户出现问题的消息。即使您从输入的电子邮件地址中过滤掉了空格,仍然不能保证它会产生有效/现有的电子邮件地址。
  • @user2118228 - 不是真的。一些邮件服务器会检查他们收到的电子邮件中 ​​From 标头的有效性,如果它不是有效地址,则不会发送电子邮件。

标签: php forms email


【解决方案1】:

为什么不从第 2 页上的 $_POST 变量中去掉空格?

改变这个

$email = $_POST['element_1_email'];

到这里

$email = str_replace(' ','',$_POST['element_1_email']);

----------- 更新 -----------

由于$headers 变量中的此代码,您的消息失败:

$headers = 'From: '.$email."\r\n".'Reply-To: '. $email."\r\n" .

您在此处使用的 $email 没有通过您的 clean_string 函数(您还可以通过在 space 数组中添加 space 来删除空格),所以基本上您正在尝试发送通过电子邮件发送到$_POST['element_1_email'] 中收到的任何内容,无需任何清理或电子邮件验证。

【讨论】:

  • 这正是我想要的。如果你能告诉我为什么空格会弄乱我的脚本,那就太棒了……
  • 你也可以通过在字符串上做strpos来反弹它,搜索空格,如果为真,不要提交并提示用户更正。
猜你喜欢
  • 2013-03-01
  • 1970-01-01
  • 2014-05-25
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
相关资源
最近更新 更多