0

我正在尝试使用 CDO 对象发送带有附件的消息。当 SMTP 服务器可用并且所有信息都正确时,将正确发送带有附件的邮件。

但是,如果 SMTP 服务器不正确,则消息不会发送(如预期的那样),但它似乎“卡在”某处。我在用:

Fields["http://schemas.microsoft.com/cdo/configuration/sendusing"] = 2

我在 Internet 上进行了搜索,发现此选项会产生 60 秒的超时。但是我附加在邮件中的文件永远不可用。

我所做的测试是发送带有附件的消息并使用无效的 SMTP 服务器。然后,我等待几分钟并尝试删除我附加的文件。但是,当我尝试这样做时,我遇到了权限问题。当我终止发送电子邮件程序时,我可以删除该文件。

我想知道如何配置超时以确保它放弃发送消息,在未发送消息时如何“分离”文件以及如何让程序等待消息发送(我想发送消息,然后从计算机中删除附件。所以我需要知道消息何时真正发送或何时超时)。

4

1 回答 1

1

CDO 已经过时了,你真的需要考虑切换到 System.Net.Mail。具体问题听起来像是文件锁定问题。嘎嘎声就像 CDO 中的错误,它会打开附件来撰写电子邮件,但在 SMTP 服务器停止时忘记关闭文件。

.NET 处理 COM 服务器(如 CDO)的方式可能会加剧此错误。在垃圾收集器运行之前,COM 对象不会被释放。这可能需要一段时间,尤其是当您的程序在尝试发送电子邮件后没有做任何重要的事情时。一种解决方法是在 CDO 对象上调用 Marshal.ReleaseComObject()。当您的程序中有其他 CDO 接口引用时往往不起作用,这些引用往往被隐藏。GC.Collect() + GC.WaitForPendingFinalizers() 是大锤,在您将任何对象引用归零之后。

但是,真的,使用 System.Net.Mail。

于 2010-08-18T15:08:04.370 回答