gpt4 book ai didi

JavaMail 一段时间后停止发送邮件

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:18:29 29 4
gpt4 key购买 nike

我目前正在做 Java 程序员的暑期工作。我们有一个应用程序,人们可以在其中输入他们的任务、议程等。该程序是一个客户端-服务器程序,因此所有数据都存储在服务器上。

我的老板让我做一个邮件通知系统。例如,当任务的最后期限临近时,它会向分配给该任务的人员发送电子邮件。

我在服务器(24/24 全天候运行)中使用 JavaMail 实现了这个系统,并且运行良好。但是一段时间后(不确定多长时间)JavaMail 停止发送邮件。这是我得到的异常:

...
[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

当运行时间超过 X 小时时,它会不断给出这些异常。所以我认为是因为与SMTP服务器的连接超时。所以我更改了这段代码:

Session session = Session.getDefaultInstance(properties, authenticator);

到:

Session session = Session.getInstance(properties, authenticator);

所以它每次都会创建一个新 session 。我认为这会强制 JavaMail 重新连接到 SMTP 服务器,然后问题就会解决。但这并没有解决问题,我仍然遇到这些异常......

有人知道如何解决这个问题吗?

PS: 这是我的发送函数的代码

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);

最佳答案

我将从捕获 SMTPAddressFailedException 异常开始

try {
Transport.send(message);
} catch (SMTPAddressFailedException e) {
throw new SendFailedException("Unable to send to " + mail.getRecipients(), e);
}

这可能就像您的一个用户在他们的电子邮件配置中输入错误一样简单,如果是这种情况,您可能应该做的是在相关帐户上设置一个标志,该标志将在用户下次登录您的应用程序时提示验证他们的电子邮件设置。

关于JavaMail 一段时间后停止发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3649710/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com