Trouver hôte SMTP et le port connaître l'adresse e-mail à l'aide de l'API JAVA
J'ai fait une simple application pour envoyer des e-mails à l'aide de l'API Java et avez une question:
Est-il un moyen de trouver l'hôte SMTP connaître l'adresse e-mail de celui qui va se connecter pour envoyer un e-mail? Et aussi le port?
Par exemple, si l'expéditeur de l'e-mail est [email protected], l'hôte SMTP est smtp.gmail.com et le port 465. Si l'expéditeur de l'e-mail est [email protected], l'hôte SMTP est smtp.yahoomail.com et le port 25.
À supposer que je ne sais pas cela, est-il possible de trouver cette information à l'aide de Java les classes de l'API? Veuillez noter que je suis nouveau à java 🙂
Merci d'avance,
Andreea
Merci pour vos réponses. J'ai essayé de faire ce qui suit:
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;
}
Mais, quelle que soit la valeur de nom d'hôte (par exemple. gmail.com, yahoo.com )
Record[] records = nouvelle de Recherche(nom d'hôte, le Type.MX).run(); toujours retourner la valeur null.
Je suis assez sûr que j'ai raté quelque chose, mais je ne sais pas quoi.
Vous s'il vous plaît m'aider avec cela? Pouvez-vous me dire ce que je fais mal?
Je vous remercie très beaucoup,
Andreea
- Techniquement, vous pourriez faire une recherche des enregistrements mx, mais c'est probablement ne va pas être simple: exclamationsoft.com/exclamationsoft/netmailbot/help/website/....
- Les enregistrements MX n'est pas nécessairement de l'aide. L'enregistrement MX vous dit quoi entrant serveur SMTP que vous devez contacter si vous essayez d'envoyer un message à une adresse donnée; mais cela ne veut pas dire quelle sortant serveur/port que vous devez utiliser lors de l'envoi d'un message à partir de cette adresse. Par exemple, dans le gmail cas, la MX est quelque chose comme
gmail-smtp-in.l.google.com
, mais le serveur SMTP sortant estsmtp.gmail.com
.
Vous devez vous connecter pour publier un commentaire.
Malheureusement, il n'y a pas de méthode standard pour identifier le bon serveur SMTP sortant de l'arbitraire d'un adresse e-mail, en supposant que ce que vous essayez de faire est de permettre à l'utilisateur de spécifier une adresse e-mail/mot de passe et ensuite envoyer le mail à l'aide de ce compte.
C'est pourquoi les clients de messagerie (par exemple, Thunderbird, Outlook, etc.) nécessitent généralement à l'utilisateur de configurer le serveur SMTP sortant nom/port manuellement. Vous pourriez les aider dans ce processus en reconnaissant quelques populaire fournisseurs de services internet (Google, Yahoo, etc.) et la pré-configuration de l'valeurs propres, mais il n'y a pas d'usage général, de façon à le faire automatiquement.
Quelque chose n'est pas vraiment clair dans votre question. Vous êtes à essayer de trouver le protocole SMTP pour envoyer des e-mail à une adresse, afin de l'envoyer directement sur leur serveur. C'est fait par le biais de l'enregistrement MX comme expliqué ci-dessus.
Si, comme je le soupçonne, que vous essayez de trouver pour votre utilisateur courant (dans le champ) le serveur SMTP à utiliser pour envoyer ses e-mails sur le monde. C'est une autre histoire. Il ne peut pas être déterminé de façon sécuritaire.
L'enregistrement MX vous donne l'adresse pour le courrier entrant de ce domaine, pas sortant. La plupart du temps, cela fonctionne, mais aucune garantie.
GMail, par exemple, a dans son enregistrement MX:
Tandis que le smtp.gmail.com (sortant) est:
Ou d'une entreprise foobar.com pourrait avoir smtp.foobar.com mais seulement accepter le courrier sortant comme internalmail.foobar.loc via leur VPN.
Vous pouvez voir ce jeu de devinettes dans thunderbird installation, ils essaient de trouver les serveurs automatiquement, mais vous demander confirmation.
Vous habituellement parler à un serveur smtp vous-même et il gère le routage de courrier de yahoo Gmail hasard fournisseur de services internet pour le serveur.
La normale de l'API à utiliser est http://javamail.kenai.com/nonav/javadocs/ javamail.
Si vous écrivez votre propre serveur smtp:
1 s'il vous plaît ne pas
2 le smtp informations sont stockées dans le DNS mxrecord http://en.m.wikipedia.org/wiki/MX_record
Il semble que vous essayez de permettre à l'utilisateur de taper uniquement le courriel et le mot de passe pour vous connecter. Si oui, nous avons eu ce même problème et le meilleur moyen que nous avons trouvé était d'obtenir le nom de domaine et:
Si elle est publique, comme Gmail, Yahoo ou Outlook, puis essayer de leur configuration spécifique pour eux.
Si c'est privte domaine ou quelque chose comme ça. Boucle à travers sortant des serveurs smtp.domain.com et mail.domain.com à l'aide de ports 587, 465 et 25. Vous aurez probablement à vérifier pour TLS et d'authentification.
Le processus est un peu long, mais si vous avez un couple de public mails et un dozend privé, vous devriez être en mesure de tester la plupart des scénarios.