У меня следующая проблема:
Я написал небольшое консольное приложение, которое отправляет электронные письма. Он ведет себя следующим образом:
- когда я запускаю это приложение в режиме отладки и пошагово перебираю код, оно отправляет электронные письма;
- когда я запускаю это приложение в режиме отладки и не выполняю пошаговый код, последнее письмо не отправляется;
- когда я создаю и перемещаю приложение на сервер и создаю для него задачу, последнее письмо не отправляется;
- при запуске приложения из проводника Windows (двойной щелчок по файлу .exe) последнее письмо не отправляется;
- когда я запускаю приложение из командной строки, оно отправляет все электронные письма;
Что интересно, когда я помещаю 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
Что здесь происходит ???