我为我网站的联系页面创建了以下php脚本。该脚本的问题是,当用户填写并单击提交按钮时,它会显示成功消息,但不会发送电子邮件。
有人可以检查并告诉我哪里出错了。
<?php
error_reporting(E_ALL ^ E_NOTICE); // hide all basic notices from PHP
//If the form is submitted
if(isset($_POST['submitted'])) {
// require a name from user
if(trim($_POST['contactName']) === '') {
$nameError = 'Forgot your name!';
$hasError = true;
} else {
$name = trim($_POST['contactName']);
}
// need valid email
if(trim($_POST['email']) === '') {
$emailError = 'Forgot to enter in your e-mail address.';
$hasError = true;
} else if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", trim($_POST['email']))) {
$emailError = 'You entered an invalid email address.';
$hasError = true;
} else {
$email = trim($_POST['email']);
}
// we need at least some content
if(trim($_POST['comments']) === '') {
$commentError = 'You forgot to enter a message!';
$hasError = true;
} else {
if(function_exists('stripslashes')) {
$comments = stripslashes(trim($_POST['comments']));
} else {
$comments = trim($_POST['comments']);
}
}
// upon no failure errors let's email now!
if(!isset($hasError)) {
$emailTo = 'info@example.com';
$subject = 'Submitted message from '.$name;
$sendCopy = trim($_POST['sendCopy']);
$body = "Name: $name \n\nEmail: $email \n\nComments: $comments";
$headers = 'From: ' .' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;
mail($emailTo, $subject, $body, $headers);
// set our boolean completion value to TRUE
$emailSent = true;
}
}
?>
<!-- @begin contact -->
<div id="contact" class="section">
<div class="container content">
<?php if(isset($emailSent) && $emailSent == true) { ?>
<p class="info">Your email was sent. Sir!</p>
<?php } else { ?>
<div id="contact-form">
<?php if(isset($hasError) || isset($captchaError) ) { ?>
<p class="alert">Error submitting the form</p>
<?php } ?>
<form id="contact-us" action="contacts.php" method="post">
<div class="columns two contact_label alpha">
Your Name
</div>
<div class="columns five contact_input omega">
<input type="text" name="contactName" id="contactName" value="<?php if(isset($_POST['contactName'])) echo $_POST['contactName'];?>" class="txt requiredField" placeholder="Name:" />
<?php if($nameError != '') { ?>
<br /><span class="error"><?php echo $nameError;?></span>
<?php } ?>
</div>
<div class="clear"><!-- ClearFix --></div>
<div class="columns two contact_label alpha">
E-Mail Address
</div>
<div class="columns five contact_input omega">
<input type="text" name="email" id="email" value="<?php if(isset($_POST['email'])) echo $_POST['email'];?>" class="txt requiredField email" placeholder="Email:" />
<?php if($emailError != '') { ?>
<br /><span class="error"><?php echo $emailError;?></span>
<?php } ?>
</div>
<div class="clear"><!-- ClearFix --></div>
<div class="columns two contact_label alpha">
Your Message
</div>
<div class="columns five contact_input omega">
<textarea name="comments" id="commentsText" cols="45" rows="5" class="txtarea requiredField" placeholder="Message:"><?php if(isset($_POST['comments'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['comments']); } else { echo $_POST['comments']; } } ?></textarea>
<?php if($commentError != '') { ?>
<br /><span class="error"><?php echo $commentError;?></span>
<?php } ?>
</div>
<div class="clear"><!-- ClearFix --></div>
<div class="columns five contact_button alpha omega offset-by-two">
<input type="submit" name="submitted" id="submitted" value="Send Email" />
</div>
<div class="clear"><!-- ClearFix --></div>
</form>
</div>
<?php } ?>
</div>
</div><!-- End #contact -->
答案 0 :(得分:2)
您需要删除该行:
$emailSent = true;
将邮件发送行更改为
$emailSent = mail($emailTo, $subject, $body, $headers);
如果接收电子邮件,则将$ emailSent设置为true。 PHP Mail
答案 1 :(得分:1)
而不是
mail($emailTo, $subject, $body, $headers);
// set our boolean completion value to TRUE
$emailSent = true;
DO
$emailSent = mail($emailTo, $subject, $body, $headers);
否则你会硬编码结果,为什么你会说如果你不知道电子邮件已被发送?什么是你,某种骗子?
答案 2 :(得分:0)
我想,您应该尝试更改以下内容:
if(!isset($hasError)) {
...
}
条件。你应该输入:
if(!$hasError)
{
...
}
答案 3 :(得分:0)
确保您的php邮件smtp标头已正确配置。 下面是适用于我的示例代码。复制并试一试。
如果以下代码不适合您,请尝试安装Dropifi Contact Widget (www.dropifi.com)。他们有一个非常直观的联系表格,您可以自定义以满足您的需求。
require_once("class.phpmailer.php");
require_once("class.smtp.php");
class Email extends PHPMailer
{
public function __construct(){
parent::__construct(true);
$this->IsSMTP();
$this->SMTPAuth = true;
$this->SMTPSecure = "ssl";
$this->Host = "smtp.gmail.com";
$this->Port = 465;
$this->Username = "someemail@gmail.com";
$this->Password = "your password";
$this->from = "no-reply@localhost.com";
$this->FromName = "Webmaster";
$this->WordWrap = 50;
$this->IsHTML(true);
$this->AddReplyTo("no-reply@localhost.com", "Webmaster");
$this->Mailer = "smtp";
}
public function setReceiver($to){
$this->AddAddress($to,"Administrator");
}
public function setSubject($subject){
$this->Subject = $subject;
}
public function setMessage($param){
$this->AltBody = "your alternative message";
$message = "your main message";
$this->MsgHTML($message);
}
public function sendmail(){
try{
$flag = $this->Send();
return $flag;
}catch(phpmailerException $e){
return $e->getMessage();
}
}
}