Google App Engine中包含的javamail版本

时间:2016-08-31 08:13:54

标签: java google-app-engine javamail

某些类的 JavaMail 包含在 appengine-api-1.0-sdk jar(javax.mail)中,但不是全部。我需要从 JavaMail 中添加更多类(例如com.sun.mail.imap)。添加 JavaMail 版本1.5.6时,我遇到了兼容性问题。添加 JavaMail 版本1.4.7时,到目前为止似乎工作正常。

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

Google App Engine jar上优先使用 JavaMail jar时,我会收到安全例外情况。使用比 Google App Engine 中包含的更新的 JavaMail 有什么技巧吗? Google App Engine 中的 JavaMail 是否会更新?它'伤心错过的功能和新版本的错误修正。

1 个答案:

答案 0 :(得分:0)

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

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

您可以引用JavaMail CHANGES.txtIssue Trackerthe 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);