varios por masivos mandar form enviar destinatarios credenciales correos correo con como archivo adjunto c# smtp sendmail smtpclient

masivos - ¿Por qué no puedo enviar dos correos seguidos con c#?



enviar correos masivos c# (2)

Estoy enviando correos electrónicos usando c # usando SmtpClient. Tengo que enviar aproximadamente cien correos electrónicos diferentes por día, y no puedo usar el mismo correo (agregando varios destinatarios) ya que el correo electrónico cambia según el destinatario.

No estoy usando un servidor SMTP local, y entiendo (de acuerdo con @rizzle respuesta aquí ) que debe dejarse un tiempo entre un correo y otro. Sin embargo, estoy durmiendo mi programa durante 10 segundos y aún así, es el primer correo electrónico que se envía, nunca el segundo (hasta ahora estoy probando mi sistema con dos correos electrónicos en lugar de cien). Este es mi código, ¿alguna idea?

foreach (Person p in clientList) { AlternateView plainView = AlternateView.CreateAlternateViewFromString("Texto visible para clientes que no tienen HTML", null, "text/plain"); //AlternateView htmlView = AlternateView.CreateAlternateViewFromString("Here is an embedded image.<img src=cid:companylogo>", null, "text/html"); string htmlString = "html string body of the email"; AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlString, null, "text/html"); System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(); message.AlternateViews.Add(htmlView); message.To.Add(p.email.Trim()); message.Subject = p.nombre+", email subject"; message.From = new System.Net.Mail.MailAddress(fromAddress); System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("..."); NetworkCredential myCreds = new NetworkCredential(usr, pass, ""); client.Credentials = myCreds; client.Send(message); System.Threading.Thread.Sleep(10000); }


En 3.5 prueba usando:

SmtpClient client = ... client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback); using (MailMessage message = ...) { // where userToken is a user-defined token // to be passed to the SendCompletedCallback client.SendAsync(message, userToken); } // Disposes of message

Luego, en el desencadenador SendCompletedCallback el siguiente ...

Clase SmtpClient


Haga client.Dispose() justo después de que envíe su último mensaje, si está en dotnet 4. Esto forzará las cosas SMTP de dotnet a terminar su trabajo.

Vea aquí: System.Net.Mail y MailMessage no envían mensajes inmediatamente

Si usa versiones anteriores de DotNet, intente hacer un par de cosas.

Haga message.Dispose() cuando haya terminado con la instancia del mensaje.

Defina su SmtpClient localmente (dentro de un método) y salga del método cuando termine de enviar. Es decir, no intente mantener su instancia de cliente como un campo en una de sus instancias de clase de larga duración; no va a vaciar el último mensaje que envió al servidor hasta que esté finalizado.

(Realmente arreglaron esto en dotnet 4.0)