Back to blog

Fixing mailbox quota conflicts and SMTPUTF8 delivery errors in Exim/Dovecot

9/2/2025 · 1 min · Email

Share

In panel migrations, two recurring incidents usually come together: mailbox quota mismatch and outbound failures with SMTPUTF8 used when not advertised.

This runbook documents the exact steps used to restore stable operation.

1) Quota mismatch diagnosis

Measure real Maildir usage:

du -h --max-depth=1 /home/user/mail/domain.com/ | sort -h

Check Dovecot quota state:

doveadm quota get -u mailbox@domain.com

Large mismatch usually indicates stale maildirsize indexes.

2) Quota remediation workflow

Backup index list:

find /home/user/mail/domain.com/ -name "maildirsize" -print > /root/maildirsize-backup-list.txt

Remove stale indexes:

find /home/user/mail/domain.com/ -name "maildirsize" -exec rm -f {} \;

Recalculate quota:

doveadm quota recalc -u mailbox@domain.com

Refresh cPanel cache:

/scripts/update_db_cache

Validate result:

doveadm quota get -u mailbox@domain.com
du -sh /home/user/mail/domain.com/mailbox/

3) SMTPUTF8 failure root cause

Error:

SMTPUTF8 used when not advertised

Cause: destination does not advertise SMTPUTF8 but sender path negotiates UTF-8 requirements.

Find affected events:

grep -i "smtputf8" /var/log/exim_mainlog | tail -n 200

4) Exim-side compatibility adjustment

Review smtputf8_advertise_hosts in WHM Exim Advanced Editor.

When broad legacy interoperability is required, keep it empty and restart Exim:

exim -bV | head -n 40
systemctl restart exim

Queue cleanup for old stuck items:

exim -bp | grep -i "smtputf8" | awk '{print $3}' | xargs -r exim -Mrm

5) Post-migration security/audit step

Bulk-admin audit with WP-CLI:

#!/bin/bash
OUTPUT="admins-audit.csv"
echo "Domain,User,Email,Role" > "$OUTPUT"

for user in $(ls /var/cpanel/users/); do
  PUBLIC_HTML="/home/$user/public_html"
  if [ -d "$PUBLIC_HTML" ] && [ -f "$PUBLIC_HTML/wp-config.php" ]; then
    DOMAIN=$(grep "^DNS=" /var/cpanel/users/"$user" | cut -d= -f2)
    sudo -u "$user" -i -- wp user list --role=administrator --format=csv --path="$PUBLIC_HTML" >> "$OUTPUT"
  fi
done

6) Acceptance checklist

  1. du and doveadm quota values aligned.
  2. no quota errors in panel/mail flow.
  3. no new SMTPUTF8 delivery failures.
  4. Exim queue stable.
  5. legacy destination interoperability restored.

Quota mismatch and SMTPUTF8 are distinct classes of issues, but both are common in migration windows. Handling them together reduces recurrence and speeds up service stabilization.

CC BY-NC

This post is licensed under CC BY-NC.

Comments

Join the discussion below.