Vb.net 在.NET中调用SmtpClient.Dispose()安全吗?

Vb.net 在.NET中调用SmtpClient.Dispose()安全吗?,vb.net,email,smtp,Vb.net,Email,Smtp,我有一个场景,我需要使用循环一次性发送100封电子邮件,但我不允许每个SMTP会话发送1封电子邮件 目前,所有100封电子邮件共享相同的SMTP会话 我在想打电话给SmtpClient.Dispose会解决我需要的问题。如果我错了,请纠正我 因此,基本上有三个问题: SmtpClient.Dispose能满足我的需要吗? 如果是,在不影响服务器上其他服务的情况下处置SmtpClient是否安全 服务器 如果没有,实现我的目标的正确方法是什么 希望 示例代码: 这就是该方法的执行方式: For

我有一个场景,我需要使用循环一次性发送100封电子邮件,但我不允许每个SMTP会话发送1封电子邮件

目前,所有100封电子邮件共享相同的SMTP会话

我在想打电话给SmtpClient.Dispose会解决我需要的问题。如果我错了,请纠正我

因此,基本上有三个问题:

SmtpClient.Dispose能满足我的需要吗? 如果是,在不影响服务器上其他服务的情况下处置SmtpClient是否安全 服务器 如果没有,实现我的目标的正确方法是什么 希望 示例代码:

这就是该方法的执行方式:

 For Each Item In ItemListCollection
 m_MailServer = New SmtpClient(MailServerName)
 MailServer.Credentials = New System.Net.NetworkCredential(MailServerUserName, MailServerPassword)
 SendMail(WeeklyMailServer, msgBody, msgSubject, MsgFromEmail, "xyz@abc.com", rptAttachment)
 Next

您可以将它包装在using语句中,并确保在执行离开块时释放它。您可以使用同一个SmtpClient在循环中多次调用Send

Using client = New SmtpClient()

    For i As Integer = 0 To 99
        Dim message = New MailMessage()
        'initialization of whatever is needed
        ' message creation

        client.Send(message)

    Next
End Using

您可以将它包装在using语句中,并确保在执行离开块时释放它。您可以使用同一个SmtpClient在循环中多次调用Send

Using client = New SmtpClient()

    For i As Integer = 0 To 99
        Dim message = New MailMessage()
        'initialization of whatever is needed
        ' message creation

        client.Send(message)

    Next
End Using

在执行循环内部,您可以将代码封装在Using块中。这将为每封电子邮件使用单独的smtpclient,并将正确处理/关闭它

 For Each Item In ItemListCollection
   using m_MailServer as New SmtpClient(MailServerName)
     MailServer.Credentials = New System.Net.NetworkCredential(MailServerUserName, MailServerPassword)
     SendMail(WeeklyMailServer, msgBody, msgSubject, MsgFromEmail, "xyz@abc.com", rptAttachment)
   end using
   Next

在执行循环内部,您可以将代码封装在Using块中。这将为每封电子邮件使用单独的smtpclient,并将正确处理/关闭它

 For Each Item In ItemListCollection
   using m_MailServer as New SmtpClient(MailServerName)
     MailServer.Credentials = New System.Net.NetworkCredential(MailServerUserName, MailServerPassword)
     SendMail(WeeklyMailServer, msgBody, msgSubject, MsgFromEmail, "xyz@abc.com", rptAttachment)
   end using
   Next


你能展示你的一部分代码,包括循环吗?用示例代码更新声音告诉我你的服务提供商想阻止你滥用他的服务。不,Dispose方法不是您与服务提供商签订的合同义务的变通方法。您需要与提供商协商另一个使用协议。这是一个托管服务,我们已将会话限制设置为15。这意味着我们不希望每个smtp会话发送超过15封电子邮件。但这是最近的变化,代码也很旧。我们不想重新编写代码。如果这是一个商业产品,请研究使用SendGrid或Amazon SES,您几乎可以免费发送数千封电子邮件。您能否显示部分代码,包括循环?使用示例代码更新。您的服务提供商希望阻止您滥用其服务。不,Dispose方法不是您与服务提供商签订的合同义务的变通方法。您需要与提供商协商另一个使用协议。这是一个托管服务,我们已将会话限制设置为15。这意味着我们不希望每个smtp会话发送超过15封电子邮件。但这是最近的变化,代码也很旧。我们不想重新编写代码。如果这是一个商业产品,请研究使用SendGrid或Amazon SES,您几乎可以免费发送数千封电子邮件。这是否意味着发送的每封电子邮件都将创建自己的SMTP会话?@Mihir No!他们都会使用我们在topSo创建的同一个实例,这是我不想要的。它将发送15封电子邮件,然后抛出错误,因为我们已将限制设置为每个会话发送15封电子邮件。@Mihir您可以将该值更改为您想要的任何值。这就是我想说的。我们可以将其更改为更多,但我的网络管理员不会这样做。因此,我必须在代码级别进行更改。这是否意味着发送的每一封电子邮件(全部100封电子邮件)都将创建自己的SMTP会话?@Mihir No!他们都会使用我们在topSo创建的同一个实例,这是我不想要的。它将发送15封电子邮件,然后抛出错误,因为我们已将限制设置为每个会话发送15封电子邮件。@Mihir您可以将该值更改为您想要的任何值。这就是我想说的。我们可以将其更改为更多,但我的网络管理员不会这样做。因此,我必须在代码级别进行更改。