2011-03-12 129 views
2

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

[编辑]:有没有更快的替代方案,也许免费或开源代码

' 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 
+0

电子邮件不一定发送即时。通过互联网发送和接收数据需要时间。为什么你认为花1分钟发送意味着它不能正常工作? – 2011-03-12 18:35:33

+2

有多少个收件人?你是否以附件的形式发送文件?你的代码似乎没问题,也许邮件服务器有问题。 – 2011-03-12 18:35:47

+0

@Jorge Villuendas我正在循环收件人列表,但为了测试,我只使用两个收件人。在测试中没有任何提示,但我也希望对此进行测试。我正在使用谷歌smtp服务器进行测试 – Smith 2011-03-12 18:42:19

回答

4

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

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

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

+0

他呼吁mail.To.Clear()在循环的末尾 – 2011-03-12 19:55:45

+0

所有这一切都是摆脱电子邮件被发送到的人汉斯方法,使用密件抄送,做同样的事情。 – msarchet 2011-03-12 20:08:07

+0

的确,哇,为了可读性的缘故,在添加调用之前确实应该移动它。调用答案#2。 – 2011-03-12 20:08:09

1

您可能要切换到“拍摄模式”,其中的邮件客户端在本地丢弃该消息(S)改为使用IIS SMTP调度位置。这样你就异步发送邮件(sorta),尽管你必须使用install and configure这个SMTP组件。

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