#!/bin/bash ZIMBRA_BIN=/opt/zimbra/bin/zmmailbox TOTAL_DELETED=0 echo "=== Zimbra Email Bulk Delete for Specific Account ===" read -p "Masukkan Email Account: " THEACCOUNT read -p "Hapus sebelum tanggal (mm/dd/yyyy): " THEDATE LOG_FILE="/opt/zimbra/log/delete_history_${THEACCOUNT}_$(date +%Y%m%d_%H%M%S).log" TMP_BATCH="/tmp/zimbra_batch.txt" echo "----------------------------------------------------" echo "Logging ke: $LOG_FILE" echo "----------------------------------------------------" read -p "Lanjutkan? (y/n): " CONFIRM [[ $CONFIRM != "y" ]] && exit 1 echo "--- PROSES DIMULAI: $(date) ---" >> "$LOG_FILE" while true; do echo "Sedang mengambil data 1000 message..." JSON_DATA=$($ZIMBRA_BIN -z -m "$THEACCOUNT" search -t message -l 1000 -v "before:$THEDATE") python3 -c " import sys, json, datetime batch_file = '$TMP_BATCH' log_file = '$LOG_FILE' try: data = json.load(sys.stdin) hits = data.get('hits', []) if not hits: sys.exit(1) with open(batch_file, 'w') as f_batch, open(log_file, 'a') as f_log: for hit in hits: msg_id = str(hit.get('id', '')) if msg_id: sender = hit.get('sender', {}).get('address', 'Unknown') subject = hit.get('subject', '(No Subject)') now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S,%f')[:-3] f_batch.write(f'deleteMessage {msg_id}\n') f_log.write(f'{now} DELETE id={msg_id} From={sender} Subject={subject}\n') print(len(hits)) except Exception: sys.exit(1) " <<< "$JSON_DATA" > /tmp/batch_count.txt if [ $? -ne 0 ]; then echo "Selesai! Tidak ada lagi data." break fi BATCH_COUNT=$(cat /tmp/batch_count.txt) echo "Menghapus batch ($BATCH_COUNT item)..." $ZIMBRA_BIN -z -m "$THEACCOUNT" < "$TMP_BATCH" TOTAL_DELETED=$((TOTAL_DELETED + BATCH_COUNT)) echo "Total sementara terhapus: $TOTAL_DELETED" > "$TMP_BATCH" sleep 1 done echo -e "\n--- SUMMARY ---" >> "$LOG_FILE" echo "Selesai: $(date)" >> "$LOG_FILE" echo "Total Terhapus: $TOTAL_DELETED" >> "$LOG_FILE" rm -f "$TMP_BATCH" /tmp/batch_count.txt echo "PROSES SELESAI. Total: $TOTAL_DELETED item."