我已将一个电子邮件表单添加到引导程序站点,并且正在发送和接收电子邮件,但内容已被删除。电子邮件到达时没有消息,姓名,电子邮件地址等。我是一个绝对的新手,所以我假设脚本有问题。请你们好好看看这个剧本并告诉我我错过了什么?感谢。
<?php
header('Content-type: application/json');
$status = array(
'type'=>'success',
'message'=>'Email sent!'
);
$name = @trim(stripslashes($_POST['name']));
$email = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
$email_from = $email;
$email_to = 'david@myemail.com';
$body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;
$success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');
echo json_encode($status);
die;
Here's the HTML
<div class="col-sm-8">
<h4>Contact Form</h4><br><br>
<div class="status alert alert-success" style="display: none"></div>
<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php" role="form">
<div class="row">
<div class="col-sm-5">
<div class="form-group">
<input type="text" class="form-control" required placeholder="First Name">
</div>
<div class="form-group">
<input type="text" class="form-control" required placeholder="Last Name">
</div>
<div class="form-group">
<input type="text" class="form-control" required placeholder="Email address">
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-lg">Send Message</button>
</div>
</div>
<div class="col-sm-7">
<textarea name="message" id="message" required class="form-control" rows="8" placeholder="Message"></textarea>
</div>
</div>
</form>
</div><!--/.col-sm-8-->
答案 0 :(得分:1)
首先,你需要在die语句之后转义你的php标签,否则什么都不会,因为php认为你有疯狂的语法错误(html),因为你从未关闭php。
无论如何,我小心地用你在另一个网站上的表格替换你的php,它似乎发送电子邮件就好了。这让我相信问题主要在于你的标记。
仔细查看您的标记,我发现只有您的表单和textarea元素具有name属性。 @Sean是正确的,因为每个输入都需要设置name属性,否则你将无法使用PHP访问它。
当您编写语句$name = $_POST['name'];
时,您说&#34;从名称属性等于&#39; name&#39;的输入元素中获取值。并将其值存储在php变量$name
&#34;中。您的电子邮件功能正常工作但未传递表单数据的原因是您的输入缺少必需的名称属性。如果你做了
var_dump $name; die;
你会看到$ name里面没有值。因此,mail()函数也无法正常工作。
所以比较
<input type="text" class="form-control" required placeholder="First Name">
<input type="text" class="form-control" required placeholder="Last Name">
<input type="text" class="form-control" required placeholder="Email address">
与
<input name="first_name" type="text" class="form-control" required placeholder="First Name">
<input name="last_name" type="text" class="form-control" required placeholder="Last Name">
<input name="email_address" type="text" class="form-control" required placeholder="Email address">
现在我们已经给出了输入名称属性,并且php有一种引用它们的方法,我们可以说:
$name = @trim(stripslashes($_POST['first_name']));
$email = @trim(stripslashes($_POST['last_name']));
$subject = @trim(stripslashes($_POST['email_address']));
请花一点时间确保每个$ _POST调用都有其相应的输入的name属性。只要它们匹配,你的名字并不重要。
一旦你这样做,你应该看到电子邮件中传递的正确值。其他一些小小的内容是在@Raptor提到的功能之前删除@符号。这些不会破坏您的脚本,但如果出现错误,它们会让您失明。 @符号表示&#34;禁止错误消息&#34;,所以没有它们的情况基本相同:
$name = trim(stripslashes($_POST['first_name']));
$email = trim(stripslashes($_POST['last_name']));
$subject = trim(stripslashes($_POST['email_address']));
更好的是小心处理错误,比如
try {
$success = mail($to, $company_name, $body, 'From: <'.$email.'>');
} catch (Exception $e) {
echo 'Exception: ' . $e->getMessage();
}
但这是另一个主题。
同样正如@Raptor所暗示的那样,你并没有从你的$ status数组中获得任何好处,因为你没有更新它以反映电子邮件是否被发送的结果。由于没有必要让这个脚本工作,我现在说暂时离开那部分。
还可以考虑使用php的heredoc功能来创建电子邮件的正文内容。它增加了源代码和生成的电子邮件消息的可读性。现在您可以看到使用php mail函数实际上有多简单。这是你的PHP正在做的精简版,所以你可以看到主要的句柄。
<?php
// handle form submission
$emailSubject = 'Entry from your contact form';
$to = 'david@myemail.com';
$name = $_POST['full_name'];
$phone = $_POST['phone_number'];
$email = $_POST['email'];
$comments = $_POST['comments'];
$body = <<<EOD
<br><hr><br>
Full Name: $name <br>
Phone: $phone <br>
Email: $email <br>
Message from user: $comments <br>
EOD;
$headers = "From: $email\r\n";
$headers .= "Content-type: text/html\r\n";
$success = mail($to, $emailSubject, $body, $headers);
?>
希望这可以帮助您解决问题,如果我错过任何内容,请告诉我。祝你好运!