C# 处理邮件消息

C# 处理邮件消息,c#,.net,email,C#,.net,Email,我是否应该手动处理System.Net.Mail.MailMessage MailMessage实现了IDisposable,因此我认为我应该处理它,但我找不到任何有人实际处理它的例子 这样做对吗 public void Send(MailMessage message) { using(var smtpClient = new SmtpClient(_host)) { smtpClient.Send(message); message.Dispose

我是否应该手动处理
System.Net.Mail.MailMessage

MailMessage
实现了
IDisposable
,因此我认为我应该处理它,但我找不到任何有人实际处理它的例子

这样做对吗

public void Send(MailMessage message)
{
    using(var smtpClient = new SmtpClient(_host))
    {
       smtpClient.Send(message);
       message.Dispose();
    }
}

这似乎有点错误,因为我显式地使用了
message.Dispose

,仅仅因为其他人没有这样做,不处理它并不正确。由于它实现了
IDisposable
,它可能会使用非托管资源,所以在使用完后请使用它

using(var message = new MailMessage(pass arguments ...))
using(var smtpClient = new SmtpClient(_host))
{
   smtpClient.Send(message);
}
这表明确实有一些托管和非托管的东西需要处理

这似乎有点错误,因为我显式地使用
message.Dispose


是的,我同意,如果不控制实例(在不受您控制或甚至不可见的代码中创建和使用),调用
message.Dispose()
似乎是错误的。因为你有可能在以后必须使用它时处理它,这可能是一个bug。

如果你可以使用block将它的用法包装在
中,你就不需要手动处理它。@stuartd,但我正在包装
smtpClient
而不是
消息
。另外,当我查看调试器时,我可以看到在
使用
块后,
消息
未被释放(
已释放
字段设置为
false
)。@FCin ok抱歉。我误读了我应该手动处理还是应该处理..我建议
Send(…)
的调用代码使用
using(…)
。由于
Send
不拥有
message
对象。我同意,但您知道在将已创建的消息传递给方法而不是在方法内部创建消息时如何处理它吗?@FCin:那么调用方应该使用
using
-语句来处理它们,最好是使用
using
-语句。如果您无法修改该代码,则无法确保它们已被释放,并且我不会在此处调用
Dispose
,因为那些
MailMEssage
实例仍然可以在那里使用。谢谢。我同意,打电话的人应该把它处理掉。我想这确保了单一责任原则?@FCin:SRP只是意味着一个类应该只负责一件事,而不是多件事。如果
MailMessage
也负责发送邮件,那么这将违反SRP