Web 服务器正在发送重复的电子邮件

Posted

技术标签:

【中文标题】Web 服务器正在发送重复的电子邮件【英文标题】:Web Server is Sending Duplicate E-Mails 【发布时间】:2013-10-11 12:59:37 【问题描述】:

对于我的网站发送的每封电子邮件,我都会让它给自己发送一封电子邮件。我注意到大约 5% 的电子邮件(每天数千封)被发送了两次。然而,发送副本之间的时间完全不一致……可能是一周、一个月或一分钟。完全不一致......我试图调试这个问题,但我永远无法复制这个问题。始终只发送一封电子邮件并正常工作。我没有想法,所以决定尝试从社区中获得一些意见。任何见解将不胜感激...

public static void SendEmail(string subject, string body, string toAddress, string fromAddress)
    
        MailMessage msg = new MailMessage();

        msg.From = new MailAddress(fromAddress);
        msg.To.Add(new MailAddress(toAddress));
        msg.Subject = subject;
        msg.Body = body;
        msg.IsBodyhtml = false;

        using (SmtpClient cli = new SmtpClient())
        
            cli.Send(msg);
            cli.Dispose();
        
    

Dispose() 只是我最近未能解决问题的尝试之一......

以及调用该函数的 ascx 页面(请注意,如果电子邮件地址不为空,则第一次将其发送给 myslef,第二次将其发送给客户。我在测试期间这样做并决定把它放在那里:

Txp.SendEmail(strOrderConfirmationHeader, strOrderConfirmationText, TxpConst.ORDERNOTIFYADDR, TxpConst.RETURNADDR);

if (!String.IsNullOrWhiteSpace(custemail))

    Txp.SendEmail(strOrderConfirmationHeader, strOrderConfirmationText, custemail, TxpConst.RETURNADDR);

它如此不一致的事实告诉我,它可能不是代码,也不是电子邮件服务器,因为邮件日志每次都显示一个已完成的事务,并且每次都会得到一个不同的消息 id...我都是没有想法!

【问题讨论】:

如果要发送给两个人,而不是调用两次,只需将两个人添加到物理MailMessage 上的To 集合即可。这是 SendMail 方法的唯一入口点吗? 如果您不希望原始收件人看到备用电子邮件地址,也可以密件抄送他们。 您的发送电子邮件代码只会发送一封电子邮件。要调试此类事情,您需要添加某种日志记录,以便追溯这些电子邮件的来源。 不,它也用于其他地方,但主题不同......它可能是一周,一个月或几个小时的事实告诉我这不是电子邮件代码,也许是会话...... .?我不确定...我看到一年后发送了一封重复的电子邮件... 例如,我的收件箱中有同一封电子邮件的三份副本,一份来自周三 6:21、周一 3:26、周日 7:24... 【参考方案1】:

好的,我确定您已经考虑过这一点,但您确定您的访问者没有点击两次“提交”吗?

这种情况我已经见过很多次了,尤其是在电子邮件服务器运行缓慢的情况下。用户认为该站点没有做任何事情,因此再次单击提交。 (或者他们只是双击按钮 - 也看到了!)

您可能只需要在您的应用中添加一些代码来防止多次提交。这是一个相当普遍的问题。

希望对你有所帮助。

【讨论】:

尽管更彻底地阅读了您的 cmets,但这并不能解释周/月延迟,只有几秒钟。 是的,仍然没有运气...这种行为似乎没有合乎逻辑的原因... 检查电子邮件的标题。通常,您会在其中看到一个唯一的 ID。示例:Message-ID: <1A2BEF3B84C62F44A4304674913B166A3A58E6E1@EXCH001.xxxxx.local> 重复项的 ID 是相同的还是不同的 ID?如果相同,则听起来像是传输层或电子邮件服务器本身中的某些内容。如果它不同,那么它会建议它是客户端上的东西。至少这会帮助你分而治之。

以上是关于Web 服务器正在发送重复的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

检查某些条件后使用python发送电子邮件[重复]

使用c#发送电子邮件SMTP服务器需要安全连接或客户端未通过身份验证[重复]

无法在实时服务器中从Laravel发送邮件[重复]

在 web api 与 asmx 服务中使用 SMTP 发送电子邮件

电子邮件未发送。 ajax发送的值[重复]

从 C# 发送 html 电子邮件