如何解决地址无效的异常

时间:2013-02-28 09:27:01

标签: java javax.mail

我们尝试使用javax.mail发送邮件。在发送邮件时,我们遇到以下异常:

    **sendMail - Message Sending Failed: Invalid Addresses;
    nested exception is: 
javax.mail.SendFailedException: 550 #5.1.0 Address rejected.2013-02-28 13:17:08,236** 

可能是什么问题?

3 个答案:

答案 0 :(得分:13)

这表示接收服务器无法识别电子邮件地址的邮箱(“@”之前的部分)。它可能是拼写错误,它只是一个不存在的名称,或者甚至可能是接收服务器被设置为通过回复代码550来拒绝消息(例如垃圾邮件)。

以下是总结SMTP回复代码的众多页面之一,并提供了各种相关RFC的链接: http://www.greenend.org.uk/rjk/tech/smtpreplies.html

编辑:我需要更多的空间来回答你的问题,而不是评论允许的。

@RaghuKing,如果你看一下javax.mail.SendFailedException的Javadoc,你会注意到你可以在这样的异常对象上调用3个方法(在catch块内):

  • getInvalidAddresses()获取无效且因此未发送到的地址数组
  • getValidSentAddresses()获取成功发送此邮件的地址数组,
  • getValidUnsentAddresses()获取有效但未向其发送消息的地址数组。

(显然,如果有人向多个收件人发送邮件,有些可能会成功,有些会失败,但如果至少有一次失败,则抛出异常,无论取得多少成功。显然也是如果您只发送一个地址,那么您将只在其中一个数组中拥有该地址,并且它可能不在 ValidSent 列表中。

这些数组将为您提供有关如何处理异常的更多信息,具体取决于地址所在的数组类型。这显然取决于您的应用程序,但这些可能是合理的建议:< / p>

  • 无效地址:告诉用户该消息未发送,因为地址错误,列表中的每个无效地址,并提供更正地址的方法,然后尝试重新发送到正确的地址(如果用户没有提供不同的地址,则取消);
  • 有效已发送地址:不重新发送;
  • 有效的未发送地址:尝试重新发送到这些地址。由于之前的错误地址,发送可能在到达这些地址之前停止。

但最终你必须运用常识,并且在你理解它们之前,可能会尝试一些你不理解的功能。

答案 1 :(得分:1)

此代码可以打印无效地址的日志:

const data = [{
  due_at: '2019-09-10',
  yards: [{
    name: 'test'
  }, {
    name: 'test2'
  }]
}];

const events = data.reduce((a, {due_at: start, yards}) => 
  [...a, ...yards.map(({name:title}) => ({start, end: start, title}))],
[]);

console.log(events);

答案 2 :(得分:0)

曾经历过同样的例外。我意识到我无法向未知用户发送电子邮件。咨询后,我发现我们的SMTP服务器不是一个开放式邮件中继服务器,只读Open mail Relay