diff --git a/app/src/main/java/eu/faircode/email/ConnectionHelper.java b/app/src/main/java/eu/faircode/email/ConnectionHelper.java index 0658c65c55..8f36c2bd4a 100644 --- a/app/src/main/java/eu/faircode/email/ConnectionHelper.java +++ b/app/src/main/java/eu/faircode/email/ConnectionHelper.java @@ -496,6 +496,19 @@ public class ConnectionHelper { return false; } + static boolean isAborted(Throwable ex) { + while (ex != null) { + String msg = ex.getMessage(); + if (msg != null && + (msg.contains("Connection reset by peer") || + msg.contains("Connection closed by peer"))) + return true; + ex = ex.getCause(); + } + + return false; + } + static boolean isMaxConnections(Throwable ex) { while (ex != null) { if (isMaxConnections(ex.getMessage())) diff --git a/app/src/main/java/eu/faircode/email/EmailService.java b/app/src/main/java/eu/faircode/email/EmailService.java index a0c7ab4c54..29e2bb45a3 100644 --- a/app/src/main/java/eu/faircode/email/EmailService.java +++ b/app/src/main/java/eu/faircode/email/EmailService.java @@ -37,6 +37,7 @@ import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; import com.sun.mail.gimap.GmailSSLProvider; +import com.sun.mail.iap.ConnectionException; import com.sun.mail.iap.ProtocolException; import com.sun.mail.imap.IMAPFolder; import com.sun.mail.imap.IMAPStore; @@ -592,6 +593,9 @@ public class EmailService implements AutoCloseable { if (ex.getMessage() != null && ex.getMessage().contains("Command Error. 10")) throw new AuthenticationFailedException(context.getString(R.string.title_service_error10), ex); + if (ConnectionHelper.isAborted(ex)) + throw new MessagingException("The server or network actively aborted the connection", ex); + if (purpose == PURPOSE_CHECK) { if (port == 995 && !("pop3".equals(protocol) || "pop3s".equals(protocol))) throw new MessagingException(context.getString(R.string.title_service_port), ex);