【发布时间】:2012-02-19 22:57:14
【问题描述】:
我有一个我设置的 PHP 邮件表单,它利用 AJAX 和 jQuery 来验证和提交表单。一切似乎都运行良好,但无论出于何种原因,我的客户(网站所有者)都会收到每封邮件发送的多个副本。每条消息的副本数量从 1 到 10 个不等,没有特定的模式。
在我完成的所有测试中,我个人仅在我的企业电子邮件地址和另一个 gmail 帐户中收到了一份邮件副本。然而,其域名注册商托管其电子邮件帐户的客户却一次收到多达 10 个副本。
我们正在托管网站,因此每次发送消息时我们的服务器都会处理表单。我检查了我们的服务器邮件日志,可以确认它只发送了一次。
这让我发疯了。我们不会花费数小时来解决这个问题,并且在这个问题上浪费每一分钟都在赔钱。
我将为您提供我的代码和实时网站。希望有人能帮帮我!
首先,您可以在该网站上查看实际的表单:http://www.energywisesolutions.ca/
您可以点击任何“预订家庭评估”链接/按钮来查看表单幻灯片打开。
这是我用于表单验证的脚本:http://www.position-relative.net/creation/formValidator/
这是我的表单验证检查,然后是表单发送脚本:
$(document).ready(function() {
/* ASSESSMENT FORM
----------------------------------------------------------------*/
// Form Validation
$("#contact-form .send").click(function(){
$("#contact-form").validationEngine('attach', {
onValidationComplete: function(form, status){
if(status==true){
$("#contact-form .send").clone().insertAfter($(this)).attr("disabled","true");
$("#contact-form .send").hide();
_gaq.push(['_trackPageview', '/online-thankyou']);
$.post('/themes/energywise/mail-form/process.php', $("#contact-form").serialize(), function(data) {
// Add Thank You Message
$('#thank-you-message').html(data);
// Create IFRAME to page with Adwords Tracking Script
function ppcconversion() {
var iframe = document.createElement('iframe');
iframe.style.width = '0px';
iframe.style.height = '0px';
document.body.appendChild(iframe);
iframe.src = 'http://www.energywisesolutions.ca/themes/energywise/mail-form/conversion-script.php';
};
ppcconversion();
});
}
}
});
});
});
这是我的表单处理脚本:
$toAdmin='info@energywisesolutions.ca';
$fromAdmin='info@energywisesolutions.ca';
$toVisitor=stripslashes($_POST['email']);
$name=stripslashes($_POST['full_name']);
$city=stripslashes($_POST['city']);
$phone=stripslashes($_POST['phone']);
$comments=stripslashes($_POST['comments']);
/* TO ADMIN */
$headersToAdmin = "From: " .$toVisitor. "\r\n";
$headersToAdmin .= "Content-type: text/html; charset=iso-8859-1\r\n";
$subjectToAdmin='Energywise Website Lead - Home Assessment Form';
$messageToAdmin = '<html><body>';
$messageToAdmin .= '<img src="http://www.energywisesolutions.ca/energy-rebates/form1.jpg" alt="Home Assessment Form" />';
$messageToAdmin .= '<p>A website visitor has filled out thea Home Assessment Form. Here is their information and the comments they provided:</p>';
$messageToAdmin .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
$messageToAdmin .= "<tr style='background: #eee;'><td><strong>Sent From:</strong> </td><td>ENERGYWISE WEBSITE</td></tr>";
$messageToAdmin .= "<tr><td><strong>Name:</strong> </td><td>" .$name. "</td></tr>";
$messageToAdmin .= "<tr><td><strong>City:</strong> </td><td>" .$city. "</td></tr>";
$messageToAdmin .= "<tr><td><strong>Email:</strong> </td><td>" .$toVisitor. "</td></tr>";
$messageToAdmin .= "<tr><td><strong>Phone:</strong> </td><td>" .$phone. "</td></tr>";
$messageToAdmin .= "<tr><td><strong>Comments:</strong> </td><td>" .$comments. "</td></tr>";
$messageToAdmin .= "</table>";
$messageToAdmin .= "</body></html>";
/* TO VISITOR */
$headersToVisitor = "From: " .$fromAdmin. "\r\n";
$headersToVisitor .= "Content-type: text/html; charset=iso-8859-1\r\n";
$subjectToVisitor='Thank you for Contacting Energywise Solutions';
$messageToVisitor = '<html><body>';
$messageToVisitor .= '<img src="http://www.energywisesolutions.ca/energy-rebates/form1.jpg" alt="Home Assessment Form" />';
$messageToVisitor .= '<p>Hello,</p>
<p>Thank you for contacting Energywise Solutions. We have received your message and will get in touch with you shortly.</p>
<p>Your information has been attached below:</p>';
$messageToVisitor .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
$messageToVisitor .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td><td>" .$name. "</td></tr>";
$messageToVisitor .= "<tr><td><strong>City:</strong> </td><td>" .$city. "</td></tr>";
$messageToVisitor .= "<tr><td><strong>Email:</strong> </td><td>" .$toVisitor. "</td></tr>";
$messageToVisitor .= "<tr><td><strong>Phone:</strong> </td><td>" .$phone. "</td></tr>";
$messageToVisitor .= "<tr><td><strong>Comments:</strong> </td><td>" .$comments. "</td></tr>";
$messageToVisitor .= "</table>";
$messageToVisitor .= "</body></html>";
mail($toAdmin, $subjectToAdmin, $messageToAdmin, $headersToAdmin);
mail($toVisitor, $subjectToVisitor, $messageToVisitor, $headersToVisitor);
print "<h3><strong>Thank you for contacting us.</strong> We will get back to you as soon as possible.</h3>
<p>We have received your message and will get in touch with you shortly. If you have any immediate questions please feel free to give us a call. You can find the appropriate contact information for your region on our <a href='/locations/'>locations</a> page.</p>";
如果您还需要帮助我解决此问题,请告诉我。这让我的客户和我自己都快疯了。
提前致谢!
【问题讨论】:
-
如果这是真的:“我已经检查了我们的服务器邮件日志,可以确认它只发送了一次。”(并且它不是针对多个人),问题不可能在你这边。因此,他们的邮件服务器正在做一些奇怪的事情。请仔细检查
$toVisitor中的内容非常,stripslashes还不够,请使用filter_var。 -
感谢 Wrikken 的建议。我已经实现了
filter_var,而不是stripslashes。我认为这对解决问题没有帮助,但我感谢您的输入。我可能需要再次检查我的邮件日志。自从将我的电子邮件地址添加为管理员后,我现在在我的收件箱中也收到了多份副本。所以也许它不是特定于他们的邮件服务器。 -
没问题,我怀疑我们可以帮助你。您的日志可能是正确的,问题出在他们这边...非常可能会从他们这边错误解释返回代码(您的邮件服务器认为它失败并自动重新排队以备后用,他们的邮件服务器认为这是成功的),因此您可能想尝试将 SMTP 直接与他们的服务器通信,作为排除这种情况的测试。
-
有趣...你能解释一下我如何测试它吗?抱歉,我对邮件处理程序比较陌生,而不是最有经验的 PHP 编码器。
-
查看您在 mta 日志中收到的确切响应代码。首先:寻找更多的交付尝试,如果它不止一个,它是可疑的。使用 telnet 或 netcat 启动 manual SMTP session,然后输入与您要发送的完全相同的邮件。询问他们是只收到一次还是几次,并比较状态码。如果这仍然没有产生任何结果,并且您 (1) 非常确定它确实只在日志中出现过一次,并且 (2) 您只处理 1 个电子邮件地址,请让接收者的系统管理员参与其中。
标签: php jquery ajax forms email