Actualización del código heredado de System.Web.Mail a System.Net.Mail en Visual Studio 2005:Problemas al enviar correo electrónico
-
09-06-2019 - |
Pregunta
Usar el obsoleto System.Web.Mail para enviar correos electrónicos funciona bien, aquí está el fragmento 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
y aquí está la versión actualizada:
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
He probado muchas variaciones diferentes y nada parece funcionar. Tengo la sensación de que puede tener que ver con SmtpClient. ¿Hay algo que cambió en el código subyacente entre estas versiones?
No hay excepciones que se rechacen.
Solución
Probé su código y mi correo se envió correctamente.Suponiendo que esté utilizando los mismos parámetros para el código anterior, sugeriría que su servidor de correo (MAIL_SERVER) esté aceptando el mensaje y haya un retraso en el procesamiento o lo considere spam y lo descarte.
Sugeriría enviar un mensaje utilizando una tercera vía (telnet si te sientes valiente) y ver si tiene éxito.
EDITAR:Observo (de su respuesta posterior) que especificar el puerto ha ayudado un poco.No has dicho si estás usando el puerto 25 (SMTP) o el puerto 587 (Envío) o algo más.Si aún no lo estás haciendo, usar el puerto de envío también puede ayudar a resolver tu problema.
Otros consejos
La biblioteca System.Net.Mail utiliza los archivos de configuración para almacenar la configuración, por lo que es posible que solo necesites agregar una sección 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>
¿Has intentado agregar
smtp.UseDefaultCredentials = True
antes del envío?
Además, ¿qué sucede si intentas cambiar?
mailMessage.From = New System.Net.Mail.MailAddress(from)
mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))
a esto:
mailMessage.From = New System.Net.Mail.MailAddress(from,recipent)
--Kevin Fairchild
¿Está configurando las credenciales para el correo electrónico?
smtp.Credentials = New Net.NetworkCredential("xyz@gmail.com", "password")
Tuve este error, sin embargo creo que generó una excepción.
Todo lo que estás haciendo es correcto.Estas son las cosas que comprobaría.
- Verifique que el servicio SMTP en IIS esté funcionando correctamente.
- Asegúrate de que no se marque como spam.
Estos suelen ser los mayores culpables cuando hemos tenido problemas con el envío de correo electrónico.
Además, acabo de notar que estás haciendo MsgBox (ex.Message).Creo que bloquearon el funcionamiento de MessageBox en asp.net en un paquete de servicio, por lo que es posible que esté generando un error, pero es posible que no lo sepas.consulte su registro de eventos.
Agregué el número de puerto para el servidor de correo y empezó a funcionar esporádicamente, parece que fue un problema con el servidor y un retraso en el envío de los mensajes.Gracias por sus respuestas, ¡todas fueron útiles!