Найти в Дзене
knowledge base

Решение проблемы "line is not ended with EOL" в почтовом ящике пользователя в CommunigatePro

Появился у меня интересный кейс, делюсь, м.б. кому поможет (ситуация редка, поэтому описана в интернетах плохо).
У пользователя могут пропасть все письма в папке INBOX, письма в остальных папках отображаться и открываться будут. При попытке отправить такому пользователю письмо, сервер ответит сообщением: Failed to deliver to '<123@company.com>'
LOCAL module(account 123) reports:
last mailbox line is not ended with EOL
Это означает, что какие то файлы в папке /var/CommuniGate/Accounts/username.macnt/INBOX.mslc/ битые, самый простой вариант решения, откатить этот ящик из архива, но если вдруг актуального архива нет под рукой, то можно найти и поудалять битые файлы. Найти битый файл можно по логам сервера, перед просмотром лога, нужно на битый аккаунт отправить письмо, заходим в Наблюдение=>Журналы=>Сервер и кликаем на актуальную дату, появится выдержка лога за несколько последних минут. в данном куске лога ищем строку, содержащую "line is not ended with EOL", можно прям использовать те

Появился у меня интересный кейс, делюсь, м.б. кому поможет (ситуация редка, поэтому описана в интернетах плохо).
У пользователя могут пропасть все письма в папке INBOX, письма в остальных папках отображаться и открываться будут. При попытке отправить такому пользователю письмо, сервер ответит сообщением:

Failed to deliver to '<123@company.com>'
LOCAL module(account 123) reports:
last mailbox line is not ended with EOL

Это означает, что какие то файлы в папке /var/CommuniGate/Accounts/username.macnt/INBOX.mslc/ битые, самый простой вариант решения, откатить этот ящик из архива, но если вдруг актуального архива нет под рукой, то можно найти и поудалять битые файлы. Найти битый файл можно по логам сервера, перед просмотром лога, нужно на битый аккаунт отправить письмо, заходим в Наблюдение=>Журналы=>Сервер и кликаем на актуальную дату, появится выдержка лога за несколько последних минут.

в данном куске лога ищем строку, содержащую "line is not ended with EOL", можно прям использовать текстовый поиск в браузере (Ctrl + f)
Искомые строки будут выглядеть как то так

00:27:17.637 0 MAILBOX(123/INBOX) [102] parse-reading failed. Error Code=last mailbox line is not ended with EOL
00:27:17.637 1 MAILBOX(123/INBOX) [102] failed to parse. Error Code=last mailbox line is not ended with EOL

Цифра в квадратных скобках - это номер файла data, в папке INBOX, который повреждён, из примера получается, что наш файл data102, удаляем его и пробуем зайти в ящик. Очень вероятно, что битых файлов несколько, тогда процедуру нужно будет повторять, до момента отображения писем в INBOX.
В моём случае пришлось удалить 8 файлов, у нас был архив, и мы сравнили объемы ящика восстановленного из архива и способом описанным выше, разница получилась в 6Гб (было 20, стало 14), но это лучше, чем потерять всё, если вдруг окажется, что архивов нет под рукой.
В интернетах говорят, что битый файл исправляется командой
echo >> dataxxx, я это не проверял, и по мне, выглядит команда сомнительно. Возможно, при повторной проблеме, до момента восстановления из архива, попробую эту команду, по результату отпишусь сюда.