私は以下の問題があります:郵送用コンソールアプリケーションが最後のメールを送信しない
私は電子メールを送信する小さなコンソールアプリケーションを書いています。
- このアプリケーションをデバッグモードで実行し、コードをステップバイステップで電子メールを送信すると、次のように動作します。
- このアプリケーションをデバッグモードで実行し、コードを段階的に実行しないと、最後の電子メールは送信されません。
- アプリケーションを構築してサーバーに移動してタスクを作成すると、最後の電子メールは送信されません。
- 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
ここで何が起こっています?