我们尝试使用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**
可能是什么问题?
我们尝试使用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**
可能是什么问题?
这意味着接收服务器无法识别电子邮件地址的邮箱('@'之前的部分)。可能是拼写错误,只是一个不存在的名称,或者甚至可能是接收服务器设置为通过回复代码 550 来拒绝邮件(例如垃圾邮件)。
以下是总结 SMTP 回复代码的众多页面之一,并提供了各种相关 RFC 的链接:http://www.greenend.org.uk/rjk/tech/smtpreplies.html。
编辑:我需要比评论允许的更多空间来回答你的问题。
@RaghuKing,如果您查看 Javadoc 的javax.mail.SendFailedException
,您会注意到您可以在这样的异常对象(catch
块内)上调用 3 个方法:
getInvalidAddresses()
获取无效的地址数组,因此未发送到,getValidSentAddresses()
获取成功发送此消息的地址数组,以及getValidUnsentAddresses()
获取有效但未将消息发送到的地址数组。(显然,如果一个人向多个收件人发送消息,有些可能会成功,有些会失败,但是如果至少有一个失败,则无论成功多少次都会抛出异常。显然,如果您只发送到一个地址,您将仅在这些数组之一中具有该地址,并且它可能不在 ValidSent列表中。
这些数组将为您提供如何处理异常的更多信息,具体取决于地址所在的数组类型。这显然取决于您的应用程序,但这些可能是合理的建议:
但最终是你必须运用常识,也许在你理解它们之前对你不理解的功能进行一些实验。
此代码可以打印无效地址的日志:
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);
}
经历过同样的异常。我意识到我无法向未知用户发送电子邮件。经过咨询,我发现我们的 SMTP 服务器不是开放邮件中继服务器,阅读开放邮件中继。