<textarea> 不通过电子邮件发送

<textarea> Not sending via email

我正在尝试为客户创建一个简单的电子邮件表单,但无法让 <textarea> 作为消息发送。到目前为止,我已经尝试了所有发现的方法,但没有任何工作正常...
这是我的代码:

<h4>Email Al</h4>
<table>
<form name="contactForm" id="contact" action="send_form_email.php" method="post">
    <tr>
    <td>
    <label>Name:</label>
    <input type="text" name="name">
    </td>
    <td>
    <label>Email Address:</label>
    <input type="email" name="email">
    </td>
    </tr>
    <tr>
    <td colspan="2">
    <label>Website (if Available):</label>
    <input type="text" name="website">
    </td>
    </tr>
    <tr>
    <td colspan="2">
    <label>Your Message:</label></br>
    <textarea for="" name="information" width="100%" rows="10" form="contactForm"></textarea>
    </td>
    </tr>
    <tr>
    <td colspan="2">
    <input type="submit" value="Send Message">
    </td>
    </tr>
</form>
</table>

就是index.php文件里的表格,下面是邮件发送-email.php

<?php
  $name = $_POST['name'];
  $email = $_POST['email'];
  $website = $_POST['website'];
  $message = $_POST['information'];

    $email_from = 'myemail@gmail.com';

    $email_subject = $name . " has sent you a message!";

    $email_body = "You have received a new message from " . $name . " via your website!\n".
                            "Name:\n $name\n".
                            "Email:\n $email\n".
                            "Website:\n $website\n".
                            "Message:\n $message\n".



  $to = "clientemail@gmail.com";

  $headers = "From: $email_from \r\n";

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

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


function IsInjected($str)
{
    $injections = array('(\n+)',
           '(\r+)',
           '(\t+)',
           '(%0A+)',
           '(%0D+)',
           '(%08+)',
           '(%09+)'
           );

    $inject = join('|', $injections);
    $inject = "/$inject/i";

    if(preg_match($inject,$str))
    {
      return true;
    }
    else
    {
      return false;
    }
}

if(IsInjected($visitor_email))
{
    echo "Bad email value!";
    exit;
}
?>
<?php
header("Location: /formsubmitted.php"); /* Redirect browser */
exit();
?>

如果有人知道为什么会出现故障,我也很想知道!这是我通常为 wordpress 开发的第一个 message/email php 函数,所以我通常只为我的客户端安装一个插件。

那是因为这一行:(请参阅我的脚注)

"Message:\n $message\n".

你有一个点而不是(结束)semi-colon ;

编辑: 您需要从 <textarea> 中删除 form="contactForm"。经测试,与它一起使用时,它没有显示在邮件中。

错误报告会告诉你这件事。

存在:

Notice: Undefined index: information (line 8)

Notice: Undefined variable: visitor_email (line 26 and 55)

在两者中:

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

if(IsInjected($visitor_email))

$visitor_email 在您的代码中未定义。对于 $visitor_email.

的所有实例,您应该使用 $email

然后你有 for="" 这在你的 <textarea...

中似乎不是有效语法

那个for=""是模棱两可的。

参考:https://developer.mozilla.org/en/docs/Web/HTML/Element/textarea

您还应该使用条件 !empty().

检查空字段

脚注:

经过更深入的测试,关于我上面提到的点,我必须声明如下:

奇怪的是,PHP 认为它是有效的语法,因为这里有一个 semi-colon 并包含在末尾 $to = "clientemail@gmail.com";

这仍然是发送邮件,但是 还将其包含在电子邮件中,这显然不包含在$email_body 变量正文中。

因此,我的回答的第一部分在一定程度上是正确的,form="contactForm"是这里的罪魁祸首。

  • 您可能打算使用 ID id="contactForm" 或 class class="contactForm"。两者均可有效使用,并将包含在您的邮件中。

但是,您将无法使用 name="contactForm",因为您的 <form> 拥有该命名属性。

  • nameid 属性(本来)都是唯一的。

<textarea> 中删除 form="contactForm"。我删除了它。而且,它开始工作了。

替换

<textarea for="" name="information" width="100%" rows="10" form="contactForm"></textarea>

<textarea for="" name="information" width="100%" rows="10"></textarea>

或者,

根据 HTML5,您可以在 input 中使用 form id's。因此,代替 form="contactForm" 使用 form="contact".

改变

<textarea for="" name="information" width="100%" rows="10" form="contactForm"></textarea>

<textarea for="" name="information" width="100%" rows="10" form="contact"></textarea>

有关详细信息,请查看 textarea - attributes