我制作了一个表格,可以通过电子邮件将在字段中输入的信息通过电子邮件发送出去,但填写时出现错误。
无法发送邮件!请检查您的PHP邮件配置。
所有代码似乎都不错,但是我找不到错误的原因。一旦我尝试提交表单,就会显示该错误(这是一条错误消息,旨在显示在发送邮件错误中)。任何帮助都将不胜感激!
我应该提到目录中有2种形式;表格“ 1”使用JS和PHP文件的“ 1”版本,表格“ 2”使用“ 2”版本的。它们不共享JS和PHP文件。
<form id="email-form2" name="email-form2" method="POST" data-name="Insurance Form">
Enter Name
<input class="w-input text-field" id="name" type="text" placeholder="First name and last name" name="name" data-name="Name" required> Email
<input class="w-input text-field" id="email" type="email" name="email" placeholder="Enter your email address" data-name="Email" required> Date of Birth
<input class="w-input text-field" id="date" type="date" name="date" data-name="Date" required> Gender
<input class="w-input text-field" id="gender" type="text" placeholder="Male or Female" name="gender" data-name="Gender" required> Member ID
<input class="w-input text-field" id="member" type="text" placeholder="Member number" name="member" data-name="Member" required> Policy ID
<input class="w-input text-field" id="policy" type="text" placeholder="Policy number" name="policy" data-name="Policy" required>
<div class="div-spc">
<button class="w-button button no-margin" type="submit">Submit Form</button>
</div>
</form>
<?php
if($_POST)
{
$to_Email = "email@email.com"; //Replace with recipient email address
//check if its an ajax request, exit if not
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')
{
//exit script outputting json data
$output = json_encode(array(
'type'=> 'error',
'text' => 'Request must come from Ajax'
));
die($output);
}
//check $_POST vars are set, exit if any missing
if (!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userDate"]) || !isset($_POST["userGender"]) || !isset($_POST["userMember"]) || !isset($_POST["userPolicy"]))
{
$output = json_encode(array('type'=>'error', 'text' => 'Input fields are empty!'));
die($output);
}
//additional php validation
if (empty($_POST["userName"]))
{
$output = json_encode(array('type'=>'error', 'text' => 'Name is too short or empty!'));
die($output);
}
if (!filter_var($_POST["userEmail"], FILTER_VALIDATE_EMAIL))
{
$output = json_encode(array('type'=>'error', 'text' => 'Please enter a valid email!'));
die($output);
}
if (empty($_POST["userMember"]))
{
$output = json_encode(array('type'=>'error', 'text' => 'Need Member ID number!'));
die($output);
}
if (empty($_POST["userGender"]))
{
$output = json_encode(array('type'=>'error', 'text' => 'Please enter Male or Female!'));
die($output);
}
if (empty($_POST["userPolicy"]))
{
$output = json_encode(array('type'=>'error', 'text' => 'Need Policy ID number!'));
die($output);
}
if (empty($_POST["userDate"]))
{
$output = json_encode(array('type'=>'error', 'text' => 'Please fill out birth date!'));
die($output);
}
//proceed with PHP email.
$headers = 'From: '.$_POST["userEmail"].'' . "\r\n" .
'Reply-To: '.$_POST["userEmail"].'' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
// send mail
$sentMail = @mail($to_Email, $_POST["userName"], $_POST["userDate"], $_POST["userGender"], $_POST["userMember"], $_POST["userPolicy"], $headers);
if (!$sentMail)
{
$output = json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration.'));
die($output);
} else {
$output = json_encode(array('type'=>'message', 'text' => 'Hi '.$_POST["userName"] .' Thank you for your email'));
die($output);
}
}
?>
$(document).on("ready", function() {
$("#email-form2 [type='submit']").click(function(event) {
event.preventDefault();
//get input field values
var user_name = $('input[name=name]').val()
var user_email = $('input[name=email]').val()
var user_date = $('input[name=date]').val()
var user_gender = $('input[name=gender]').val()
var user_member = $('input[name=member]').val()
var user_policy = $('input[name=policy]').val()
//data to be sent to server
post_data = {
'userName': user_name,
'userEmail': user_email,
'userGender': user_gender,
'userMember': user_member,
'userPolicy': user_policy,
'userDate': user_date
}
//Ajax post data to server
$.post('contact_me2.php', post_data, function(response) {
//load json data from server and output message
if (response.type == 'error') {
output = '<div class="error-message"><p class="from">' + response.text + '</p></div>'
} else {
output = '<div class="success-message"><p class="seuccses">' + response.text + '</p></div>'
//reset values in all input fields
$('#email-form2 input').val('')
}
$("#result").hide().html(output).slideDown()
}, 'json')
});
//reset previously set border colors and hide all message on .keyup()
$("#email-form2 input").keyup(function() {
$("#result").slideUp()
})
});
答案 0 :(得分:0)
如果您查看documentation for mail(),您会看到该函数接受5个参数。
现在,您要在代码中发送多少个参数? (答案:7)。您知道这可能是个问题吗?另外,您在mail()的开头使用@,它将抑制可能导致的任何错误。
即使它没有错误,您也会在$ message参数之后为所有内容发送无意义的数据,这就是为什么它不起作用的原因。我希望您可能真的希望将所有这些各个字段(用户名,性别,日期,政策等)结合在一起,并以诸如空格和换行符之类的某种格式组合在一个字符串中,以使其形成一个连贯的消息正文-而不是只需在mail()函数中将它们全部触发,并希望将它们重新排列为可读的即可(显然,它不可能也不会)。
要开始,请尝试以下操作:
$subject = "Some subject";
$message = $_POST["userName"]." ".$_POST["userDate"]." ". $_POST["userGender"]." ".$_POST["userMember"]." ".$_POST["userPolicy"];
$sentMail = mail($to_Email, $subject, $message, $headers);
我在这里
a)将主题和消息声明为单独的变量,以提高清晰度和可读性。
b)将各种POST字段值连接到一个字符串中,并用空格分隔。在PHP中,使用.
运算符完成字符串的连接(也称为“串联”)-您只需将其放在要相互连接的两个字符串之间。
您可以自己在双引号区域内添加更多内容,然后根据自己的喜好更改主题行。