无法在Windows Server 2008 r2上使用Java代码发送电子邮件?

时间:2013-12-09 09:06:04

标签: java windows-server-2008-r2

我在Windows 2008 r2服务器上安装了SMTP服务器和IIS Web服务器。我试图通过localhost使用java代码发送测试电子邮件,但我无法发送电子邮件,我得到以下错误,不知道我做错了什么。除了安装SMTP服务器之外还有我需要做的设置,因为我刚安装了我的smtp服务器,并期望这段代码有效吗?

javax.mail.SendFailedException: Invalid Addresses;
  nested exception is:
    com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 Unable to relay for marshell@gmail.com

at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1862)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1118)
at javax.mail.Transport.send0(Transport.java:195)
at javax.mail.Transport.send(Transport.java:124)
at LotusNotes.SendEmail.main(SendEmail.java:30)
Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 Unable to relay for marshell@gmail.com at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1715)

Java代码

public static void main(String[] args) {


  String to = "marshell@gmail.com";
      String from = "imrmsmtpmail";
      String host = "localhost";

      Properties properties = System.getProperties();
      properties.setProperty("mail.smtp.host", host);

      Session session = Session.getDefaultInstance(properties);

      try{

         MimeMessage message = new MimeMessage(session);
         message.setFrom(new InternetAddress(from));
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
         message.setSubject("Subject Line!");
         message.setText("Test email!");
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }
      catch (MessagingException mex) {
         mex.printStackTrace();
      }

}

1 个答案:

答案 0 :(得分:1)

您可能需要进行身份验证才能向此服务器发送电子邮件。

AFAIK,您在提供与服务器的连接时不提供任何用户或密码。

我使用这样的东西:

  Properties properties = System.getProperties();
  properties.setProperty("mail.smtp.host", host);
  properties.setProperty("mail.smtp.auth", true);
  properties.setProperty("mail.user", "PUT AN USERNAME HERE");
  properties.setProperty("mail.password", "PUT A PASSWORD HERE");
  Session session = Session.getDefaultInstance(properties);

为了确保在编写程序之前所有参数都正常工作,对邮件端口(25)建立telnet非常有用,以确保您可以直接将代码发送到服务器中。

在以下链接中,您有一个示例:

http://support.microsoft.com/kb/153119/en

尽管听起来非常技术性,但值得尝试确保服务器使用给定参数从您的计算机发送电子邮件:用户名(或者根本不是用户名),目的地地址等。