Категории

Скрипт автоматического удаление проблемных битых писем в dovecot

12.08.2025 10:25 | коды из категории: Linux

Ошибка UID SORT: полезный скрипт для поиска битых писем в давкоте. но вроде давкот сами пишет каки еписьма битые при индексации

про Скрипт автоматического удаление проблемных битых писем в dovecot

скрипт для поиска битых писем давкот и удаление индексов с перестройкой и удаление битых писем.
Предистория такая. посыпался диск с почтой (рейда естественно нет) восстановил остатки с помощью rsync и в папке оказались битые письма. когда заходишь в roundcube то индекс не полные и ругается типо Ошибка сервера: UID SORT: Internal error occurred. Refer to server log for more information. [2025-08-11 09:43:19] (0.040 + 0.000 + 0.039 secs).
вот оказались битые письма. скриптик для поиска и удаления битых писем и перестрйоке индексов

#!/bin/bash

# === НАСТРОЙКИ ===
USER_MAIL_DIR="/mnt/mail/domen.ru/user@domen.ru"
USER_EMAIL="user@domen.ru"

# Лог
LOGFILE="/tmp/fix-user-$USER_EMAIL.log"
echo "Чистим почту для: $USER_EMAIL ($(date))" > "$LOGFILE"

# === 1. Поиск и удаление битых писем в cur/ ===
echo "🔍 Ищем битые письма в $USER_MAIL_DIR/cur/" >> "$LOGFILE"

find "$USER_MAIL_DIR/cur" -type f -name "*S=*" | while read file; do
    declared=$(echo "$file" | grep -o 'S=[0-9]*' | cut -d= -f2 2>/dev/null)
    if [ -z "$declared" ]; then continue; fi

    actual=$(stat -c%s "$file" 2>/dev/null)
    if [ -z "$actual" ]; then continue; fi

    # Если реальный размер < 80% от заявленного — удаляем
    threshold=$((declared * 8 / 10))
    if [ $actual -lt $threshold ]; then
        echo "❌ Подозрительное письмо: $file"
        echo "   Заявлено: $declared, Реально: $actual (<80%)" >> "$LOGFILE"
        rm -f "$file" && echo "   [УДАЛЁН] $file" >> "$LOGFILE"
    fi
done
# === 2. Удаляем индексы пользователя ===
echo "🧹 Чистим индексы..." >> "$LOGFILE"
rm -f "$USER_MAIL_DIR"/dovecot.*

# === 3. Пересоздаём индексы ===
echo "🔄 Пересоздаём индексы для $USER_EMAIL..." >> "$LOGFILE"
doveadm index -u "$USER_EMAIL" INBOX >> "$LOGFILE" 2>&1
doveadm index -u "$USER_EMAIL" "*" >> "$LOGFILE" 2>&1

# === Готово ===
echo "✅ Почта для $USER_EMAIL почищена и пересоздана." >> "$LOGFILE"
echo "📄 Лог: $LOGFILE"
Теги: #linux #Ubuntu #server #dovecot #почтовый_сервер #bash #script

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку

Важно: Блог-эксперимент

Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


кто я | книга | контакты без контактов

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA