diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java
index e58eab3..dd2a396 100644
--- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java
+++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java
@@ -251,7 +251,7 @@
                     pipeline.addLast(EXECUTION_HANDLER, ehandler);
 
                 }
-                pipeline.addLast(REQUEST_DECODER, new ImapRequestFrameDecoder(decoder, inMemorySizeLimit, literalSizeLimit));
+                pipeline.addLast(REQUEST_DECODER, new ImapRequestFrameDecoder(decoder, inMemorySizeLimit, literalSizeLimit, maxLineLength));
 
                 pipeline.addLast(CORE_HANDLER, createCoreHandler());
                 return pipeline;
diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
index d5e72c4..a772505 100644
--- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
+++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
@@ -26,6 +26,7 @@
 import java.nio.file.Files;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Optional;
 
 import org.apache.james.imap.api.ImapMessage;
 import org.apache.james.imap.api.ImapSessionState;
@@ -47,20 +48,36 @@
  * {@link FrameDecoder} which will decode via and {@link ImapDecoder} instance
  */
 public class ImapRequestFrameDecoder extends FrameDecoder implements NettyConstants {
+    public static final int UNAUTHENTICATE_LITERAL_MAX_SIZE = Optional.ofNullable(System.getProperty("james.imap.unauthenticated.literal.max.size"))
+        .map(Integer::parseInt)
+        .orElse(8192);
 
     private final ImapDecoder decoder;
     private final int inMemorySizeLimit;
     private final int literalSizeLimit;
+    private final int maxFrameLength;
     @VisibleForTesting
     static final String NEEDED_DATA = "NEEDED_DATA";
     private static final String STORED_DATA = "STORED_DATA";
     private static final String WRITTEN_DATA = "WRITTEN_DATA";
     private static final String OUTPUT_STREAM = "OUTPUT_STREAM";
 
-    public ImapRequestFrameDecoder(ImapDecoder decoder, int inMemorySizeLimit, int literalSizeLimit) {
+    public ImapRequestFrameDecoder(ImapDecoder decoder, int inMemorySizeLimit, int literalSizeLimit, int maxFrameLength) {
         this.decoder = decoder;
         this.inMemorySizeLimit = inMemorySizeLimit;
         this.literalSizeLimit = literalSizeLimit;
+        this.maxFrameLength = maxFrameLength;
+    }
+
+    private int literalSizeLimit(ImapSession session) {
+        if (session == null) {
+            return UNAUTHENTICATE_LITERAL_MAX_SIZE;
+        }
+        if (session.getState() == ImapSessionState.NON_AUTHENTICATED
+            || session.getState() == ImapSessionState.LOGOUT) {
+            return UNAUTHENTICATE_LITERAL_MAX_SIZE;
+        }
+        return literalSizeLimit;
     }
 
     @Override
@@ -79,6 +96,7 @@
         // check if we failed before and if we already know how much data we
         // need to sucess next run
         Map<String, Object> attachment = (Map<String, Object>) ctx.getAttachment();
+        ImapSession session = (ImapSession) attributes.get(channel);
         int size = -1;
         if (attachment.containsKey(NEEDED_DATA)) {
             retry = true;
@@ -146,14 +164,12 @@
 
             } else {
 
-                reader = new NettyImapRequestLineReader(channel, buffer, retry, literalSizeLimit);
+                reader = new NettyImapRequestLineReader(channel, buffer, retry, literalSizeLimit(session), maxFrameLength);
             }
         } else {
-            reader = new NettyImapRequestLineReader(channel, buffer, retry, literalSizeLimit);
+            reader = new NettyImapRequestLineReader(channel, buffer, retry, literalSizeLimit(session), maxFrameLength);
         }
 
-        ImapSession session = (ImapSession) attributes.get(channel);
-
         // check if the session was removed before to prevent a harmless NPE. See JAMES-1312
         // Also check if the session was logged out if so there is not need to try to decode it. See JAMES-1341
         if (session != null && session.getState() != ImapSessionState.LOGOUT) {
diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapRequestLineReader.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapRequestLineReader.java
index 8cfed94..9a74234 100644
--- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapRequestLineReader.java
+++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapRequestLineReader.java
@@ -44,11 +44,13 @@
     private final ChannelBuffer buffer;
     private int read = 0;
     private final int maxLiteralSize;
+    private final int maxFrameLength;
 
-    public NettyImapRequestLineReader(Channel channel, ChannelBuffer buffer, boolean retry, int maxLiteralSize) {
+    public NettyImapRequestLineReader(Channel channel, ChannelBuffer buffer, boolean retry, int maxLiteralSize, int maxFrameLength) {
         super(channel, retry);
         this.buffer = buffer;
         this.maxLiteralSize  = maxLiteralSize;
+        this.maxFrameLength = maxFrameLength;
     }
     
 
@@ -68,6 +70,9 @@
             if (buffer.readable()) {
                 next = buffer.readByte();
                 read++;
+                if (read > maxFrameLength) {
+                    throw new DecodingException(HumanReadableText.FAILED, "Line length exceeded.");
+                }
             } else {
                 throw new NotEnoughDataException();
             }
diff --git a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoderTest.java b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoderTest.java
index 8dffa0b..55bd2c3 100644
--- a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoderTest.java
+++ b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoderTest.java
@@ -43,7 +43,8 @@
         testee = new ImapRequestFrameDecoder(
             mock(ImapDecoder.class),
             12,
-            18);
+            18,
+            8192);
     }
 
     @Test
