Java邮件在棉花糖及更高版本上失败,但在棒棒糖及更高版本上成功

时间:2018-11-19 09:27:56

标签: android smtp javamail

我构建了一个应用程序,以通过this的指南通过Java邮件API发送短消息。它适用于我的android 5.0.2手机。但是,当我将其部署到android 6或更高版本时,它始终无法通过身份验证。 与上述指南相比,邮件设置没有特殊更改。我列出了其中一些信息。

    public MailSender(String user, String password, String mailhost) {
    this.user = user;
    this.password = password;
    Log.i("SMTP_mail", mailhost);

    Properties props = new Properties();
    props.setProperty("mail.transport.protocol", "smtp");
    props.setProperty("mail.host", mailhost);
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.password", password);
    props.put("mail.smtp.starttls.enable","true");
    props.put("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");
    props.setProperty("mail.smtp.quitwait", "false");

    session = Session.getDefaultInstance(props, this);
    session.setDebug(true);
}

此外,我还在运行时添加了来自API 23的新请求的权限检查。

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.INTERNET},
                4);
    }

AndroidManifest.xml如下:

    <uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

在JavaMail调试指南的帮助下,我收集了成功和失败的日志。
在Android 5上成功:
enter image description here

Android 6上的失败:
enter image description here

这两个日志的应用代码相同,只是平台不同。
我也注意到在android 6日志中看到了一些证书失败,但是从stackoverview搜索来看,这似乎没什么大不了的。我不确定它是否会影响任何事情。

  

E / NativeCrypto:ssl = 0x7ba1e98480 cert_verify_callback x509_store_ctx = 0x7ba1cfbc98 arg = 0x0                  ssl = 0x7ba1e98480 cert_verify_callback调用verifyCertificateChain authMethod = ECDHE_RSA
  I / System.out:gba_cipher_suite:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

有人可以帮助解决这个问题吗?这困扰了我好几天。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

向清单文件添加 INTERNET 权限。

您必须添加以下行:

<uses-permission android:name="android.permission.INTERNET" /> 

您的AndroidManifest.xml中的应用程序标记之外

答案 1 :(得分:0)

最后,我得到了为什么报告“ 535 5.7.1身份验证失败”的原因。意外的是,由于预装了配备Flyme 6.3.0.2A的魅族Note3(m3 note)设备的ime。在我更改为google ime并再次输入密码后,电子邮件可能会成功运行。出于这个原因,这太可悲了,它花费了大量的时间进行故障排除,并以一个棘手的小问题告终。

感谢所有对此票券的评论和建议。