我正在使用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服务器端缺少某些配置,还是我的代码出现了问题?
答案 0 :(得分:5)
好的,我弄清楚我在哪里出错了,并且发布了答案,其他任何人都可以从中获得一些价值。我有以下代码行:
props.put("mail.smtp.auth", true);
这告诉我的应用程序需要对SMTP服务器进行身份验证,而事实上它并没有。这导致我的应用程序登录到SMTP服务器并发送电子邮件,从而产生错误消息。将此属性设置为false或者没有这行代码可以解决我的问题。这行代码仅对需要您登录的SMTP服务器是必需的,这是我的Exchange服务器没有的。