繁体   English   中英

PHP邮件表单不会在电子邮件字段中发送空格

[英]PHP mail form won't send with spaces in email field

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

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

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

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

附加信息

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

另外:$ var_email是从<? include?> <? include?>位于页面顶部。 其中包含一些$_SESSION信息,还有MYSQLI调用,该调用MYSQLI数据库中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);
 //
 ?>

为什么不只从第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函数(您也可以通过在$bad数组中添加space来删除空格),因此本质上您是在尝试将电子邮件发送至$_POST['element_1_email']而无需进行任何清理或电子邮件验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM