Ste*_*ler 5 java email javax.mail
我想在我的应用程序中创建一个实用程序方法,它接受一个电子邮件作为参数,并知道如何发送它.此实用程序方法将负责知道哪个SMTP服务器使用它应该用于连接它的凭据.
我遇到的问题javax.mail是javax.mail.Message类和javax.mail.MimeMessage类期望一个javax.mail.Session对象作为构造函数的参数.所以我不能像这样的方法签名
private static void sendMail(javax.mail.Message);
Run Code Online (Sandbox Code Playgroud)
因为我的客户端类将无法构建消息,而没有我试图抽象的所有细节.他们必须知道如何通过连接到邮件服务器来创建会话.
有没有办法在没有会话的情况下创建Message,或者是一个封装不需要会话的电子邮件的类?
该MimeMessage班将接受空会话.如果您创建了此类消息,则Transport.send可能无法发送您MimeMessage只需要管理自己的会话和传输对象的To解决方法,然后使用非静态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) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用Apache Commons Email,可以将以下任何代码添加到 sendMail 方法中,具体取决于您想要设置的位置。
HtmlEmail email = new HtmlEmail();
//email.setDebug(debugMode);
email.setBounceAddress("bouce@domain.biz");
email.setHostName("mySMTPHost");
email.setFrom("myAddress@mydomain.com");
email.addTo(emailAddress);
email.addBcc("bccAddres");
email.setSubject("Your Subject");
email.setAuthentication("recipient@snailmail.org", "password");
email.setSSL(true);
email.setSmtpPort(465);
email.setHtmlMsg(html);
public static void sendMail(org.apache.commons.mail.HtmlEmail email)
{
email.send();
}
Run Code Online (Sandbox Code Playgroud)