我在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();
}
}
答案 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
尽管听起来非常技术性,但值得尝试确保服务器使用给定参数从您的计算机发送电子邮件:用户名(或者根本不是用户名),目的地地址等。