【问题标题】:<textarea> Not sending via email<textarea> 不通过电子邮件发送
【发布时间】:2016-04-22 03:31:38
【问题描述】:

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

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

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

【问题讨论】:

  • “没有任何工作正常” - 请解释什么不工作。会报错吗?
  • 没有错误。它只是不发送那个 '
  • 顺便说一句,您的 HTML 格式不正确。表格应该在表格内,而不是相反。

标签: php email textarea message


【解决方案1】:

从&lt;textarea&gt; 中删除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

【讨论】:

  • 做到了!我知道我最初尝试过这种方式,但我认为结合使用'form =“contactform”'和@Fred -ii-建议用分号替换点使它起作用!谢谢你们!
  • 没问题@AFick。 享受编码
【解决方案2】:

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

"Message:\n $message\n".

你有一个点而不是(结束)分号;

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

而且错误报告会告诉你。

存在:

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

和

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

在这两个方面:

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

和

if(IsInjected($visitor_email))

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

那么你有for="",这在你的&lt;textarea...中似乎不是有效的语法

for="" 是模棱两可的。

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

您还应该检查带有条件!empty() 的空字段。


脚注:

经过更深入的测试,关于我上面提到的那个点,我必须说明以下几点:

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

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

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

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

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

  • name 和 id 属性都是(应该是)唯一的。

【讨论】:

  • 感谢您的快速响应!我摆脱了 'for=' ,这一定是我开始添加 'form=contactform' 部分时的错误。但是,在 '"Message:\n $message\n";' 的末尾添加分号而不是点不工作。它仍然不发送'
  • @AFick 不客气。那么,一切正常吗?以及我注意到的点而不是分号。
  • 我刚刚编辑了我的最后一条评论!对不起,不,它仍然没有发送。这很奇怪!
  • @AFick 给我一分钟,我会测试你的代码,并按照说明使用结束分号。
  • @AFick 你本来可以等我的,测试和写出答案需要时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 2012-04-27
  • 2016-07-04
  • 2018-09-19
  • 2021-03-23
相关资源
最近更新 更多