我想在我的应用程序中创建一个实用程序方法,它接受电子邮件消息作为参数并知道如何发送它。此实用程序方法将负责了解哪个 SMTP 服务器使用哪些凭据来连接它。
我在使用 javax.mail
时遇到的问题是 javax.mail.Message
类和 javax.mail.MimeMessage
class 需要一个 javax.mail.Session
对象作为构造函数的参数。所以我不能有像
private static void sendMail(javax.mail.Message);
因为如果没有我试图抽象掉的所有细节,我的客户端类将无法构建消息。他们必须知道如何通过连接到邮件服务器来创建 session 。
有没有办法在没有 session 的情况下创建消息,或者是否可以创建一个封装不需要 session 的电子邮件消息的类?
最佳答案
MimeMessage
类将接受空 session 。如果您创建这样的消息,Transport.send
可能无法发送您的 MimeMessage
要解决此问题,您只需管理自己的 session 和传输对象,然后使用非-静态 Transport.sendMessage
方法。
public void forward(Session session, Message m) throws MessagingException {
Address[] all = m.getAllRecipients();
if (all == null) { //Don't pass null to sendMessage.
all = new InternetAddress[0];
}
Transport t;
try {
// Session properties 'mail.transport.protocol.rfc822'
// and 'mail.transport.protocol' can be used to change
// between SMTP or SMTPS.
if (all.length != 0) {
t = session.getTransport(all[0]);
} else {
t = session.getTransport();
}
} catch (NoSuchProviderException punt) {
try {
t = session.getTransport("smtp"); //Just a guess.
} catch (NoSuchProviderException fail) {
if (fail.setNextException(punt)) {
throw fail;
} else {
punt.setNextException(fail);
throw punt;
}
}
}
m.saveChanges(); //Computes additional headers.
t.connect("host", 25, "user", "pass"); //Or use one of the many other connect method overloads.
try {
t.sendMessage(m, all);
} finally {
try {
t.close();
} catch (MessagingException warning) {
}
}
}
关于java - 在没有邮件 session 的情况下用 Java 创建电子邮件消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17557332/