使用 javax 邮件将已发送电子邮件保存到已发送项目文件夹

Save Sent email to sent items folder using javax mail

public static void sendEmail(String msgHeader, String msg, String emailId, String emailFrom) {
    Properties props = new Properties();
    props.put("mail.smtp.auth", "false");
    props.put("mail.debug", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", mailServer);
    props.put("mail.smtp.port", port#);
    props.put("mail.smtp.auth.mechanisms", "NTLM");
    props.put("mail.smtp.auth.ntlm.domain", domainName);

    Session session = Session.getDefaultInstance(props, null);
    try {
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(emailFrom));
        to = emailId;
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
        message.setSubject(msgHeader);

        message.setText(msg, "utf-8", "html");

        message.saveChanges();
        session.getDebug();
        Transport.send(message);
        // Copy message to "Sent Items" folder as read
        Store store = session.getStore("ntlm");
        store.connect(mailServer, emailFrom, pwd);
        Folder folder = store.getFolder("Sent Items");
        folder.open(Folder.READ_WRITE);
        message.setFlag(Flag.SEEN, true);
        folder.appendMessages(new Message[] {message});
        store.close();
    } catch (Exception ex) {
        logger.error("Error occured while sending Email !", ex);
    }
}

当我尝试执行上面的代码时,我能够发送电子邮件。问题在于保存电子邮件。我在该行收到错误 (NoSuchProviderException) 商店商店 = session.getStore("ntlm");

我有几个问题:-

  1. 电子邮件发送部分无需使用 ntlm 进行密码验证即可工作。是否可以在不验证密码的情况下将已发送的电子邮件保存到已发送邮件文件夹中。如果是那么怎么办?
  2. session.getStore 在我使用时不起作用 一种。 smtp - 异常(无效的提供者) b. ntlm - 异常 (NoSuchProviderException) 我应该在这里使用什么。

在此先感谢您的帮助。

"ntlm" 不是一种商店类型,它是一种身份验证机制。 The store types supported by JavaMail are "imap" and "pop3". 你几乎肯定想要 "imap"。就像发送一样,您需要在连接到您的 imap 服务器时提供您的用户名和密码。

此外,如果可能,请升级到 current version of JavaMail