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 服务器正在发送重复的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
使用c#发送电子邮件SMTP服务器需要安全连接或客户端未通过身份验证[重复]