SmtpClient 发送邮件两次

3

当我使用SmtpClient发送电子邮件时,发现了一个奇怪的行为:

  1. 它需要很长时间才能被送达。
  2. 它会被送达两次。

SmtpClient client = new SmtpClient();
client.Host = "smtpout.secureserver.net";
client.Port = 80;
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential(_fromAddress, _password);
MailMessage message = new MailMessage();
message.Body = _body;
message.BodyEncoding = Encoding.UTF8;
message.IsBodyHtml = true;
message.Subject = _subject;
message.To.Add(_toAddress);
message.Bcc.Add(_bccAddress);
message.From = new MailAddress(_fromAddress);
client.Send(message);

更新1:

我确定TO和BCC是不同的,而且client.Send(message);只被调用一次。


更新2:

经过大量调试,我得到了以下结果:

  • 当我使用我的gmail作为BCC地址时,我正常收到邮件。但是当我使用我的godaddy电子邮件作为BCC地址时,我会收到两次。
  • 当我的代码在本地开发机上运行时,我可以立即收到邮件。但是当我的代码在Azure云服务上运行时,邮件需要很长时间才能被送达(从5分钟到1小时)。

更新3:

  • 当我在BCC地址中使用godaddy电子邮件时,我会收到两次邮件。

你确定在“TO”和“BBC”字段中没有使用相同的地址吗? - Kevin
设置断点,进行调试。检查您的变量。 - CodeCaster
2
也许调用代码调用了两次?我非常确定C#的SmtpClient对象本身不会表现出这种行为,否则早就有人注意到了。更有可能的是问题要么在于您使用的值(tobcc中相同的电子邮件?),要么在于消费代码(调用两次),要么在于邮件设置本身(一个地址转发到另一个地址?)。 - David
1
我曾经看到.NET框架触发方法两次。当你调试时,你有这种情况吗? - Tim
我确信TO和BCC是不同的,并且client.Send(message);只被调用一次。 - Mahmoud Samy
显示剩余2条评论
1个回答

3
最明显的答案是_toAddress和_bccAddress相同,或者你发送BCC的邮箱地址被重定向到其他地址了?
在调试器下验证您没有错误地运行代码两次,这也是可能的。
基于代码示例,它不可能发送两次电子邮件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接