Atualizando código legado de System.Web.Mail para System.Net.Mail no Visual Studio 2005:Problemas no envio de e-mail
-
09-06-2019 - |
Pergunta
Usar o obsoleto System.Web.Mail para enviar e-mail funciona bem, aqui está o trecho de código:
Public Shared Sub send(ByVal recipent As String, ByVal from As String, ByVal subject As String, ByVal body As String)
Try
Dim Message As System.Web.Mail.MailMessage = New System.Web.Mail.MailMessage
Message.To = recipent
Message.From = from
Message.Subject = subject
Message.Body = body
Message.BodyFormat = MailFormat.Html
Try
SmtpMail.SmtpServer = MAIL_SERVER
SmtpMail.Send(Message)
Catch ehttp As System.Web.HttpException
critical_error("Email sending failed, reason: " + ehttp.ToString)
End Try
Catch e As System.Exception
critical_error(e, "send() in Util_Email")
End Try
End Sub
e aqui está a versão atualizada:
Dim mailMessage As New System.Net.Mail.MailMessage()
mailMessage.From = New System.Net.Mail.MailAddress(from)
mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))
mailMessage.Subject = subject
mailMessage.Body = body
mailMessage.IsBodyHtml = True
mailMessage.Priority = System.Net.Mail.MailPriority.Normal
Try
Dim smtp As New Net.Mail.SmtpClient(MAIL_SERVER)
smtp.Send(mailMessage)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Eu tentei muitas variações diferentes e nada parece funcionar, tenho a sensação de que pode ter a ver com o SmtpClient. Há algo que mudou no código subjacente entre essas versões?
Não há exceções que sejam rejeitadas.
Solução
Testei seu código e meu e-mail foi enviado com sucesso.Supondo que você esteja usando os mesmos parâmetros para o código antigo, sugiro que seu servidor de e-mail (MAIL_SERVER) esteja aceitando a mensagem e haja um atraso no processamento ou considere-a spam e a descarte.
Eu sugeriria enviar uma mensagem usando uma terceira via (telnet, se você estiver com coragem) e ver se funciona.
EDITAR:Observo (na sua resposta subsequente) que especificar a porta ajudou um pouco.Você não disse se está usando a porta 25 (SMTP) ou a porta 587 (Envio) ou outra coisa.Se você ainda não estiver fazendo isso, usar a porta de sumissão também pode ajudar a resolver seu problema.
Outras dicas
A biblioteca System.Net.Mail usa os arquivos de configuração para armazenar as configurações, então você só precisa adicionar uma seção como esta
<system.net>
<mailSettings>
<smtp from="test@foo.com">
<network host="smtpserver1" port="25" userName="username" password="secret" defaultCredentials="true" />
</smtp>
</mailSettings>
</system.net>
Você já tentou adicionar
smtp.UseDefaultCredentials = True
antes do envio?
Além disso, o que acontece se você tentar alterar:
mailMessage.From = New System.Net.Mail.MailAddress(from)
mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))
para isso:
mailMessage.From = New System.Net.Mail.MailAddress(from,recipent)
-Kevin Fairchild
Você está configurando as credenciais do e-mail?
smtp.Credentials = New Net.NetworkCredential("xyz@gmail.com", "password")
Eu tive esse erro, mas acredito que gerou uma exceção.
Tudo o que você está fazendo está correto.Aqui estão as coisas que eu verificaria.
- Verifique novamente se o serviço SMTP no IIS está funcionando corretamente.
- Certifique-se de que não esteja sendo sinalizado como spam.
esses geralmente são os maiores culpados sempre que tivemos problemas com o envio de e-mail.
Além disso, notei que você está fazendo MsgBox (ex.Message).Acredito que eles impediram que o MessageBox funcionasse no asp.net em um service pack, então pode haver um erro, talvez você não saiba.verifique seu log de eventos.
Adicionei o número da porta do servidor de e-mail e começou a funcionar esporadicamente, parece que foi um problema no servidor e atraso no envio das mensagens.Obrigado por suas respostas, todas foram úteis!