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

标签 java android email jakarta-mail

我现在的处境很奇怪。有关完整代码,您可以在此处查看: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 之类的东西。上面的链接中提供了完整的代码。我没有修改它(除了添加我自己的电子邮件和密码)。

这是失败日志:

 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

最佳答案

它一定是关于您的邮件服务器上的身份验证的。仅使用默认的 android 电子邮件应用程序,我仍然无法通过移动数据访问我的电子邮件服务器,而且它是一个具有奇怪身份验证的旧服务器。仔细检查服务器端的身份验证设置。

关于JavaMail API 不适用于移动数据但适用于 Wifi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38833574/

相关文章:

android - 如何从已编译的二进制文件 (.so) 中删除字符串

java - 使用 Java GUI 发送电子邮件 : Not working

java - 使用 SendGrid 在 Heroku 中发送邮件

javascript - SpringMVC - 如何仅在用户注销时清除缓存

java - 如何从Kafka Topic获取记录总数并保存到HDFS中?

java - 多点触摸事件的问题

android - 是否有关于在平板电脑上使用手势控制动画的教程/代码示例?

java - EMS性能问题

android - 如何在 SharedPreferences 中存储 ArrayList<HashMap<String, String>> ?

java - 即使调用 file.delete() 方法,图像也不会被删除