2011-08-09 10 views
1

私は以下の問題があります:郵送用コンソールアプリケーションが最後のメールを送信しない

私は電子メールを送信する小さなコンソールアプリケーションを書いています。

  • このアプリケーションをデバッグモードで実行し、コードをステップバイステップで電子メールを送信すると、次のように動作します。
  • このアプリケーションをデバッグモードで実行し、コードを段階的に実行しないと、最後の電子メールは送信されません。
  • アプリケーションを構築してサーバーに移動してタスクを作成すると、最後の電子メールは送信されません。
  • 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 

ここで何が起こっています?

答えて

2

私が担当している開発者は、毎月の大きな(100k +)グループのユーザーにニュースレターを電子メールで送信し、送信された各メールの間に400ms遅れて作成されます。彼は、メールサーバーが自動的に彼をスパマーとしてリストするのを防ぐためにこれを行います。 SendMailのセキュリティ問題にぶつかっている可能性があります。あなたは一度にいくつのメールを送りますか?彼は試行錯誤から400msの数字に着いた。

0

実際には、私は大量のメールを送信しません(最大20件)。しかし、アプリケーションが1つのメールを送信する必要がある場合、3つのメールを送信する必要がある場合、最初の2つだけが送信されるなど、送信されないことに気付きました。これは問題ではないと私は考えています。

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 

は、このコードは、グリッドの最後の行に電子メールを送信することができるようになります役立つことを願ってすることは謝罪しない場合、それは動作しますホープ

関連する問題