【问题标题】:PHP Mail Form Recipients Receiving Multiple CopiesPHP 邮件表单收件人收到多份副本
【发布时间】: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


【解决方案1】:

您是否尝试过绑定到表单的 onsubmit 事件而不是按钮?

$('yourformselector').submit(function(e) {
  e.preventDefault();
  // The rest of your validation script
});

【讨论】:

  • 嗯,这似乎破坏了脚本。不知道是什么问题,但是当我尝试这个时它不会发送。
【解决方案2】:

尽量不要将$("#contact-form").validationEngine('attach', {...});调用附加到发送按钮的点击事件中(即直接在$(document).ready(...);中调用)。

看起来对validationEngine('attach', {...}) 的调用正在将处理程序附加到表单的submit 事件,因此每次用户单击发送按钮时都会附加一次该处理程序。

【讨论】:

  • 我不完全确定如何实施您的建议。我想我只是不完全理解。你能给我一个例子,说明如何在$(document).ready(...);) 中称它为方向吗?
  • 删除这一行:$("#contact-form .send").click(function(){ 以及与之对应的倒数第二组右括号});
【解决方案3】:

尝试将您的表单处理脚本切换为这样的脚本,您的问题是每次您有 $messageToVisito 时,我认为发送一封电子邮件,因此连接您的脚本会有所帮助并使其更清晰。

$to = 'email@test.com';
$subject = 'Test';
$body = '<html><body>';
// concatenated message
'</html></body>';
$headers = '';
mail($to, $subject, $body, $headers);

【讨论】:

    猜你喜欢
    • 2011-11-15
    • 2011-03-18
    • 2017-10-29
    • 2012-09-24
    • 1970-01-01
    • 2016-02-08
    • 2015-05-18
    • 1970-01-01
    相关资源
    最近更新 更多