diff --git b/app/src/main/java/com/sun/mail/imap/IMAPStore.java a/app/src/main/java/com/sun/mail/imap/IMAPStore.java
index 929e82d33..93aa05e5f 100644
--- b/app/src/main/java/com/sun/mail/imap/IMAPStore.java
+++ a/app/src/main/java/com/sun/mail/imap/IMAPStore.java
@@ -887,18 +887,26 @@ public class IMAPStore extends Store
 		continue;
 	    }
 
-	    if (m.equals("PLAIN"))
-		p.authplain(authzid, user, password);
-	    else if (m.equals("LOGIN"))
-		p.authlogin(user, password);
-	    else if (m.equals("NTLM"))
-		p.authntlm(authzid, user, password);
-	    else if (m.equals("XOAUTH2"))
-		p.authoauth2(user, password);
-	    else {
-		logger.log(Level.FINE, "no authenticator for mechanism {0}", m);
-		continue;
-	    }
+	    try {
+			if (m.equals("PLAIN"))
+				p.authplain(authzid, user, password);
+			else if (m.equals("LOGIN"))
+				p.authlogin(user, password);
+			else if (m.equals("NTLM"))
+				p.authntlm(authzid, user, password);
+			else if (m.equals("XOAUTH2"))
+				p.authoauth2(user, password);
+			else {
+				logger.log(Level.FINE, "no authenticator for mechanism {0}", m);
+				continue;
+			}
+		} catch (ProtocolException ex) {
+			if (m.equals("PLAIN") || m.equals("LOGIN")) {
+				eu.faircode.email.Log.i("Falling back to classic LOGIN");
+				p.authclassic(user, password);
+			} else
+				throw ex;
+		}
 	    return;
 	}
 
diff --git b/app/src/main/java/com/sun/mail/imap/protocol/IMAPProtocol.java a/app/src/main/java/com/sun/mail/imap/protocol/IMAPProtocol.java
index a8a88b6c0..ff300bbfd 100644
--- b/app/src/main/java/com/sun/mail/imap/protocol/IMAPProtocol.java
+++ a/app/src/main/java/com/sun/mail/imap/protocol/IMAPProtocol.java
@@ -627,6 +627,59 @@ public class IMAPProtocol extends Protocol {
 	authenticated = true;
     }
 
+	public synchronized void authclassic(String u, String p)
+			throws ProtocolException {
+		List<Response> v = new ArrayList<>();
+		String tag = null;
+		Response r = null;
+		boolean done = false;
+
+		try {
+
+			if (noauthdebug && isTracing()) {
+				logger.fine("LOGIN command trace suppressed");
+				suspendTracing();
+			}
+
+			try {
+				Argument arg = new Argument();
+				arg.writeNString(u);
+				arg.writeNString(p);
+				tag = writeCommand("LOGIN", arg);
+			} catch (Exception ex) {
+				r = Response.byeResponse(ex);
+				done = true;
+			}
+
+			while (!done) {
+				try {
+					r = readResponse();
+					if (r.isTagged() && r.getTag().equals(tag))
+						done = true;
+					else if (r.isBYE()) // outta here
+						done = true;
+				} catch (Exception ioex) {
+					r = Response.byeResponse(ioex);
+					done = true;
+				}
+				v.add(r);
+			}
+
+		} finally {
+			resumeTracing();
+		}
+
+		Response[] responses = v.toArray(new Response[v.size()]);
+
+		handleCapabilityResponse(responses);
+		notifyResponseHandlers(responses);
+
+		if (noauthdebug && isTracing())
+			logger.fine("LOGIN command result: " + r);
+		handleLoginResult(r);
+		setCapabilities(r);
+		authenticated = true;
+	}
 
     /**
      * The AUTHENTICATE command with AUTH=PLAIN authentication scheme.