Not sending via email

问题描述 投票:3回答:2

我正在尝试为客户端创建一个简单的电子邮件表单,并且无法将<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文件中的表单,下面是send-email.php电子邮件

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

    $email_from = '[email protected]';

    $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 = "[email protected]";

  $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();
?>

如果有人有任何线索,为什么这是故障,我也很想知道!这是我自己创建的第一个消息/电子邮件php函数之一,因为我通常为wordpress开发,所以我通常只为我的客户端安装一个插件。

php email textarea message
2个回答
4
投票

这是因为这一行:(参考我的脚注)

"Message:\n $message\n".

你有一个点而不是(关闭)分号;

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

和错误报告会告诉你有关它。

存在:

注意:未定义的索引:信息(第8行)

注意:未定义的变量:visitor_email(第26和55行)

同时:

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

if(IsInjected($visitor_email))

$visitor_email在您的代码中未定义。您应该使用$email代替所有$visitor_email实例。

然后你有for="",它在你的<textarea...中似乎不是有效的语法

for=""是模棱两可的。

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

您还应该使用条件!empty()检查空字段。


脚注:

经过更密集的测试,关于我上面提到的点,我必须说明以下内容:

奇怪的是,PHP认为它是有效的语法,因为在这里有一个分号并包含在这里$to = "[email protected]";

这样做仍然是发送邮件,但也包括在电子邮件中,这显然不包含在$email_body变量体中。

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

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

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

  • nameid属性都是(意味着)唯一的。

3
投票

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

更换

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

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

要么,

根据HTML5,您可以在form中使用id's input。所以,取代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

© www.soinside.com 2019 - 2024. All rights reserved.