我编写了一些简单的代码,使用System.mail.Net命名空间发送自动生成的电子邮件。
它就像一个魅力,但有一个小问题。
邮件无法发送,直到我的整个申请被终止。
你们有没有解决这个问题的方法?
这是我使用的代码(c#):
try
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress("myEmail@mail.com");
mail.To.Add("targetEmail@mail.com");
mail.Subject = "Test test";
mail.Body = "blah blah";
mail.Attachments.Add(new Attachment("c:\\file.txt"));
SmtpClient smtp = new SmtpClient("myserver.mail.com");
smtp.Send(mail);
}
catch (SmtpFailedRecipientsException ex)
{
Console.WriteLine(ex);
}
正如我所说,一切正常,但邮件没有发送,直到我终止申请。
有没有办法强迫它现在发送邮件?
这是一个问题的原因,是我希望在没有用户需要重启应用程序的情况下立即发送邮件,还因为我想在邮件发送后以及邮件时删除附件因此,文件不会被标记为“正在使用中”,因此无法删除。
祝你好运
/ S
答案 0 :(得分:3)
我遇到了同样的问题,使用http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/6ce868ba-220f-4ff1-b755-ad9eb2e2b13d/发布的解决方法似乎有效:
对于任何有兴趣的人,我已经找到了解决方案,或者至少可以解决延迟问题。
ServicePoint成员包含一个名为MaxIdleTime的成员。将此值设置为0似乎与Timeout.Infinite具有相同的影响(我假设它也是0)。将其设置为1会导致我的电子邮件立即发送出去。
请看这个链接:
http://msdn2.microsoft.com/en-us/library/system.net.servicepoint.maxidletime.aspx
示例代码:
SmtpClient smtp = new SmtpClient();
// setup the mail message
smtp.ServicePoint.MaxIdleTime = 1;
smtp.Send(myMailMessage);
答案 1 :(得分:2)
我想知道您的应用程序是否锁定了附件,这会阻止邮件组件在您的应用程序开始关闭之前完成其工作。您能否在发送邮件之前验证是否已清除所有锁定?
您可以从仅发送电子邮件的新小应用开始。一旦它正常工作,添加硬编码附件。确认它仍然有效。如果一切顺利,请添加代码以了解如何处理附件。如果它中断,请调整您的代码。冲洗并重复。 ;)
答案 2 :(得分:1)
致电
smtp.Send(mail);
立即将电子邮件发送到您的smtp服务器。如果您没有看到该行执行后立即发送电子邮件,那么我会检查您的smtp服务器是否正常运行。
这是SmtpClient上的more information。
答案 3 :(得分:0)
我以前见过这个问题。我不得不关闭Norton Antivirus外发电子邮件扫描以立即收到电子邮件。
HTH