11

我们尝试使用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** 

可能是什么问题?

4

3 回答 3

19

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

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

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

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

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

(显然,如果一个人向多个收件人发送消息,有些可能会成功,有些会失败,但是如果至少有一个失败,则无论成功多少次都会抛出异常。显然,如果您只发送到一个地址,您将仅在这些数组之一中具有该地址,并且它可能不在 ValidSent列表中。

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

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

但最终是你必须运用常识,也许在你理解它们之前对你不理解的功能进行一些实验。

于 2013-02-28T09:36:59.167 回答
3

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

    try {
        sender.send(message);
    }catch (MailSendException me){
        detectInvalidAddress(me);
    } 

private void detectInvalidAddress(MailSendException me) {
    Exception[] messageExceptions = me.getMessageExceptions();
    if (messageExceptions.length > 0) {
        Exception messageException = messageExceptions[0];
        if (messageException instanceof SendFailedException) {
            SendFailedException sfe = (SendFailedException) messageException;
            Address[] invalidAddresses = sfe.getInvalidAddresses();
            StringBuilder addressStr = new StringBuilder();
            for (Address address : invalidAddresses) {
                addressStr.append(address.toString()).append("; ");
            }

            logger.error("invalid address(es):{}", addressStr);
            return;
        }
    }

    logger.error("exception while sending mail.", me);
}
于 2019-09-10T02:49:48.903 回答
0

经历过同样的异常。我意识到我无法向未知用户发送电子邮件。经过咨询,我发现我们的 SMTP 服务器不是开放邮件中继服务器,阅读开放邮件中继

于 2016-03-10T05:45:28.103 回答