Not sending via email
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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文件中的表单,下面是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!
".
"Name:
$name
".
"Email:
$email
".
"Website:
$website
".
"Message:
$message
".
$to = "clientemail@gmail.com";
$headers = "From: $email_from
";
$headers .= "Reply-To: $visitor_email
";
mail($to,$email_subject,$email_body,$headers);
function IsInjected($str)
{
$injections = array('(
+)',
'(
+)',
'( +)',
'(%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开发,所以我通常只为我的客户端安装一个插件。
这是因为这一行:(参考我的脚注)
"Message:
$message
".
你有一个点而不是(关闭)分号;
编辑:您需要从form="contactForm"
中删除<textarea>
。经过测试,它与邮件一起使用时没有显示。
和错误报告会告诉你有关它。
存在:
注意:未定义的索引:信息(第8行)
和
注意:未定义的变量:visitor_email(第26和55行)
同时:
$headers .= "Reply-To: $visitor_email
";
和
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 = "clientemail@gmail.com";
这样做仍然是发送邮件,但也包括在电子邮件中,这显然不包含在$email_body
变量体中。
因此,我的答案的第一部分在某种程度上是正确的,form="contactForm"
是这里的主要罪魁祸首。
- 您可能打算使用ID
id="contactForm"
或类class="contactForm"
。两者都有效使用,并将其包含在您的邮件中。
但是,您将无法使用name="contactForm"
,因为您的<form>
拥有该命名属性。
name
和id
属性都是(意味着)唯一的。
从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
以上是关于Not sending via email的主要内容,如果未能解决你的问题,请参考以下文章
How to configure postfix to send email via Gmail
TypeError: 'in <string> while send cmd via python telnet
Intent not found Gmail App for email... 请查看代码 - 我已经查看了其他答案... Xiaomi MI 8 API 27
kafkaWARN Attempting to send response via channel for which there is no open connection
ORA-16032 Can not Start Instance via srvctl but via sqlplus is fine [ID 1062071.1]
Not registered via @EnableConfigurationProperties or marked as Spring component