2016-08-08 7 views
3

Ich bin gerade in einer ziemlich seltsamen Situation. Für den vollständigen Code, hier können Sie sehen: http://javapapers.com/android/android-email-app-with-gmail-smtp-using-javamail/JavaMail-API funktioniert nicht auf mobilen Daten, aber gut auf Wifi

Ich benutze diesen Code zum Senden von E-Mail-Zwecken. Aber das Problem liegt vor uns. Ich habe 100% Erfolgsquote beim Senden von E-Mails mit dieser Methode auf WIFI. Aber wenn ich Mobile Data (4G) verwende, habe ich eine Erfolgsquote von ca. 30%. Bei einigen Geräten funktioniert es überhaupt nicht. Es gibt kein Problem mit der 4G-Verbindung. Es schwankt nicht. Es funktioniert gut. Ich habe diese Wi-Fi und mobile Daten auf mehreren Geräten ausprobiert. Alles weist darauf hin, dass es ein Problem mit dem Code für mobile Daten gibt.

Derzeit auf meinem Debug-Gerät, das auf mobilen Daten ist, funktioniert der Code. Daher kann ich logcat jetzt nicht mehr posten. Aber oft funktioniert es nicht einmal auf dem Debug-Gerät. Aber jetzt, da es funktioniert, kann ich logcat nicht veröffentlichen. Wahrscheinlich ist ein Problem in diesem Code-Abschnitt:

try { 
     Transport transport = mailSession.getTransport("smtp"); 
     transport.connect(emailHost, fromEmail, fromPassword); 
     Log.i("GMail", "allrecipients: " + emailMessage.getAllRecipients()); 
     transport.sendMessage(emailMessage, emailMessage.getAllRecipients()); 
     transport.close(); 
     Log.i("GMail", "Email sent successfully."); 
    }catch (Exception e){ 

    } 

Während anderen Thread zu lesen, kam ich zu wissen, dass es möglicherweise ein Problem mit Proxy-Einstellungen sein. Aber im Code weiß ich nicht, wo ich Proxy.NoProxy Art der Sache verwenden kann. Der vollständige Code ist im obigen Link verfügbar. Ich habe das nicht geändert (außer das Hinzufügen meiner eigenen E-Mail-Adresse und meines Passworts).

Hier ist der Fehler logcat:

 08-09 19:29:54.594 9551-9551/com.parassidhu.cdlumaths I/SendMailActivity: Send Button Clicked. 
08-09 19:29:54.594 9551-9551/com.parassidhu.cdlumaths I/SendMailActivity: To List: [[email protected]] 
08-09 19:29:54.654 9551-9893/com.parassidhu.cdlumaths I/d: About to instantiate GMail... 
08-09 19:29:54.668 9551-9893/com.parassidhu.cdlumaths I/GMail: Mail server properties set. 

                   [ 08-09 19:29:54.677 9551: 9893 W/   ] 
                   Unable to open '/system/framework/WfdCommon.jar': No such file or directory 
08-09 19:29:55.000 9551-9893/com.parassidhu.cdlumaths I/GMail: toEmail: [email protected] 
08-09 19:29:55.099 9551-9893/com.parassidhu.cdlumaths I/GMail: Email Message created. 
08-09 19:29:58.393 9551-9893/com.parassidhu.cdlumaths I/Error: sendEmail: null 
08-09 19:29:58.393 9551-9893/com.parassidhu.cdlumaths I/com.downloadinformer: Mail Sent.

Edit 2 auf einem anderen Gerät, bekam ich die logcat wie:

08-10 17:44:58.911 32384-32384/com.parassidhu.cdlumaths I/SendMailActivity: Send Button Clicked. 
08-10 17:44:58.911 32384-32384/com.parassidhu.cdlumaths I/SendMailActivity: To List: [[email protected]] 
08-10 17:44:58.922 32384-1140/com.parassidhu.cdlumaths I/d: About to instantiate GMail... 
08-10 17:44:58.930 32384-1140/com.parassidhu.cdlumaths I/GMail: Mail server properties set. 
08-10 17:44:59.027 32384-1140/com.parassidhu.cdlumaths I/GMail: toEmail: [email protected] 
08-10 17:44:59.088 32384-1140/com.parassidhu.cdlumaths I/GMail: Email Message created. 
08-10 17:44:59.095 32384-1140/com.parassidhu.cdlumaths D/libc-netbsd: [getaddrinfo]: hostname=smtp.gmail.com; servname=(null); cache_mode=(null), netid=0; mark=0 
08-10 17:44:59.095 32384-1140/com.parassidhu.cdlumaths D/libc-netbsd: [getaddrinfo]: hostname=smtp.gmail.com; servname=(null); cache_mode=(null), netid=0; mark=0 
08-10 17:44:59.208 32384-1140/com.parassidhu.cdlumaths D/libc-netbsd: getaddrinfo: smtp.gmail.com get result from proxy >> 
08-10 17:44:59.219 32384-1140/com.parassidhu.cdlumaths I/System.out: [socket][0] connection smtp.gmail.com/2404:6800:4003:c00::6c:587;LocalPort=44496(0) 
08-10 17:44:59.219 32384-1140/com.parassidhu.cdlumaths I/System.out: [CDS]connect[smtp.gmail.com/2404:6800:4003:c00::6c:587] tm:90 
08-10 17:45:02.079 32384-1140/com.parassidhu.cdlumaths D/libc-netbsd: [getaddrinfo]: hostname=smtp.gmail.com; servname=(null); cache_mode=(null), netid=0; mark=0 
08-10 17:45:02.079 32384-1140/com.parassidhu.cdlumaths D/libc-netbsd: [getaddrinfo]: hostname=smtp.gmail.com; servname=(null); cache_mode=(null), netid=0; mark=0 
08-10 17:45:02.083 32384-1140/com.parassidhu.cdlumaths D/libc-netbsd: getaddrinfo: smtp.gmail.com get result from proxy >> 
08-10 17:45:02.084 32384-1140/com.parassidhu.cdlumaths I/Error: sendEmail: null 
+0

Sie müssen die Debugausgabe wirklich posten, wenn sie fehlschlägt. Und es würde helfen, wenn man charakterisieren könnte, was anders ist, wenn es versagt, oder wenn es gelingt. Verwenden Sie immer denselben Mail-Server mit demselben Benutzernamen und demselben Passwort? Fällt immer das gleiche Gerät aus oder verwenden Sie mehrere Geräte? Ist der Fehler auf Ihren Standort zurückzuführen? –

+0

Lass mich mehr versuchen Wenn ich den Logcat bekommen kann. Ich benutze den gleichen Mailserver. Derselbe Benutzername, dasselbe Passwort. Es gibt mehrere Geräte, auf denen es fehlschlägt. Dies scheint nicht im Zusammenhang mit dem Standort –

+0

Einige Anbieter in einigen Ländern blockieren Ports.Besonders bei günstigen Telefonverträgen erhalten Sie manchmal nur http/s-Ports geöffnet. Obwohl es heute nicht üblich ist, hatte ich vor ein paar Jahren ähnliche Probleme. – Thommy

Antwort

0

Es muss etwas über die Authentifizierung auf Ihrem Mail-Server sein. Mit der standardmäßigen Android-E-Mail-App kann ich immer noch nicht über Mobile Data auf meinen E-Mail-Server zugreifen, und es ist ein alter Server mit seltsamer Authentifizierung. Überprüfen Sie die Serverseite für die Authentifizierungseinstellungen.

+0

Das ist eine alternative Methode. Aber ich möchte eine Option zum Senden per Mausklick machen. Wie "Sende Daumen hoch". Dann möchte der Benutzer den E-Mail-Client nicht öffnen. Es sollte eine Ein-Klick-Sendeoption geben. Können Sie den Code einchecken und mir sagen? –

+0

Entschuldigung, ich sage Ihnen nur, was ich mit diesem Problem erlebt habe, haben Sie wirklich keinen Einblick mehr ... –

0

In meinen Tests merke ich, dass, wenn ich den bevorzugten Netzwerktyp des Telefons von 4G zu 3G ändere, es funktioniert, und wenn ich dann von 3G zu 4G ändere, funktioniert es weiter.

+0

Wir können dies nicht auf jedem Telefon jedes Benutzers durchführen –

0

In meiner App habe ich das gelöst, ich denke, es ist ein Problem mit smtp.gmail.com.

Die Lösung:

eine Outlook E-Mail zu erstellen und thease Konfigurationen setzen:

  • SMTP-Servernamen smtp-mail.outlook.com

  • SMTP-Port 587

  • SMTP-Verschlüsselungsmethode TLS

    try { 
    
        String prot = "smtp"; 
        final String user = "[email protected]"; 
        String to = "[email protected]"; 
        final String pass = "MYpassword"; 
        String mailhost = "smtp-mail.outlook.com"; 
    
        Properties props = System.getProperties(); 
        props.put("mail." + prot + ".host", mailhost); 
        props.put("mail." + prot + ".auth", "true"); 
        props.put("mail." + prot + ".starttls.enable", "true"); 
        props.put("mail." + prot + ".port", "587"); 
        props.put("mail." + prot + ".ssl.enable", "false"); 
    
        Session session = Session.getDefaultInstance(props, 
          new javax.mail.Authenticator() { 
           protected PasswordAuthentication getPasswordAuthentication() { 
            return new PasswordAuthentication(user, pass); 
           } 
          }); 
        session.setDebug(true); 
    
        Message msg = new MimeMessage(session); 
        msg.setFrom(new InternetAddress(user)); 
        msg.setRecipients(Message.RecipientType.TO, 
          InternetAddress.parse(to, false)); 
    
        msg.setSubject("TESTE ENVIO EMAIL"); 
    
        msg.setText("Teste de envio de email conteudo"); 
    
        msg.setHeader("X-Mailer", user); 
        msg.setSentDate(new Date()); 
    
        SMTPTransport t = 
          (SMTPTransport) session.getTransport(prot); 
    
        t.connect(mailhost, user, pass); 
    
        t.sendMessage(msg, msg.getAllRecipients()); 
        t.close(); 
    
        Log.d("envio de email", "enviado"); 
    } catch (Exception e) { 
        Log.e("Erro", "actionbt1", e); 
    } 
    
+0

Hat es für Sie funktioniert? –

Verwandte Themen