none
Búsqueda automática de servidores SMTP RRS feed

  • Pregunta

  • Buenos días.

    Tengo un formulario con un "Textbox" en el que escribo una dirección de correo electrónico y otro "Textbox" en el que escribo la contraseña de acceso a ese e-mail. Luego, al pulsar un botón, se autoenvía un e-mail a esa dirección con un texto predefinido. Utilizo el siguiente código:

     mail.IsBodyHtml = True
     mail.From = New MailAddress(usuarios.email)
     mail.To.Add(usuarios.email)
     mail.Subject = ("XX")
     mail.Body = ("XX")
     Dim s As New SmtpClient("smtp.live.com")
     s.Port = 587
     s.EnableSsl = True
     s.Credentials = New System.Net.NetworkCredential(usuarios.email, usuarios.contraseñaemail)
     s.Send(mail)

    Lo que pasa es que tengo predefinido el servidor SMTP de "Hotmail", que es "smtp.live.com". Lo que quiero saber es si existe alguna manera de consultar automáticamente el servidor SMTP del e-mail que haya introducido, sin tener que crear una base de datos con todo el listado de servidores SMTP que existan.

    Inicialmente se me había ocurrido crear una base datos con todos los servidores SMTP y entonces al introducir el e-mail en el "Textbox", buscar el servidor en la base de datos, y luego guardar el servidor SMTP que corresponda en una variable... pero eso me limita mucho a que el servidor e-mail introducido no esté en la base de datos, o que la empresa que gestiona el servidor SMTP, lo acabe cambiando y mi base de datos quede desactualizada.

    Gracias.


    • Editado IvanBcn1982 domingo, 25 de noviembre de 2018 7:59
    domingo, 25 de noviembre de 2018 7:14

Respuestas

  • Aparentemente se trata de una librería de pago, lo digo por lo de oSmtp.LicenseCode="TryIt". Tendrás que averiguar quién es el fabricante, descargar la copia de evaluación, instalarla conforme con las instrucciones del fabricante, y luego añadir una Referencia en tu proyecto. Ah, y prepararte para pagar lo que cueste una vez que se agote el periodo de evaluación.
    • Marcado como respuesta Pablo Rubio lunes, 26 de noviembre de 2018 17:50
    domingo, 25 de noviembre de 2018 12:35

Todas las respuestas

  • [...] saber es si existe alguna manera de consultar automáticamente el servidor SMTP del e-mail que haya introducido, sin tener que crear una base de datos con todo el listado de servidores SMTP que existan.

    Esa base de datos ya existe. Se llama DNS. Simplemente tienes que preguntar al DNS por el registro MX ("Mail eXchanger") correspondiente al dominio al que quieres enviar un email. Por ejemplo, si un usuario es algo@hotmail.com entonces el dominio es hotmail.com. Para consultar el regisitro MX, si lo hicieras desde línea de comandos, lo harías así:

    nslookup -ty=MX hotmail.com

    y te contestará esto:

    Non-authoritative answer:
    hotmail.com     MX preference = 2, mail exchanger = hotmail-com.olc.protection.outlook.com

    Ten presente que para un dominio puede haber más de un servidor MX. Debes usar el que tenga el valor más pequeño en "preference" y si da un error entonces pasar a intentarlo con otro.

    Observa que te he puesto cómo se haría desde una línea de comandos, pero no cómo se haría por programación. Seguro que si buscas en la Red "how to query DNS for MX record in C#" encuentras algo. Observa que he puesto C# y no VB.NET, esto es porque típicamente se encuentran muchos más artículos en la red sobre C# que sobre VB; resulta normalmente sencillo traducir después de un lenguaje al otro. En última instancia, si no encuentras nada, siempre podrías usar Process.Star para lanzar el comando nslookup y capturar el texto de la respuesta. No es muy elegante, pero resolvería el problema.

    Finalmente una precaución: para evitar el "spam" la mayor parte de los servidores SMTP no aceptan mensajes entrantes desde direcciones IP que no conocen. Sería necesario que tu servidor estuviese en la "lista blanca" para poder enviar correo de esta manera.

    • Propuesto como respuesta Sergio Parra domingo, 25 de noviembre de 2018 16:50
    domingo, 25 de noviembre de 2018 9:58
  • He encontrado este código para poder obtener el servidor SMTP de una dirección e-mail. Probaré a ver si funciona...

     Dim oSmtp As New EASendMailObjLib.Mail
      oSmtp.LicenseCode = "TryIt"
      Dim Server As String
      'Retrieve SMTP server address
       Server = oSmtp.GetEmailServer(usuarios.email)

    Lo que pasa es que no sé cómo se define el tipo "EASendMAilOBjLib". Cuando lo ejecuto, me da el error "no se ha definido el tipo EASendMAilOBjLib".




    • Editado IvanBcn1982 domingo, 25 de noviembre de 2018 12:14
    domingo, 25 de noviembre de 2018 12:13
  • Aparentemente se trata de una librería de pago, lo digo por lo de oSmtp.LicenseCode="TryIt". Tendrás que averiguar quién es el fabricante, descargar la copia de evaluación, instalarla conforme con las instrucciones del fabricante, y luego añadir una Referencia en tu proyecto. Ah, y prepararte para pagar lo que cueste una vez que se agote el periodo de evaluación.
    • Marcado como respuesta Pablo Rubio lunes, 26 de noviembre de 2018 17:50
    domingo, 25 de noviembre de 2018 12:35
  • Gracias por la respuesta. Seguiré buscando alguna solución por la web.
    domingo, 25 de noviembre de 2018 15:20