【问题标题】:JavaMail - Can't load SASL authenticatorJavaMail - 无法加载 SASL 身份验证器
【发布时间】:2015-05-14 02:45:02
【问题描述】:

尝试在 Android 应用程序中使用 JavaMail 连接到 imap 商店时出现以下错误:

IMAP 调试:无法加载 SASL 身份验证器:java.lang.NoSuchMethodException:[class com.sun.mail.imap.protocol.IMAPProtocol,class java.lang.String,class java.util.Properties,boolean,class java.io.PrintStream, 类 java.lang.String]

我遇到的问题与此处描述的问题相同: ProGuard java.lang.NoSuchMethodException

...但是将行添加到 proguard 的解决方案没有帮助。

public class OAuth2SaslClientFactory implements SaslClientFactory {
    private static final Logger logger =
    Logger.getLogger(OAuth2SaslClientFactory.class.getName());

    public static final String OAUTH_TOKEN_PROP =
      "mail.imaps.sasl.mechanisms.oauth2.oauthToken";

    public SaslClient createSaslClient(String[] mechanisms,
                                 String authorizationId,
                                 String protocol,
                                 String serverName,
                                 Map<String, ?> props,
                                 CallbackHandler callbackHandler) {
    boolean matchedMechanism = false;
    for (int i = 0; i < mechanisms.length; ++i) {
         if ("XOAUTH2".equalsIgnoreCase(mechanisms[i])) {
           matchedMechanism = true;
            break;
         }
      }
      if (!matchedMechanism) {
         logger.info("Failed to match any mechanisms");
         return null;
      }
      return new OAuth2SaslClient((String) props.get(OAUTH_TOKEN_PROP),
                            callbackHandler);
   }

   public String[] getMechanismNames(Map<String, ?> props) {
      return new String[] {"XOAUTH2"};
   }
}

public OAuth2Provider() {
      super("Google OAuth2 Provider", 1.0,
            "Provides the XOAUTH2 SASL Mechanism");
          put("SaslClientFactory.XOAUTH2",
                  "com.app.OAuth2SaslClientFactory");
}

【问题讨论】:

    标签: android oauth jakarta-mail sasl


    【解决方案1】:

    我无法准确确定 proguard 中缺少什么,但我确实通过在 proguard 文件中添加以下行来结束项目的运行:

    -dontshrink
    

    【讨论】:

      【解决方案2】:

      您是否尝试过使用 JavaMail 1.5.2,其中包括 built-in OAuth2 support,因此不需要您在上面包含的任何代码?

      【讨论】:

      • 是的,我试过了。它似乎不适用于 Android,我发现的所有帖子都说同样的话,你需要自己支持 SASL,因为你不能在 Android 上使用 1.5.2。
      • Android 不兼容 Java 真可惜,对吧?
      • 是的,这有点令人沮丧。有关在 Android 中解决此问题的任何建议?
      • 抱歉,不,我不使用 Android。
      猜你喜欢
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 2018-06-23
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多