JavaMail SMTPSendFailedException

时间:2011-10-11 16:20:07

标签: smtp exchange-server javamail

我正在使用JavaMail api编写批量电子邮件程序。我有一个Microsoft Exhange服务器,我正在尝试将电子邮件发送到。当我运行我的程序时,我收到以下错误:

**com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)
at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1862)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1100)
at javax.mail.Transport.send0(Transport.java:195)
at javax.mail.Transport.send(Transport.java:124)
at SendEmail.postMail(SendEmail.java:100)
at EmailGenerator.main(EmailGenerator.java:52)**

我的代码试图发送消息的部分如下:

Properties props = new Properties();
props.put("mail.smtp.host", email_server);
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", true);

class EmailAuthenticator extends Authenticator {
String user;
String pw;
EmailAuthenticator (String FROM, String PASSWORD)
{
    super();
    this.user = FROM;
    this.pw = PASSWORD;
}
public PasswordAuthentication getPasswordAuthentication()
{
    return new PasswordAuthentication(user, pw);
}
}

Session session = Session.getInstance(props, new EmailAuthenticator(USER, PASSWORD));
session.setDebug(debug);
System.out.println("Session created");

.. CREATED MESSAGE HERE...

Transport transport = session.getTransport("smtp");
transport.connect(exchange_server,user,password);
transport.send(msg);
transport.close();

我想知道我在Exchange服务器端缺少某些配置,还是我的代码出现了问题?

1 个答案:

答案 0 :(得分:5)

好的,我弄清楚我在哪里出错了,并且发布了答案,其他任何人都可以从中获得一些价值。我有以下代码行:

props.put("mail.smtp.auth", true);

这告诉我的应用程序需要对SMTP服务器进行身份验证,而事实上它并没有。这导致我的应用程序登录到SMTP服务器并发送电子邮件,从而产生错误消息。将此属性设置为false或者没有这行代码可以解决我的问题。这行代码仅对需要您登录的SMTP服务器是必需的,这是我的Exchange服务器没有的。