邮件无法发送,直到我终止我的应用程序 - System.Mail.Net

时间:2009-11-16 15:52:16

标签: c# .net email

我编写了一些简单的代码,使用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

4 个答案:

答案 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