JavaMail API不适用于移动数据,但适用于Wifi

JavaMail API不适用于移动数据,但适用于Wifi,java,android,email,jakarta-mail,Java,Android,Email,Jakarta Mail,我现在的处境很奇怪。有关完整代码,请参见: 我使用此代码发送电子邮件。但问题就在前面。在WIFI上使用此方法发送邮件时,我的成功率为100%。但当我使用移动数据(4G)时,我的成功率约为30%。在某些设备上,它根本不起作用。4G连接没有问题。它没有波动。很好用。我在多台设备上尝试了Wi-Fi和移动数据。一切都表明移动数据上的代码存在一些问题 目前,在我的调试设备上,这是移动数据,代码正在工作。因此,我现在不能发布logcat。但很多时候,它甚至不能在调试设备上工作。但现在既然它起作用了,我不能发

我现在的处境很奇怪。有关完整代码,请参见:

我使用此代码发送电子邮件。但问题就在前面。在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){

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

以下是故障日志:

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. 08-09 19:29:54.594 9551-9551/com.parassidhu.cdlumath I/SendMailActivity:单击发送按钮。 08-09 19:29:54.594 9551-9551/com.parassidhu.cdlumath I/SendMailActivity:要列出:[cdludeubg@gmail.com] 08-09 19:29:54.654 9551-9893/com.parassidhu.cdlumath I/d:即将实例化GMail。。。 08-09 19:29:54.668 9551-9893/com.parassidhu.cdlumath I/GMail:邮件服务器属性集。 [08-09 19:29:54.6779551:9893 W/] 无法打开“/system/framework/WfdCommon.jar”:没有这样的文件或目录 08-09 19:29:55.000 9551-9893/com.parassidhu.cdlumath I/GMail:toEmail:cdludebug@gmail.com 08-09 19:29:55.099 9551-9893/com.parassidhu.cdlumath I/GMail:已创建电子邮件。 08-09 19:29:58.393 9551-9893/com.parassidhu.cdlumath I/错误:sendmail:null 08-09 19:29:58.393939551-9893/com.parassidhu.cdlumath I/com.download告密者:邮件已发送。 编辑2 在另一台设备上,我得到的日志是:

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 08-10 17:44:58.911 32384-32384/com.parassidhu.cdlumath I/sendmail活动:单击发送按钮。 08-10 17:44:58.911 32384-32384/com.parassidhu.cdlumath I/SendMailActivity:要列出:[cdludeubg@gmail.com] 08-10 17:44:58.922 32384-1140/com.parassidhu.cdlumath I/d:即将实例化GMail。。。 08-10 17:44:58.930 32384-1140/com.parassidhu.cdlumath I/GMail:邮件服务器属性集。 08-10 17:44:59.027 32384-1140/com.parassidhu.cdlumath I/GMail:toEmail:cdludebug@gmail.com 08-10 17:44:59.088 32384-1140/com.parassidhu.cdlumath I/GMail:已创建电子邮件。 08-10 17:44:59.095 32384-1140/com.parassidhu.cdlumath D/libc netbsd:[getaddrinfo]:hostname=smtp.gmail.com;servname=(null);cache_mode=(null),netid=0;马克=0 08-10 17:44:59.095 32384-1140/com.parassidhu.cdlumath D/libc netbsd:[getaddrinfo]:hostname=smtp.gmail.com;servname=(null);cache_mode=(null),netid=0;马克=0 08-10 17:44:59.208 32384-1140/com.parassidhu.cdlumath D/libc netbsd:getaddrinfo:smtp.gmail.com从代理获取结果>> 08-10 17:44:59.219 32384-1140/com.parassidhu.cdlumath I/System.out:[socket][0]连接smtp.gmail.com/2404:6800:4003:c00::6c:587;LocalPort=44496(0) 08-10 17:44:59.219 32384-1140/com.parassidhu.cdlumath 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.cdlumath D/libc netbsd:[getaddrinfo]:hostname=smtp.gmail.com;servname=(null);cache_mode=(null),netid=0;马克=0 08-10 17:45:02.079 32384-1140/com.parassidhu.cdlumath D/libc netbsd:[getaddrinfo]:hostname=smtp.gmail.com;servname=(null);cache_mode=(null),netid=0;马克=0 08-10 17:45:02.083 32384-1140/com.parassidhu.cdlumath D/libc netbsd:getaddrinfo:smtp.gmail.com从代理获取结果>> 08-10 17:45:02.084 32384-1140/com.parassidhu.cdlumath I/错误:sendmail:null
一定是关于邮件服务器上的身份验证。仅仅使用默认的android电子邮件应用程序,我仍然无法通过移动数据访问我的电子邮件服务器,而且它是一个具有奇怪身份的旧服务器。仔细检查服务器端的身份验证设置。

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

在我的应用程序中,我解决了这个问题,我认为这是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);
    }
    

我的应用程序在通过网络数据连接时没有通过Gmail发送电子邮件,但在WiFi上工作正常

谷歌拒绝接受新的IP地址,理由是该地址可疑

备选案文1:

要清除验证码,请在登录到您的Google帐户时转到此链接:

备选案文2:

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


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

这是另一种方法。但我想做一个点击发送选项。比如“竖起大拇指”。然后用户不想打开电子邮件客户端。应该有一个点击发送选项。你能签入代码并告诉我吗?对不起,我只是告诉你我在这个问题上的经历,没有更多的见解…你真的需要在调试失败时发布调试输出。如果你能描述出失败和成功时的区别,这会有所帮助。你以前是吗