【发布时间】:2010-11-10 19:59:57
【问题描述】:
我有一个 C# 服务,它使用用户凭据连续运行(即不是本地系统 - 虽然我想更改但无法更改)。在大多数情况下,该服务似乎运行良好,但它经常出现故障并无缘无故地重新启动(服务管理器设置为在崩溃时重新启动服务)。
我正在做大量的事件记录,并且我有一个分层方法来异常处理,我认为这至少在某种意义上是有意义的:
- 基本上我得到了顶级通用异常、空异常和启动异常处理程序。
- 然后我在“命令级别”(即服务运行的特定操作)获得了各种处理程序
- 最后我处理了一些在类级别处理的异常
我一直在查看是否有任何资源没有正确释放,并且我开始怀疑我的邮件代码(发送电子邮件)。我注意到我没有为 MailMessage 对象 调用 Dispose,我现在重写了 SendMail 代码,如下所示。
基本问题是:
- 此代码是否会正确释放用于发送邮件的所有资源?
- 我没有看到处置 SmtpClient 对象的方法?
- (记录:我没有使用对象初始化器来使示例更易于阅读)
private static void SendMail(string subject, string html)
{
try
{
using ( var m = new MailMessage() )
{
m.From = new MailAddress("service@company.com");
m.To.Add("user@company.com");
m.Priority = MailPriority.Normal;
m.IsBodyHtml = true;
m.Subject = subject;
m.Body = html;
var smtp = new SmtpClient("mailhost");
smtp.Send(m);
}
}
catch (Exception ex)
{
throw new MyMailException("Mail error.", ex);
}
}
【问题讨论】:
标签: email send smtpclient mailmessage