Je suis en train de faire un job d'été en tant que programmeur Java. Nous avons une application où les gens peuvent entrer leurs tâches, agenda, etc. Le programme est un programme client-serveur, donc toutes les données sont stockées sur un serveur.JavaMail arrête d'envoyer des mails après un certain temps
Mon patron m'a demandé de créer un système de notification par courrier électronique. Par exemple, lorsqu'une échéance d'une tâche est proche, elle envoie un courrier électronique à la personne affectée à cette tâche.
J'ai implémenté ce système dans le serveur (qui fonctionne 24/24) en utilisant JavaMail et ça marche très bien. Mais après un certain temps (pas sûr combien de temps) JavaMail cesse d'envoyer des mails. Ceci est l'exception que je reçois:
...
[Mailer] enqueuing mail
[Mailer] enqueuing mail
[Mailer] enqueuing mail
[Mailer] enqueuing mail
[Mailer] enqueuing mail
[Mailer] enqueuing mail
[Mailer] enqueuing mail
...
[Mailer] flushing mail queue (10 mails)
[Mailer] exception
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1446)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:736)
at javax.mail.Transport.send0(Transport.java:191)
at javax.mail.Transport.send(Transport.java:120)
at Server.Mailer.send(Mailer.java:119)
at Server.Mailer.flush(Mailer.java:84)
at Server.Mailer.run(Mailer.java:103)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1297)
... 8 more
Lors de l'exécution de plus de X heures, il continue à donner ces exceptions. Donc je pensais que c'était parce que la connexion avec le serveur SMTP avait expiré. Alors j'ai changé ce code:
Session session = Session.getDefaultInstance(properties, authenticator);
à:
Session session = Session.getInstance(properties, authenticator);
il créerait une nouvelle session à chaque fois. Je pensais que cela obligerait JavaMail à se reconnecter au serveur SMTP et que le problème serait résolu. Mais cela ne l'a pas résolu, je reçois toujours ces exceptions ...
Est-ce que quelqu'un sait comment résoudre ce problème?
PS: Voici le code de mon envoyer la fonction
Session session = Session.getInstance(properties, authenticator);
MimeMessage message = new MimeMessage(session);
message.setSubject(mail.getSubject());
message.setContent(mail.getHTML().toString(), "text/html");
message.setFrom(mail.getSender());
message.setRecipients(javax.mail.Message.RecipientType.TO, mail.getRecipients());
Transport.send(message);
Notez que c'est le serveur SMTP qui se plaint du message que vous voulez envoyer, pas de JavaMail en lui-même (notez le 553). Par conséquent, vous dépensez vos efforts au mauvais endroit: ( –