在 SMTP 协议和 JavaMail 中保存会话 api

Save Session in SMTP protocol and JavaMail api

我开发了一个 Java 代表用户发送电子邮件的应用程序。

为了避免保存用户密码,我想保存Mail Session。 但是,我看到在 Java 的 SMTP 协议的邮件 api 中,实现对发送的每封邮件进行身份验证!

它只是一个实现还是在SMTP协议中声明如此?

我的代码:

我正在使用 JavaMail API 启动 SMTP 会话并发送电子邮件,如下所示:

//Set up headers
String from,to...

//Set up authentication
  Properties props = new Properties();  
   props.put("mail.smtp.host",host);  
   props.put("mail.smtp.auth", "true");  

  Session session = Session.getDefaultInstance(props,  
    new javax.mail.Authenticator() {  
      protected PasswordAuthentication getPasswordAuthentication() {  
    return new PasswordAuthentication(user,password);  
      }  
    });  

//Set up message
MimeMessage message = new MimeMessage(session); 
...

//Send message
  Transport.send(message);  

而在Transport.send(message)中(在JavaMailapi中),有如下实现:

try{
  this.Connect()
  this.SendMessage(message)
  this.CloseConnection()
}

我可以在没有 transport.CloseConnection() 的情况下使用 transport.SendMessage(message) 的实现吗? 因此我将保存会话并继续使用它。

SMTP 会支持吗?会话将保留多长时间?

嗯,它似乎工作正常。 而不是使用

Transport.send(message);  

使用:

Transport transport = message.getTransport(address);
try{
   transport.connect();
}catch (Exception e){
   //already connected
}
transport.sendMessage(message);