Google App Engine 中包含的 javamail 版本

Version of javamail included in Google App Engine

JavaMail 的一些 类 包含在 appengine-api-1.0-sdk jar (javax.mail),但不是全部。我需要从 JavaMail 添加一些 类(例如 com.sun.mail.imap)。添加 JavaMail 版本 1.5.6 时出现兼容性问题。添加 JavaMail 版本 1.4.7 时,到目前为止一切正常。

JavaMail 的 Google App Engine 版本 1.9.38(或更高版本)中包含什么确切版本?我怎样才能自己找到?

JavaMail jar 优先于 Google App Engine jar 时,出现安全异常。使用比 Google App Engine 中包含的更新的 JavaMail 有什么技巧吗? JavaMailGoogle App Engine 中是否有更新?很遗憾错过新版本的功能和错误修复。

最常见的方法是启用调试或从包中读取。

Session s = Session.getInstance(new Properties());
s.setDebug(true); //Prints the version to System.out
System.out.println(Session.class.getPackage());

您可以参考 JavaMail CHANGES.txt, Issue Tracker and the repository 然后查找每个版本中已修复的错误。

例如,您可以判断它是否 JavaMail 1.4.4 MimeMessage.setFrom 有连锁原因:

try {
    Properties props = new Properties();
    props.put("mail.from", "one four four@@or.newer");
    Session s = Session.getInstance(props);
    new MimeMessage(s).setFrom();
} catch (MessagingException me) {
    Throwable cause = me.getNextException();
    if (cause == null) {
        System.err.println("JavaMail 1.4.3 or older.");
    } else if (cause instanceof AddressException) {
        System.err.println("JavaMail 1.4.4 or newer.");
    } else {
        me.printStackTrace();
    }
}

JavaMail 1.4.5 如果 MimeMessage.setRecipients(type, String) 确实接受空地址:

try {
    Properties props = new Properties();
    Session s = Session.getInstance(props);
    new MimeMessage(s).setRecipients(Message.RecipientType.TO, (String) null);
    System.err.println("JavaMail 1.4.5 or newer.");
} catch (NullPointerException me) {
    System.err.println("JavaMail 1.4.4 or older.");
}

JavaMail 1.4.6如果支持java.util.logging:

Session s = Session.getInstance(props);
Logger.getLogger("javax.mail").addHandler(new Handler() {

    @Override
    public void publish(LogRecord record) {
        System.out.println(new SimpleFormatter().format(record));
    }

    @Override
    public void flush() {
    }

    @Override
    public void close() {
    }
});
s.setDebug(true);