2

我正在使用 system.net.mail 发送电子邮件,如下所示,但它太慢了。发送大约需要一分钟,我的代码有什么问题。我在 backgroundworker_dowork 中调用下面的代码。

[编辑]:是否有更快的替代方案,可能是免费或开源代码

' send the email '
Dim smtp As SmtpClient = New SmtpClient()
Dim mail As New MailMessage()
Dim i As Long = 0

' SMTP settings  '
With smtp
    .Host = Trim$(sSMTP)
    .Port = Trim$(iPort)
    .UseDefaultCredentials = False
    .Credentials = New System.Net.NetworkCredential(sUserID, sPword)
    .EnableSsl = bSSL
End With

' create the mail '
With mail
    If sAttachment <> vbNullString Then
        .Attachments.Add(New Net.Mail.Attachment(sAttachment))
    End If
    .From = New MailAddress(sFromEmail, sFromName)
    .ReplyTo = New MailAddress(sReplyTo)
    .Subject = sSubject
    .IsBodyHtml = True
    .Body = sMessage
End With

For i = 0 To lstRecipients.Count - 1
    mail.To.Add(lstRecipients(i))
    Debug.Print(lstRecipients(i))
    Try
        smtp.Send(mail)
        lSent += 1
        bwrkMain.ReportProgress(CInt(100 * (i + 1) / iTotalRecipients))
        SetStatus("Sent:" & lstRecipients(i))
    Catch ex As Exception
        bwrkMain.ReportProgress(CInt(100 * (i + 1) / iTotalRecipients))
        SetStatus("Not Sent:" & lstRecipients(i))
    End Try
    mail.To.Clear()
Next
4

2 回答 2

4

留给 SMTP 服务器将电子邮件分发给收件人。

For i = 0 To lstRecipients.Count - 1
    mail.To.Add(lstRecipients(i))
Next
smtp.Send(mail)

如果您不希望收件人看到其他姓名,请使用 Bcc 属性。

于 2011-03-12T19:45:26.187 回答
1

您可能希望切换到“拾取模式”,在该模式下,邮件客户端将邮件丢弃在本地 IIS SMTP 分派位置。这样您就可以异步发送邮件(排序),尽管您必须安装和配置SMTP 组件。

您的代码对我来说似乎很好,滞后必须在您使用的中继服务器中。

于 2011-03-12T18:54:06.427 回答