diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index afd5418912f..c158367b736 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -239,12 +239,21 @@ during splitting, which may be slow." (when (nnimap-change-group group server) (with-current-buffer (nnimap-buffer) (erase-buffer) - (nnimap-wait-for-response - (nnimap-send-command - "UID FETCH %s %s" - (nnimap-article-ranges (gnus-compress-sequence articles)) - (nnimap-header-parameters)) - t) + (let ((ranges (gnus-compress-sequence articles)) + sequence) + ;; If we have a lot of ranges, split them up to avoid + ;; generating too-long lines. (The limit is 8192 octects, + ;; and this should guarantee that it's (much) shorter than + ;; that.) + (while ranges + (setq sequence + (nnimap-send-command + "UID FETCH %s %s" + (nnimap-article-ranges (seq-take ranges 200)) + (nnimap-header-parameters))) + (setq ranges (nthcdr 200 ranges))) + ;; Wait for the final one. + (nnimap-wait-for-response sequence t)) (unless (process-live-p (get-buffer-process (current-buffer))) (error "IMAP server %S closed connection" nnimap-address)) (nnimap-transform-headers)