Java Mail mystère - SMTP bloqué?
J'ai un programme Java qui utilise javax.de messagerie pour envoyer un message SMTP. Ce programme fonctionne très bien sur une machine Linux, je tiens à souligner que l'avance. Quand j'ai essayer de ce même code sur mon Windows 7 x64 boîte, j'obtiens cette erreur:
send failed, exception: javax.mail.MessagingException: Could not connect to SMTP host: smtp.west.cox.net, port: 25;
nested exception is: java.net.SocketException: Network is unreachable: connect
Voici le code:
Session session = Session.getInstance(props, null);
MimeMessage msg = new MimeMessage(session);
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO, props.getProperty("mail.to", "[email protected]"));
msg.setSubject(mySubject);
msg.setSentDate(new Date());
msg.setContent(sBuf.toString(), "text/html");
Transport.send(msg);
Ce programme assez bien utilise les paramètres par défaut pour tout. Il fonctionne très bien sur une autre machine sur le même réseau. Il utilise les mêmes paramètres que j'utilise pour mon client de messagerie qui fonctionne bien. Il y a quelque chose sur CETTE zone de Windows qui bloque le SMTP, mais seulement pour Java.
J'ai Symantec (Norton) 360 installé. De l'éteindre ne fait aucune différence, mais le redémarrage en Mode sans échec (qui désactive presque tout) permet au programme de travail et d'envoyer du courrier à l'amende juste.
Donc, pour récapituler:
- Le code du programme de travaux.
- Les paramètres sont corrects.
- SMTP fonctionne pour Windows Mail et n'est bloqué pour Java sur cette machine Windows.
Avant de me passer une autre journée de déchirer les choses en dehors et une désinstallation /réinstallation, je me demandais si quelqu'un avait des conseils sur la fixation de ce?
telnet smtp.west.cox.net 25
à partir de l'invite de commande?Quelle version de Windows? Est Pare-feu Windows est-il actif?
Depuis votre code fonctionne en mode sans échec ... ce n'est pas votre code. Je soupçonne que Java n'était pas autorisé par le pare-feu windows.
Cette question est peut-être mieux posté dans ServerFault. C'est un réseau/système d'exploitation de problème, pas d'un problème de programmation.
Tester le port 25 de PUTTY (telnet) se connecte au serveur SMTP comme espected.
OriginalL'auteur user1071914 | 2012-12-28
Vous devez vous connecter pour publier un commentaire.
Le problème est dû à l'IPv4/IPv6 préférence de Java. Java tente d'utiliser l'IPv6 par défaut (?) et mon fournisseur d'accès internet ne prend pas en charge IPV6. Cependant, il est activé sur mon Windows 7 cases par défaut.
Si vous rencontrez un comportement similaire, vous pouvez le vérifier en allant dans "Panneau de configuration/Réseau et Internet/Connexions Réseau", cliquez-droit sur votre connexion internet, et en sélectionnant "Statut" dans le menu contextuel. La boîte de dialogue affiche deux lignes de similaire à ceci:
C'est la racine du problème - Java préfère IPv6, qui ne peut pas l'utiliser pour se connecter à internet.
Pour résoudre ce problème, effectuez l'une (ou les deux) de ces choses:
Début de votre programme java à l'aide de cette option de ligne de commande:
Faire soit l'un de ces va résoudre le problème.
C'est vraiment génial de réponse, j'ai été frapper ma tête sur le mur! Je voudrais vous donner 100 votes si je le pouvais.
merci! Je suis content d'avoir pu l'aider. 🙂
cela a résolu mon problème. Bon à savoir. Merci.
Juste en passant en argument JVM "-Djava.net.preferIPv4Stack=true" résolu mon problème.
OriginalL'auteur user1071914
J'ai eu le même problème pendant la mise à niveau de forme java 1.6 de java 1.7.
Le problème s'est produit parce que java 1.7 utilisation d'IPv6 par défaut.
Pour résoudre ce problème, vous devez ajouter Java Option comme sur l'exemple ci-dessous.
Il suffit d'exécuter cette commande sur Windows cmd:
quels sont les étoiles?
OriginalL'auteur mariusz117
Synantec EP 12.1 RU5 résout votre problème.
OriginalL'auteur sengokyu
J'ai été confrontée au même problème , en gros, c'était un Java 7 question, Simplement en passant en argument JVM "-Djava.net.preferIPv4Stack=true", je me suis débarrassé du problème .
OriginalL'auteur sbpandey
Bien que ce problème est résolu: il peut toujours être utile de souligner que certains pare-feu Windows bloquer/autoriser l'accès à des ports en fonction du nom de l'exécutable (plutôt que simplement le numéro de port lui-même) - de sorte que vous pouvez vous retrouver avec un programme (disons Outlook) d'être autorisé et un autre (Java) bloqué.
OriginalL'auteur monojohnny
J'ai eu le même problème mais étrangement, tout fonctionnait bien, avec jdk 1.6 une fois que j'ai installer jdk 1.7 je suis l'exception. Je me demande quelle pourrait être la raison pour cela!
Après l'ajout d'IPV4 argument il fonctionne très bien..Merci beaucoup.
OriginalL'auteur Renu