javax.mail:不接收属性

时间:2019-05-08 22:14:10

标签: java email smtp javamail

我正在尝试将代码中的电子邮件发送到既不在本地主机上也不在默认端口25上的smtp服务器。

我有一个看起来像这样的代码:

// Set the host SMTP address
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", hostname);
props.put("mail.smtp.port", "8025");
props.put("mail.smtp.auth", "true");

// creates a new session with an authenticator
Authenticator auth = new Authenticator() {
    public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
};
Session session = Session.getInstance(props, auth);

Transport trans = session.getTransport("smtp");

...piece of the code where message is created...

trans.send(message);

但是它在Transport.send()上失败并显示超时-1错误,正试图连接到端口25上的本地主机,但没有连接到具有上述指定端口的主机。

我的问题是如何检查现有属性(默认localhost:25),或者是否已经生成了其他任何传输会话?

1 个答案:

答案 0 :(得分:2)

send方法是静态的,因此它正在使用给定消息的会话属性。如果要使用自己创建的运输工具,则需要先致电connectsendMessage,然后再致电close

// Set the host SMTP address
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", hostname);
props.put("mail.smtp.port", "8025");
props.put("mail.smtp.auth", "true");

// creates a new session with an authenticator
Authenticator auth = new Authenticator() {
    public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
};
Session session = Session.getInstance(props, auth);

Transport trans = session.getTransport("smtp");

//...piece of the code where message is created...

trans.connect();
try {
   trans.sendMessage(message, message.getAllRecipients());
} finally {
   trans.close();
}