2016-12-25 1 views
0

У меня проблема с приложением, которое я сделал для отправки электронных писем в Bulk. Шаги, которые принимаются описаны ниже:SMTP-соединение требует времени для подключения после Dispose

  • Во-первых, соединение SMTP производится (анонимный доступ используется)
  • Приложение отправляет 10 писем в пакете (10 это предел SMTP, принимает для каждого соединения)
  • Когда 10 писем достигнуты, сеанс SMTP расположен и создается новый.

Проблема я столкнулся в том, что после того, как 3-й серии, я начинаю сталкиваться много проблем времени из SMTP (то есть приложение либо говорит тайм-аут или неудачное отправленного по электронной почте), и это выходит до конца и существует около 20-30 сбоев из 221 электронных писем.

Ниже приведен код, который я написал для этого:

 Try 

     'create the mail message 
     Dim mail As New MailMessage() 

     'set the addresses 

     mail.From = New MailAddress("[email protected]") 


     If (ConfigurationManager.AppSettings("Setup").Equals("Testing")) Then 
      mail.[To].Add("[email protected]") 
      'mail.[To].Add("[email protected]") 
     Else 
      mail.[To].Add(recepient) 
      mail.[Bcc].Add("[email protected]") 
     End If 

     'set the content 

     mail.Subject = subject 

     mail.Body = body 


     smtp.Port = 25 



     'send the message 


     objWriter.WriteLine("Case No: " + CaseNo + "From: " + mail.From.ToString + "   " + "To: " + mail.To.ToString + "  " + "subject: " + mail.Subject.ToString + " Email Sent") 
     Console.WriteLine("Email Sent to the address: " + recepient) 

     ' Update handback email column 
     Updatehandback(CaseNo, "Yes") 


     mailcount = mailcount + 1 

    Catch ex As Exception 
     ex.StackTrace.ToString() 
     'objWriter.WriteLine(ex.Message.ToString + " " + ex.InnerException.ToString) 
     objWriter.WriteLine(ex.Message.ToString) 
     objWriter.WriteLine("Case No: " + CaseNo + " Email Not Sents") 
     ' Update handback email column 
     Updatehandback(CaseNo, "No") 
    End Try 



    ' Check to see if mail count has reached 9 
    If (mailcount = 9) Then 
     Console.WriteLine("***************MailCount Exhausted, Re-creating SMTP link******************") 
     smtp.Dispose() 
     mailcount = 0 
     Threading.Thread.Sleep(18000) 
     smtp = New SmtpClient("87.101.183.161") 
    End If 

челобитных, любая помощь по этому вопросу будет высоко оценена, как я застряли в этом в течение недели, я уже связался с провайдером SMTP и они скажем, что все было правильно настроено в конце, и у них нет проблем с другими клиентами, которые используют один и тот же SMTP-сервер для электронных писем.

Кроме того, объект SMTP является статическим объектом перед началом кода и повторно используется.

Спасибо.

+0

Обновление: Я также получаю несколько пропущенных писем (т.е. я отправил 220 писем, из которых 20 были неудачами), поэтому технически у меня должно быть 200 в моем тестовом почтовом ящике, но у меня только 192, сервер SMTP занимает время, чтобы отправить все электронные письма и, возможно, из-за того, что электронные письма пропущены, и я столкнулся с таймаутами. Есть ли способ отслеживать, занят ли SMTP или нет? –

ответ

0

Ну, я решил проблему, купив API. Если кто-то хочет знать, то он из послелогического письма называется Mailbee, и это обычно решает проблему.

Смежные вопросы