De Transport.send(message) ne fonctionne pas dans le code ci-dessous.. netbeans se coince lors de l'exécution de la partie. il n'a pas donné suite, d'autres personnes.. il se bloque toujours
J'ai essayé d'écrire un code pour envoyer des e-mail à l'aide de Java. Mais ce code ne fonctionne pas. Lorsque le code est exécuté, il est coincé au transport.send(message). Il reste là pour toujours. Aussi, je ne suis pas sûr si le reste du code est correct ou pas.
//first from, to, subject, & text values are set
public class SendMail {
private String from;
private String to;
private String subject;
private String text;
public SendMail(String from, String to, String subject, String text){
this.from = from;
this.to = to;
this.subject = subject;
this.text = text;
}
//send method is called in the end
public void send(){
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "465");
Session mailSession = Session.getDefaultInstance(props);
Message simpleMessage = new MimeMessage(mailSession);
InternetAddress fromAddress = null;
InternetAddress toAddress = null;
try {
fromAddress = new InternetAddress(from);
toAddress = new InternetAddress(to);
} catch (AddressException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
try {
simpleMessage.setFrom(fromAddress);
simpleMessage.setRecipient(RecipientType.TO, toAddress);
simpleMessage.setSubject(subject);
simpleMessage.setText(text);
Transport.send(simpleMessage); //this is where code hangs
} catch (MessagingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
OriginalL'auteur user1155707 | 2012-01-18
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré exactement le même problème et d'autres ont rapporté des pannes intermittentes. La raison en est que le Transport.envoyer avec le SMTP a deux infinie délais d'attente qui peut entraîner dans votre processus juste accroché!
De la documentation SUN:
mail.smtp.connectiontimeout int connexion de Socket valeur de timeout en millisecondes. Par défaut est infini délai d'attente.
mail.smtp.délai d'attente int Prise I/O de la valeur timeout en millisecondes. Par défaut est infini délai d'attente.
Pour ne pas "accrocher" à jamais, vous pouvez définir ces explicitement:
De SOLEIL: Les propriétés sont toujours définies comme des chaînes de caractères; le Type de la colonne décrit la façon dont la chaîne est interprétée. Par exemple, l'utilisation
Notez que si vous utilisez le "smtps" protocole d'accès SMTP sur SSL, toutes les propriétés seront "le courrier.smtps.*".
Donc, si vous mettez les deux les délais d'attente, vous devez obtenir une "MessagingException" que vous pouvez traiter avec un try/catch plutôt que d'avoir le processus de se pendre.
En supposant que vous utilisez smtp, ajoutez la ligne suivante où t1 et t2 sont vos délais d'attente en ms:
Bien sûr, cela ne résout pas la cause profonde pour les délais d'attente, mais il vous permettra de gérer les problèmes en douceur.
Grâce à Siegfried Goeschl post sur Apache Commons
PS: La cause racine du problème que j'ai connu semble lié à la connexion réseau, j'ai été en utilisant tout en voyageant. Apparemment, la connexion était à l'origine un délai d'attente SMTP qui je n'ai pas eu avec d'autres connexions.
OriginalL'auteur DrDave
Remplacer Session.getDefaultInstance de la Session.getInstance.
Si cela ne résout pas le problème, consultez la JavaMail FAQ, qui a le débogage des conseils.
OriginalL'auteur Bill Shannon
S'il vous plaît essayer ce,
ce fichier que j'essaie d'envoyer d'où vient le code pour le fichier parce qu'il dit "de java.io.FileNotFoundException: file.txt"
j'ai réussi à localiser le fichier mais après avoir exécuté le code d'erreur suivant:"java.net.ConnectException: Connection timed out: connect"
sa me donne l'erreur suivante: "java.net.ConnectException: Connection timed out: connect"
et si je remplace le numéro de port 25 avec 465 puis ça coince à nouveau comme le code que j'ai posté en premier lieu..
OriginalL'auteur Lucifer
Eu exactement ce même problème. Vous devez fermer le transport dans le bloc catch. La raison pour laquelle le code gèle est parce que la connexion au serveur smtp n'est jamais fermé sur le côté client, à moins que vous le faites manuellement.
Mais le moyen le plus efficace pour s'assurer javamail sort correctement est de regrouper les javamail logique dans un bloc try et fermer le transport dans un bloc finally. Essayez ceci.
[MODIFIER] Après avoir été alerté que le code ci-dessus ne fonctionne pas voici le code qui compile correctement.
Salut, merci pour cette remarque. J'ai créé un objet avec l'import javax.mail.De Transport; et qui vous permet de la fermer dans le bloc finally. Je vais modifier cela.
Vous devriez essayer en fait d'exécuter ce code, il y a un peu de problèmes avec la façon dont vous l'avez maintenant.
OriginalL'auteur kslote1
Alors essayez, si vous réussissez, poursuivre l'enquête pour trouver le coupable.
Dans mon cas, c'était l'Antivirus, et j'ai dû faire une exception pour les mails sortants sur
SMTP
pour envoyer le mail avec succès.OriginalL'auteur Niranjan
Lorsque vous Déclarez
Transport.send()
il ne fonctionnera pas utiliser ce lieu detransport.sendMessage(message, message.getAllRecipients());
et également déclarer unejavax.mail.Transport transport = session.getTransport("smtp");
objet comme indiqué dans le code.ensuite le code suivant s'affichera comme ceci je vous Remercie, j'espère que ça va fonctionner parfaitement
OriginalL'auteur vamsi krishnan mysore
J'ai eu exactement le même problème. Je m'a fallu plusieurs heures pour trouver la source du problème. J'ai été en utilisant le mauvais dépendance /dépendance combinaison...
De le changer ...
... le problème est réglé.
OriginalL'auteur user9960800