Android Javamail:接收不良的电子邮件丢失

时间:2018-01-05 04:29:15

标签: android javamail signal-strength

我目前正在使用标准的javamail / jsse提供程序设置从Android应用程序中的预定义gmail帐户发送电子邮件,即:

    try{
        MimeMessage message = new MimeMessage(session);
        DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
        message.setFrom(new InternetAddress("xxxxxxxxxxxx - No Reply" +"<xxxxxxxxxx@gmail.com>"));//new InternetAddress(sender,user));
        message.setSubject(subject);
        message.setDataHandler(handler);
        if (recipients.indexOf(',') > 0)
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
        else
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
        Transport.send(message);
        return true;
    }catch(Exception e){
        Log.d("SendMail" , e.getMessage().toString());
        return false;
    }

应用在尝试发送

之前检查连接
    ConnectivityManager cm = (ConnectivityManager) mContext.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();
    return networkInfo != null && networkInfo.isConnected() && checkSignal(mContext) > 1;

并使用接收器监视连接,如果没有连接则再次尝试。

    <receiver android:name=".Modules.mod_internet_receiver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>

在大多数情况下,电子邮件都可以通过,但我注意到有些电子邮件丢失了,并且没有报告异常。我已经发现这个问题发生在信号强度较差和不断变化的区域。为了抵消,我们添加了一些原始信号电平测试,并且只尝试发送信号大于1的位置。

    try {
        final TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
        for (final CellInfo info : tm.getAllCellInfo()) {
            if (info instanceof CellInfoGsm) {
                final CellSignalStrengthGsm gsm = ((CellInfoGsm) info).getCellSignalStrength();
                mSignalStrength = gsm.getLevel();
                Log.d("GSM Signal",String.valueOf(mSignalStrength));
                break;
            } else if (info instanceof CellInfoCdma) {
                final CellSignalStrengthCdma cdma = ((CellInfoCdma) info).getCellSignalStrength();
                mSignalStrength = cdma.getLevel();
                Log.d("CDMA Signal",String.valueOf(mSignalStrength));
                break;
            } else if (info instanceof CellInfoLte) {
                final CellSignalStrengthLte lte = ((CellInfoLte) info).getCellSignalStrength();
                mSignalStrength = lte.getLevel();
                Log.d("LTE Signal",String.valueOf(mSignalStrength));
                break;
            } else {
                throw new Exception("Unknown type of cell signal!");
            }
        }
    } catch (Exception e) {
        Log.e("Telephony", "Unable to obtain cell signal information", e);
        mSignalStrength = 0;
    }
    Log.d("Signal Strength",String.valueOf(mSignalStrength));
    return mSignalStrength;

这工作正常但我意识到此信号可能随时变化,因此在检查后立即发送电子邮件时,信号在发送过程中仍有可能丢失,从而导致电子邮件丢失。我想我可以在几秒钟之后添加第二次检查以查看信号是否稳定,但这些都只是确保成功的解决方法。

我已经查看了Javamail FAQ https://stackoverflow.com/a/30634257/9175763,但这不是传递失败而是连接问题。

我想知道是否有人有更好的方法来解决这个问题?

0 个答案:

没有答案
相关问题