如何解决地址无效的exception

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

  **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** 

可能是什么问题?

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

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

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

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

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

(显然,如果有人向多个收件人发送邮件,有些可能会成功,有些会失败,但如果至少有一次失败,无论成功多少,都会抛出exception。显然,如果您只发送一个地址,那么将只在其中一个数组中有一个地址,它可能不在ValidSent列表中。

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

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

但最终你必须运用常识,或者在你理解它们之前尝试一些你不理解的function。

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