Actualización del código heredado de System.Web.Mail a System.Net.Mail en Visual Studio 2005:Problemas al enviar correo electrónico

StackOverflow https://stackoverflow.com/questions/52321

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.

¿Fue útil?

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.

Wikipedia y rfc4409 tener más detalles.

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.

  1. Verifique que el servicio SMTP en IIS esté funcionando correctamente.
  2. 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!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top