JavaMail API不支持移动数据,但在Wifi

时间:2016-08-08 15:50:33

标签: java android email javamail

我现在处于非常奇怪的境地。有关完整代码,请在此处查看:http://javapapers.com/android/android-email-app-with-gmail-smtp-using-javamail/

我正在使用此代码发送电子邮件。但问题是未来。在WIFI上使用此方法发送邮件时,我有100%的成功率。但是当我使用移动数据(4G)时,我的成功率约为30%。在某些设备上,它根本不起作用。 4G连接没有问题。它没有波动。它工作正常。我在多台设备上尝试了这种Wi-Fi和移动数据。一切都表明移动数据代码存在一些问题。

目前在我的移动数据调试设备上,代码正常运行。因此我现在无法发布logcat。但很多时候它甚至不适用于调试设备。但是现在它正在工作,我无法发布logcat。最有可能的是,这段代码中存在一些问题:

 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){

    }

在阅读其他人的帖子时,我发现代理设置可能存在一些问题。但是在代码中,我不知道在哪里可以使用Proxy.NoProxy类的东西。上面的链接中提供了完整的代码。我没有修改它(除了添加我自己的电子邮件和密码)。

这是失败的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: [cdludeubg@gmail.com]
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: cdludebug@gmail.com
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.

编辑2 在另一台设备上,我得到了logcat:

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: [cdludeubg@gmail.com]
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: cdludebug@gmail.com
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

4 个答案:

答案 0 :(得分:0)

必须是关于邮件服务器身份验证的内容。只是使用默认的Android电子邮件应用程序,我仍然无法通过Mobile Data访问我的电子邮件服务器,它是一个带有奇怪身份验证的旧服务器。仔细检查服务器端的身份验证设置。

答案 1 :(得分:0)

在我的测试中,我意识到当我将手机的首选网络类型从4G更改为3G时,它可以工作,然后当我从3G更改为4G时,它会继续工作。

答案 2 :(得分:0)

在我的应用程序中,我解决了这个问题,我认为这是smtp.gmail.com的一个问题。

解决方案:

创建Outlook电子邮件并添加以下配置:

  • SMTP服务器名称smtp-mail.outlook.com

  • SMTP端口587

  • SMTP加密方法TLS

        try {
    
        String prot = "smtp";
        final String user = "MyEmailAdress@outlook.com";
        String to = "anotherEmail@outlook.com";
        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);
    }
    

答案 3 :(得分:0)

我遇到了这个问题,我的应用程序通过网络数据连接时无法通过Gmail发送电子邮件,但在WiFi上工作正常。

Google拒绝了该新IP地址的可疑信息。

选项1:

要清除验证码,请在登录您的Google帐户时转到以下链接:https://accounts.google.com/DisplayUnlockCaptcha

选项2:

在您的Google帐户上启用两步验证。然后使用以下链接生成应用程序专用密码(ASP)。用ASP替换代码中常用的gmail密码。

https://accounts.google.com/IssuedAuthSubTokens?hide_authsub=1

(在第一个下拉菜单中选择“邮件”选项,并在第二个下拉菜单中使用“其他”选项来插入您的应用名称或您喜欢的任何其他名称)