<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>
拥有该命名属性。
name
和 id
属性(本来)都是唯一的。
从 <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
我正在尝试为客户创建一个简单的电子邮件表单,但无法让 <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"
或 classclass="contactForm"
。两者均可有效使用,并将包含在您的邮件中。
但是,您将无法使用 name="contactForm"
,因为您的 <form>
拥有该命名属性。
name
和id
属性(本来)都是唯一的。
从 <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