我只是尝试使用html表单和php发送电子邮件,但无法将电子邮件发送到文本框中提供的相应邮件ID作为输入。
我搜索并获得了这个示例代码,任何人都可以建议我在哪里犯了错误。
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Contact Form</title>
<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<link rel="stylesheet" type="text/css" href="./styles.css" />
<script type="text/javascript">
/* <![CDATA[ */
$(document).ready(function(){ // sends the data filled in the contact form to the php file and shows a message
$("#contact-form").submit(function(){
var str = $(this).serialize();
$.ajax({
type: "POST",
url: "send.php",
data: str,
success: function(msg)
{
$("#formstatus").ajaxComplete(function(event, request, settings){
if(msg == 'OK'){ // Message Sent? Show the 'Thank You' message and hide the form
result = '<div class="formstatusok">Your message has been sent. Thank you!</div>';
$("#fields").hide();
}
else{
result = msg;
}
$(this).html(result);
});
}
});
return false;
});
});
/* ]]> */
</script>
</head>
<body>
<div id="wrap">
<h1>Drop me a Message!</h1>
<div id='form_wrap'>
<form id="contact-form" action="javascript:alert('success!');">
<p id="formstatus"></p>
<p>Hello Joe,</p>
<label for="email">Your Message : </label>
<textarea name="message" value="Your Message" id="message" ></textarea>
<p>Best,</p>
<label for="name">Name: </label>
<input type="text" name="name" value="" id="name" />
<label for="email">Email: </label>
<input type="text" name="email" value="" id="email" />
<input type="submit" name ="submit" value="OK I want to send it now, thanks!" />
</form>
</div>
</div>
</body>
</html>
send.php
<?php
define("WEBMASTER_EMAIL", 'myid@company.com');
error_reporting (E_ALL ^ E_NOTICE);
function ValidateEmail($email)
{
$regex = '/([a-z0-9_.-]+)'. # name
'@'. # at
'([a-z0-9.-]+){2,255}'. # domain & possibly subdomains
'.'. # period
'([a-z]+){2,10}/i'; # domain extension
if($email == '')
return false;
else
$eregi = preg_replace($regex, '', $email);
return empty($eregi) ? true : false;
}
//////////////////////////////////////////////////////
$post = (!empty($_POST)) ? true : false;
if($post)
{
$name = stripslashes($_POST['name']);
$email = trim($_POST['email']);
$subject = stripslashes($_POST['subject']);
$message = stripslashes($_POST['message']);
$error = '';
// Check name
if(!$name || $name == "Name*")
$error .= 'Please enter your name.<br />';
// Check email
if(!$email || $email == "Email*")
$error .= 'Please enter an e-mail address.<br />';
if($email && !ValidateEmail($email))
$error .= 'Please enter a valid e-mail address.<br />';
// Check message
if(!$message)
$error .= "Please enter your message. <br />";
if(!$error)
{
$mail = mail(WEBMASTER_EMAIL, $subject, $message,
"From: ".$name." <".$email.">\r\n"
."Reply-To: ".$email."\r\n"
."X-Mailer: PHP/" . phpversion());
if($mail)
echo 'OK';
}
else
echo '<div class="formstatuserror">'.$error.'</div>';
}
?>
有什么想法吗?
答案 0 :(得分:0)
尝试在php.ini中配置它
SMTP = smtp.exmaple.com -> smtp host
smtp_port = 25 -> port usually 25
username = usename@user.com
password = password
sendmail_from = sourceofmail@example.com
答案 1 :(得分:0)
首先,由于垃圾邮件引起的问题,许多服务器限制邮件传出,除非它由Gmail,雅虎等权威机构进行身份验证。
其次,您应该查看您的php版本,看看您是否使用了正确的格式,而不是复制粘贴示例代码。
最后,如果您是从本地计算机执行此操作,则您的ISP可能已实施了一些发送电子邮件的规定。
答案 2 :(得分:0)
如果你得到&#34;好的&#34;显示来自ajax和邮件发送消息的消息,但仍然没有收到电子邮件,那么你需要检查你的php.ini的smtp服务器设置。
打开php.ini文件并查找以下设置:
SMTP = smtp.gmail.com
smtp_port = 25
username = youremail@gmail.com
password = PASSWORD
sendmail_from = webmaster@yourdomain.com
如果您不确定从哪里获取,请使用gmail的smtp服务器设置发送电子邮件进行测试。
看看这个:https://www.digitalocean.com/community/tutorials/how-to-use-google-s-smtp-server
答案 3 :(得分:0)
我在我的服务器上尝试了你的代码,我注意到的第一件事:“ReferenceError:$未定义”
因此链接的jquery不起作用,不会执行ajax请求。
将其更改为googleapis上的更新版本(googlecode将于2016年1月25日关闭)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
(假设您的php.ini配置为发送邮件:请参阅其他答案)