2011-04-05 20 views
0

私のネットワークに大量の電子メール通知を送信していますが、使用しているSMTPに問題があります。C#を使用してSMTP経由で電子メールを送信するときの問題

...メールボックス使用できません:

問題は、私はそれが約30〜40電子メールを送信し、私は次のエラーを取得する使用するすべての電子メールアカウントのためです。サーバーの応答は次のとおりです。この電子メールは受け入れられません。電子メールホスティングプロバイダにお問い合わせください。

アイデア?

おかげ

コード - Windowsサービス:

public SMTP() 
    { 
     client = new SmtpClient(host); 

     client.UseDefaultCredentials = false; 
     client.Credentials = new NetworkCredential(_username, _password); 

    } 

    public void Send() 
    { 
     using (EmailEntities ent = new EmailEntities()) 
     { 
      var res = ent.wdj_tbl_EmailQueue.Take(50); 
      if (res != null) 
      { 
       foreach (wdj_tbl_EmailQueue r in res) 
       { 
        try 
        { 
         Int32 id = r.ID; 
         eml = new MailMessage(); 
         try 
         { 
          AddTo((r.emailTo.Replace("\n", "").Trim() ?? "")); 
          AddCc((r.emailCC.Replace("\n", "").Trim() ?? "")); 
          AddBcc((r.emailBCC.Replace("\n", "").Trim() ?? "")); 
         } 
         catch 
         { 
          ent.wdj_tbl_EmailQueue.DeleteObject(r); 
          continue; 
         } 

         eml.From = new MailAddress(r.emailFrom); 
         eml.IsBodyHtml = (r.emailIsHTML ?? true); 
         eml.Subject = r.emailSubject; 

         fixHeaders("To", eml.To); 
         fixHeaders("Cc", eml.CC); 

         if (!eml.IsBodyHtml) 
         { 
          eml.Body = (r.emailTextBody ?? ""); 
         } 
         else 
         { 
          eml.AlternateViews.Add(AlternateView.CreateAlternateViewFromString((r.emailHTMLBody ?? ""), new ContentType("text/html"))); 
          eml.Body = (r.emailTextBody ?? ""); 
          eml.IsBodyHtml = false; 
         } 
         try 
         { 
          client.Send(eml); 
         } 
         catch (Exception ex) 
         { 
          if (!EventLog.SourceExists("WadjaEmailService")) 
           EventLog.CreateEventSource("EmailService", "EmailLog"); 
          EventLog.WriteEntry("EmailService", "The email with id " + id.ToString() + " (" + eml.To + ") was not sent: " + ex.Message, EventLogEntryType.Error); 

          continue; 
         } 
        } 
        catch 
        { 
         ent.wdj_tbl_EmailQueue.DeleteObject(r); 
         continue; 
        } 
        ent.wdj_tbl_EmailQueue.DeleteObject(r); 
       } 
       ent.SaveChanges(); 
      } 
     } 
    } 

    public void AddTo(String email) 
    { 
     //network = GetNetworkName(); 
     string[] emailArray = email.Split(','); 
     if (emailArray.Length > 1) 
     { 
      for (int i = 0; i < emailArray.Length; i++) 
      { 
       eml.To.Add(new MailAddress(emailArray[i])); 
      } 
     } 
     else 
     { 
      eml.To.Add(new MailAddress(email)); 
     } 

    } 

    public void AddTo(String email, String displayName) 
    { 
     eml.To.Add(new MailAddress(email, displayName)); 
    } 

    public void AddCc(String email) 
    { 
     if (String.IsNullOrEmpty(email)) 
      return; 
     string[] emailArray = email.Split(','); 
     if (emailArray.Length > 1) 
     { 
      for (int i = 0; i < emailArray.Length; i++) 
      { 
       eml.CC.Add(new MailAddress(emailArray[i])); 
      } 
     } 
     else 
     { 
      eml.CC.Add(new MailAddress(email)); 
     } 
    } 

    public void AddCc(String email, String displayName) 
    { 
     if (String.IsNullOrEmpty(email)) 
      return; 
     eml.CC.Add(new MailAddress(email, displayName)); 
    } 

    public void AddBcc(String email) 
    { 
     if (String.IsNullOrEmpty(email)) 
      return; 
     string[] emailArray = email.Split(','); 
     if (emailArray.Length > 1) 
     { 
      for (int i = 0; i < emailArray.Length; i++) 
      { 
       eml.Bcc.Add(new MailAddress(emailArray[i])); 
      } 
     } 
     else 
     { 
      eml.Bcc.Add(new MailAddress(email)); 
     } 
    } 

    public void AddBcc(String email, String displayName) 
    { 
     if (String.IsNullOrEmpty(email)) 
      return; 
     eml.Bcc.Add(new MailAddress(email, displayName)); 
    } 

    private void fixHeaders(String hName, MailAddressCollection mac) 
    { 
     String hTmp = ""; 

     foreach (MailAddress ma in mac) 
     { 
      if (!String.IsNullOrEmpty(ma.DisplayName)) 
       hTmp += (", " + ma.DisplayName + "<" + ma.Address + ">"); 
      else 
       hTmp += (", " + ma.Address); 
     } 

     while (hTmp.StartsWith(",")) 
      hTmp = hTmp.Substring(1).Trim(); 

     if (!String.IsNullOrEmpty(hTmp)) 
     { 

      eml.Headers.Add(hName, hTmp); 

     } 
    } 
+3

System.Net.Mail.SmtpClientクラスを使用していますか?コードを送信できますか? –

+0

はい、上にコードスニペットを掲載しました。 – RRG

答えて

1

をあなたのコードは30-40電子メールを送信することができ、失敗した場合、私が最初に確認するために、アプリによって生成されたログを見てみますそれが失敗している電子メールアドレスが有効であり、アプリケーションの外部から利用可能であることを確認します。

次に、それが後のメールを拒否している理由を特定しようと試みるために、可能であればサーバーのログを調べます。

どのくらい早くこれらのメッセージを送信していますか?サーバー上で何らかのスロットルを実行している可能性はありますか?

+0

私は約5-8000の電子メールを1日送った。私はデータベースにすべての電子メールを保存し、私は行く50sのバルクを取得し、電子メールを送信するWindowsサービスがあります。私は市販のSMTPを使用していますので、ログファイルへのアクセスはありません。e.t.c上記のコードを見ることができますので私のサーバーイベントビューアを更新しています。 – RRG

+0

私はあなたが右のところで、毎分10通の電子メールを送信するように変更したと思います。 – RRG

関連する問題