当前位置: 代码迷 >> PHP >> phpmailer重复提交的有关问题
  详细解决方案

phpmailer重复提交的有关问题

热度:52   发布时间:2016-04-28 17:00:12.0
phpmailer重复提交的问题。
http://blog.csdn.net/daydreamingboy/article/details/6299495

我要把某个页面的表单以邮件的形式用PHPMailer发送到指定邮箱,怕有人重复提交,不知道有没有这方面的专家啊?
<?php
if (isset($_POST['submitted'])) {
require('PHPMailer/class.phpmailer.php');

$mail = new PHPMailer();
//不包含表单验证
if (!empty($_POST['contact']) && !empty($_POST['subject']) &&
 !empty($_POST['content']) && !empty($_POST['from'])) {
$address = $_POST['contact'];
$mail->Subject = $_POST['subject'];
$mail->Body = $_POST['content'];
$mail->FromName = $_POST['from'];
} else {
echo '<p><font color="red">请全部填写完整!</font></p>';
exit();
}
$mail->IsSMTP();
$mail->Host = "smtp.163.com";
$mail->SMTPAuth = true;
$mail->Username = "your_mail@163.com";
$mail->Password = "your_password";
$mail->Port = 25;
$mail->From = " your_mail@163.com";
$mail->AddAddress("$address", "my friend");

if (!$mail->Send()) {
echo "<br /><font color='red'>邮件发送失败!</font><br />";
echo "错误原因: " .$mail->ErrorInfo;
exit();
} else {
echo "<br /><font color='green'>邮件发送成功!</font><br />";
}
}
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=GBK" />
<title>使用PHPMailer发送邮件</title>
</head>
<body style="text-align: center">

<form action="mail.php" method="post">
<p>联系人Email: <input name="contact" type="text" /></p>
<p>发件人昵称: <input name="from" type="text" /></p>
<p>主题: <input name="subject" type="text" /></p>
<p>内容: <textarea name="content" rows="10" cols="25">
<p><input type="submit" value="发送" /></p>
<input name="submitted" type="hidden" value="TRUE" />
</form>

</body>
</html>

------解决思路----------------------
提交过的用数据库记录,再提交时,根据email地址判断是否重复。
------解决思路----------------------
session_start();
$key = md5(serialize($_POST));
if(empty($_SESSION['last'])) $_SESSION['last'] = $key;
else if($_SESSION['last'] == $key) die('不能重复发送');
//发送邮件

1、不能仅使 提交按钮 失效,因为用户可能需要发送多封邮件。何况普通的表单提交会产生新页,并不会被失效
2、不能仅从目标邮箱判断,向一个邮箱发送多封邮件是很常见的事情
3、只有在两次提交的内容完全相同时,才能视为重复