发送电子邮件时,应用程序在AsyncTask中的doInBackground中的catch中崩溃

时间:2014-03-06 12:59:55

标签: android android-asynctask

我的问题是,我发送服务的应用程序在发送电子邮件时在AsynkTask的doInBackground中的catch块中崩溃。它一切顺利,但是例如当我得到连接超时或其他连接错误时,我可以捕获异常,但服务崩溃并在几分钟后重新启动。在这种情况下,在启动AsynkTask之前检查互联网连接是没有用的。

发送电子邮件的AsynkTask由AlarmManager启动。

为什么应用/服务结束/崩溃?我正在捕捉异常!谁能给我一个提示?

以下是相关代码:

private class LongOperation extends AsyncTask<Message, Void, String> {

    @Override
    protected String doInBackground(Message... msg) {
        try {
            Transport.send(msg[0]);
            log.info("### - Mail sent");
        } catch (Exception e) {
            String a = e.getMessage();
            Log.e("SendMail_Loc", "Error: " + a);
            log.error("Error: " + a,e);
        }
        return "Executed";
    }      

    @Override
    protected void onPostExecute(String result) {
    }

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected void onProgressUpdate(Void... values) {
    }
}   

这是个例外:

 2014-03-06 11:13:00,252 -  [ERROR::de.egi.location.track.SendMail::de.egi.location.track.SendMail$LongOperation] - Error: Could not connect to SMTP host: smtp.strato.de, port: 25
   javax.mail.MessagingException: Could not connect to SMTP host: smtp.xxxx.de, port: 25;
  nested exception is:
    java.net.ConnectException: failed to connect to smtp.xxxx.de/xx.xxx.145.133 (port 25):  connect failed: ETIMEDOUT (Connection timed out)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
    at javax.mail.Service.connect(Service.java:310)
    at javax.mail.Service.connect(Service.java:169)
    at javax.mail.Service.connect(Service.java:118)
    at javax.mail.Transport.send0(Transport.java:188)
    at javax.mail.Transport.send(Transport.java:118)
    at de.egi.location.track.SendMail$LongOperation.doInBackground(SendMail.java:91)
    at de.egi.location.track.SendMail$LongOperation.doInBackground(SendMail.java:1)
    at android.os.AsyncTask$2.call(AsyncTask.java:287)
    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
    at java.lang.Thread.run(Thread.java:841)
Caused by: java.net.ConnectException: failed to connect to smtp.xxxx.de/xx.xx.145.133 (port 25): connect failed: ETIMEDOUT (Connection timed out)
    at libcore.io.IoBridge.connect(IoBridge.java:114)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
    at java.net.Socket.connect(Socket.java:842)
    at java.net.Socket.connect(Socket.java:785)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)
    ... 14 more
Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
    at libcore.io.Posix.connect(Native Method)
    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
    at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
    at libcore.io.IoBridge.connect(IoBridge.java:112)
    ... 21 more

0 个答案:

没有答案