Если кратко, то данная ошибка говорит, что размер письма отличается от ожидаемого. Такое поведение возникает, если содержимое файла письма изменилось (случайно или преднамеренно). При этом разные клиенты могут по-разному отображать это письмо: частично или вообще никак (показывать ошибку). В сети почти все варианты решения выглядят так: удалите из папки Maildir файлы dovecot.* и перезапустите dovecot (dovecot перепланирует папку и создаст заново эти файлы). Такой рецепт подойдёт, если у вас старая версия, до 2.0.X включительно. Но если у вас версия 2.1.Х, то это не поможет.
Всё дело в том, что dovecot в имя каждого письма записывает его размер:
1555601722.M516816P17651.mail,S=9677:2,RS
где суффикс S=<размер с точностью до байта> как раз и означает размер письма.
Если вы хотите избавится от ошибки, но не решить проблему, то достаточно добавить в конфигурации dovecot’a такую строку:
maildir_broken_filename_sizes=yes
Но если у вас используется сжатие (zlib_plugin), то такой вариант неприменим из-за 2-ого сжатия. Что бы правильно решить проблему – нужно высчитать размер письма с точностью до байта и переименовать его, учитывая новый размер:
1555601722.M516816P17651.mail,S=9677:2,RS) failed: Cached message size larger than expected (9677 > 9675, box=INBOX, UID=98) (read reason=) ...
# mv '1555601722.M516816P17651.mail,S=9677:2,RS' '1555601722.M516816P17651.mail,S=9675:2,RS'
Размер письма оно так же подсказывает и в логе.
А что делать, если у вас не одно такое письмо, а сотни или тысячи? Можно использовать скрипт.
PS. Обсуждение этой проблемы можете почитать здесь