Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google应用程序引擎中包含的javamail版本_Java_Google App Engine_Jakarta Mail - Fatal编程技术网

Google应用程序引擎中包含的javamail版本

Google应用程序引擎中包含的javamail版本,java,google-app-engine,jakarta-mail,Java,Google App Engine,Jakarta Mail,appengine-api-1.0-sdk jar(javax.mail)中包含了一些JavaMail类,但不是全部。我需要从JavaMail中添加更多的类(例如com.sun.mail.imap)。添加JavaMail 1.5.6版时,我遇到了兼容性问题。在添加JavaMail 1.4.7版时,到目前为止一切似乎都很好 谷歌应用程序引擎1.9.38版(或更新版本)中包含的JavaMail的确切版本是什么?我怎么能自己发现呢 当JavaMail jar优先于Google应用程序引擎jar时,我会

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

谷歌应用程序引擎1.9.38版(或更新版本)中包含的JavaMail的确切版本是什么?我怎么能自己发现呢


当JavaMail jar优先于Google应用程序引擎jar时,我会遇到安全异常。使用比Google应用程序引擎更新的JavaMail有什么诀窍吗?谷歌应用程序引擎中的JavaMail是否更新过?错过了新版本的功能和错误修复,这让人很难过

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

Session s = Session.getInstance(new Properties());
s.setDebug(true); //Prints the version to System.out
System.out.println(Session.class.getPackage());
您可以引用,然后查找每个版本中已修复的bug

例如,您可以判断它是否是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();
    }
}
如果mimessage.setRecipients(类型、字符串)不接受空地址:

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.");
}
如果它支持
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);

你到底得到了什么样的安全例外?这是规范1.4。但我不确定是否有来自官方JavaMail jar的服务提供商。您是否尝试过打印或记录
javax.mail.Session.class.getPackage().toString()
的结果以确定版本?@Bill Shannon:我现在注意到它仅适用于JavaMail版本1.5.6,而不适用于1.4.7:它是:“java.security.AccessControlException:拒绝访问(“java.lang.RuntimePermission”“setFactory”)”我认为这是合理的,因为GoogleAppEngine是一个受限环境,这是关于套接字的,所以与套接字相关的部分可以以不同的方式实现。然而,这并不能解释为什么我在替换为JavaMail 1.4.7时无法观察到它。@jmehrens:仅对于Google应用程序引擎,它只是“###package javax.mail”。当替换为1.4.7时,我得到“####package javax.mail,JavaMail(TM)API设计规范,版本1.4”,当替换为1.5.6时,得到的是“##package javax.mail,JavaMail(TM)API设计规范,版本1.5”。@xberger这里是另一个尝试确定版本的示例:
Properties=new Properties();道具。放置(“邮件。发件人”,“一四”four@or.newer");         sessions=Session.getInstance(props);对于(javax.mail.Provider p:s.getProviders()){System.out.println(p.toString());}新的MIMessage(s.setFrom()//NPE如果小于1.4.4,则表示异常