2012-04-21 13 views
6

yo hicimos una sencilla aplicación para enviar mensajes de correo electrónico utilizando la API de Java y tiene una pregunta:anfitrión Finding SMTP y el puerto conocer la dirección de correo electrónico utilizando JAVA API

¿Hay alguna forma de averiguar el host SMTP sabiendo la dirección de correo electrónico de quien iniciará sesión para enviar un correo electrónico? Y también el puerto?

Por ejemplo, si la dirección de correo electrónico del remitente es [email protected], el host SMTP es smtp.gmail.com y el puerto 465. Si la dirección de correo electrónico del remitente es [email protected], el host SMTP es smtp.yahoomail.com y el puerto 25.

Supongamos que no sé esto, ¿hay alguna forma de encontrar esta información utilizando las clases de la API de Java? Tenga en cuenta que soy nuevo en java :)

Gracias de antemano,

Andreea


Gracias por sus respuestas. He tratado de hacer lo siguiente:

public static String getMXRecordsForEmailAddress(String eMailAddress) { 

      String returnValue = null; 

      try { 
       String hostName = getHostNameFromEmailAddress(eMailAddress); 
       Record[] records = new Lookup(hostName, Type.MX).run(); 
       if (records == null) { 
      throw new RuntimeException("No MX records found for domain " + hostName + "."); 
} 

       // return first entry (not the best solution) 
       if (records.length > 0) { 
         MXRecord mx = (MXRecord) records[0]; 
         returnValue = mx.getTarget().toString(); 
       } 
      } catch (TextParseException e) { 
       throw new RuntimeException(e); 
      } 

      System.out.println("return value = "+returnValue); 
      return returnValue; 
     } 

Pero, independientemente del valor del nombre de host (por ejemplo, gmail.com, yahoo.com.) Record [] = new registros de búsqueda (nombre de host, Type.MX).correr(); siempre devuelve nulo.

Estoy bastante seguro de que me he perdido algo, pero no sé qué. ¿Podrías ayudarme con esto? ¿Puedes decirme qué estoy haciendo mal?

Gracias verry mucho,

Andreea

+0

Técnicamente, podría hacer una búsqueda de registros mx, pero eso no será sencillo: http://www.exclamationsoft.com/exclamationsoft/netmailbot/help/website/HowToFindTheSMTPMailServerForAnEmailAddress.html. – mellamokb

+0

Los registros MX no necesariamente ayudan. El registro MX le dice a qué servidor SMTP entrante debe contactar si está intentando enviar un mensaje * a * una dirección dada; pero eso no le dice qué servidor/puerto de salida debe usar al enviar un mensaje * desde * esa dirección. Por ejemplo, en el caso de Gmail, el MX es algo así como 'gmail-smtp-in.l.google.com', pero el servidor SMTP de salida es' smtp.gmail.com'. –

Respuesta

1

Algo no está muy claro en su pregunta. Está intentando averiguar el SMTP para enviar un correo electrónico a alguna dirección, así que envíelo directamente a su servidor. Eso se hace a través del registro MX como se explicó anteriormente.

Si, como sospecho, está tratando de averiguar para su usuario actual (en el campo de) qué servidor SMTP usar para enviar sus correos electrónicos al mundo. Esta es una historia diferente. No se puede determinar de manera segura. El registro MX le da la dirección para el correo electrónico entrante de ese dominio, no de salida. La mayoría de las veces, funcionará, pero no garantiza. GMail por ejemplo, tiene en su registro MX:

alt1.gmail-smtp-in.l.google.com internet address = 173.194.70.27 
alt2.gmail-smtp-in.l.google.com internet address = 173.194.69.27 
alt4.gmail-smtp-in.l.google.com internet address = 173.194.79.27 

Mientras que el smtp.gmail.com (saliente) es:

Name: gmail-smtp-msa.l.google.com 
Address: 173.194.67.108 

O un foobar.com empresa podría tener smtp.foobar.com pero solo aceptar correo saliente como internalmail.foobar.loc a través de su VPN.

Puede ver este juego de adivinanzas en la configuración de Thunderbird, intentan encontrar los servidores automáticamente pero le piden confirmación.

2

Desafortunadamente, no hay una forma estándar de identificar el servidor SMTP correcto para una dirección de correo electrónico arbitraria, suponiendo que lo que intenta hacer es dejar que el usuario especifique una dirección de correo electrónico/contraseña y luego enviar el correo usando esa cuenta.

Es por eso que los clientes de correo electrónico (por ejemplo, Thunderbird, Outlook, etc.) generalmente requieren que el usuario configure manualmente el nombre/puerto del servidor SMTP saliente. Puede ayudar en ese proceso reconociendo algunos ISP populares (Google, Yahoo, etc.) y preconfigurando los valores adecuados, pero no hay una manera general de hacerlo automáticamente.

0

Parece que está intentando que el usuario escriba solo el correo electrónico y la contraseña para conectarse. Si es así, hemos tenido este mismo problema y la mejor manera que hemos encontrado era para obtener el nombre de dominio y:

  1. Si es pública, como Gmail, Yahoo o Outlook y luego probar su configuración específica para ellos.

  2. Si es un dominio privado o algo así. Haga un bucle a través de los servidores de salida smtp.domain.com y mail.domain.com usando los puertos 587, 465 y 25. Probablemente tendrá que verificar TLS y autenticación.

El proceso es un poco largo, pero si usted tiene un par de correos electrónicos pública y una dozend los privados que debe ser capaz de probar la mayoría de los escenarios.

Cuestiones relacionadas