我有以下问题:
我写过很少发送电子邮件的控制台应用程序。它的行为方式如下:
有趣的是,当我把thread.sleep(200)发送给所有电子邮件时!请注意,我在ASP应用程序中使用此代码,并始终发送所有邮件。如果邮件有附件,它总是被发送,即使它是队列中的最后一个(但这是另一个正常工作的应用程序)。
我使用的代码(邮件类):
Public Class Mailer
' Methods
Public Sub SendMail()
Dim mail As New MailMessage(Me.Sender, Me.To, Me.Subject, Me.Body)
mail.IsBodyHtml = True
If Not Me.CC.Trim.Equals("") Then
mail.CC.Add(Me.CC)
End If
If Not Me.BCC.Trim.Equals("") Then
mail.Bcc.Add(Me.BCC)
End If
Dim client As New SmtpClient(Me.MailServer)
client.Credentials = New NetworkCredential(Me.Username, Me.Password)
client.Send(mail)
mail.Dispose()
End Sub
' Properties
Public Property Attachments As String
Get
Return Me._attachments
End Get
Set(ByVal value As String)
Me._attachments = value
End Set
End Property
Public Property BCC As String
Get
Return Me._BCC
End Get
Set(ByVal value As String)
Me._BCC = value
End Set
End Property
Public Property Body As String
Get
Return Me._body
End Get
Set(ByVal value As String)
Me._body = value
End Set
End Property
Public Property CC As String
Get
Return Me._CC
End Get
Set(ByVal value As String)
Me._CC = value
End Set
End Property
Public ReadOnly Property MailSent As Boolean
Get
Return Me._mailSent
End Get
End Property
Public Property MailServer As String
Get
Return Me._mailServer
End Get
Set(ByVal value As String)
Me._mailServer = value
End Set
End Property
Public Property Password As String
Get
Return Me._password
End Get
Set(ByVal value As String)
Me._password = value
End Set
End Property
Public Property Sender As String
Get
Return Me._sender
End Get
Set(ByVal value As String)
Me._sender = value
End Set
End Property
Public Property Subject As String
Get
Return Me._subject
End Get
Set(ByVal value As String)
Me._subject = value
End Set
End Property
Public Property [To] As String
Get
Return Me._recepients
End Get
Set(ByVal value As String)
Me._recepients = value
End Set
End Property
Public Property Username As String
Get
Return Me._username
End Get
Set(ByVal value As String)
Me._username = value
End Set
End Property
' Fields
Private _attachments As String
Private _BCC As String
Private _body As String
Private _CC As String
Private _mailSent As Boolean
Private _mailServer As String
Private _password As String
Private _recepients As String
Private _sender As String
Private _subject As String
Private _username As String
End Class
发送电子邮件的代码:
Do While rd.Read
Dim m As New LinksMailer.Mailer
m.MailServer = ConfigurationSettings.AppSettings.Item("mailServer")
m.Username = ConfigurationSettings.AppSettings.Item("mailUsername")
m.Password = ConfigurationSettings.AppSettings.Item("mailPassword")
m.Sender = ConfigurationSettings.AppSettings.Item("sender")
m.To = Conversions.ToString(rd.Item("Email"))
m.CC = ConfigurationSettings.AppSettings.Item("Cc")
m.BCC = ConfigurationSettings.AppSettings.Item("Bcc")
m.Subject = "Some subject...."
m.Body = "Some HTML body..."
m.SendMail()
' when I add this line everything works!!!
' Threading.Thread.Sleep(200)
Loop
这里发生了什么???
答案 0 :(得分:2)
我与之合作的开发人员负责每月向大型(100k +)用户群发送简报,并在每封邮件之间建立400毫秒的延迟。他这样做是为了防止邮件服务器自动将他列为垃圾邮件发送者。您可能遇到SendMail安全问题。你一次发送多少封电子邮件?他从试错中到达了400毫秒的数字。
答案 1 :(得分:2)
即使这是迟到的回复,我希望它可以帮助下一位读者
Dim inte As Integer
Dim ji As Integer
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
If Grid.Rows.Count > 0 Then
Dim inte As Integer = Grid.Rows.Count
inte = inte - 1
For ji = 0 To inte
Dim email As String = Grid.Rows(ji).Cells(4).Text
sendmail(email)
Next ji
End If
End Sub
此代码将能够将电子邮件发送到网格的最后一行 希望如果不做道歉将会奏效
答案 2 :(得分:0)
实际上,我不发送大量邮件(最多20个),而且大多数只发送一个。但我注意到,当应用程序需要发送一封邮件时,它不会被发送,如果需要发送3封邮件,只发送前两封等等。我不认为这是一个问题。