Qual é a melhor maneira de enviar grandes lotes de emails no ASP.NET?
-
09-06-2019 - |
Pergunta
Atualmente estou percorrendo um leitor de dados e chamando o método Send() do System.Net.Mail.SmtpClient.O problema com isso é que é lento.Cada e-mail leva cerca de 5 a 10 segundos para ser enviado (é possível que seja apenas um problema com meu host).Tive que substituir o padrão de execuçãoTimeout em meu arquivo web.config (o padrão é 90 segundos) assim:
<httpRuntime executionTimeout="3000" />
Uma advertência:Estou em um host compartilhado, então não acho que seja possível enviar usando a opção PickupDirectoryFromIis (pelo menos, ocorreu erros quando a liguei).
Solução
Você pode enviar o email assíncrono.Dessa forma, o tempo limite não deve interromper o seu envio.
Este artigo deve ajudá-lo a começar com isso: Envio de e-mails de forma assíncrona em C#.
Há outra abordagem aqui: http://www.vikramlakhotia.com/Sending_Email_asynchronously_in_AspNet_20.aspx
E claro que existem vários clientes comerciais disponíveis, mas o único que experimentei e posso recomendar é http://www.aspnetemail.com/
Outras dicas
Definitivamente, gere-o em um processo de trabalho em segundo plano para que eles saiam de forma assíncrona.
Aliás, 5 a 10 segundos por e-mail parecem muito lentos para mim.No meu servidor, leva apenas frações de segundo por e-mail.