Почта Java терпит неудачу на Зефире и выше, но успешно на Lollipop и ниже - PullRequest
0 голосов
/ 19 ноября 2018

Я создаю приложение для отправки короткого сообщения через почтовый API Java с руководством из this .Это работает на моем телефоне 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 = 0x7ba1e984_Chall_Signergba_cipher_suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

Может ли кто-нибудь помочь с этой проблемой?Это беспокоит меня в течение нескольких дней.Ваша помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Наконец, я получаю причину, по которой «535 5.7.1 Аутентификация не удалась».Это так неожиданно из-за предустановленного устройства Meizu Note3 (m3 note) с Flyme 6.3.0.2A.После того, как я перехожу на google ime и снова набираю пароль, электронная почта может работать успешно.По этой причине так печально, что на устранение неисправностей уходит много времени и заканчивается таким хитрым крошечным пунктом.

Спасибо всем парням за комментарии и предложения по этому билету.

0 голосов
/ 19 ноября 2018

Добавьте разрешение ИНТЕРНЕТ в файл манифеста.

Вы должны добавить эту строку:

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

вне тега приложения в вашем AndroidManifest.xml

...