Add migration scripts and other fixes
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
# Runs imapsync (via the dockerized imapsync/imapsync image) for every account
|
||||
# in a migration accounts.csv, copying mail from docker-mailserver to Stalwart.
|
||||
set -euo pipefail
|
||||
|
||||
SOURCE_PORT=993
|
||||
DEST_PORT=993
|
||||
DRY_RUN=false
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -c accounts.csv -s source-host -t dest-host [-p source-port] [-q dest-port] [-n]" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "c:s:t:p:q:n" opt; do
|
||||
case "$opt" in
|
||||
c) CSV="$OPTARG" ;;
|
||||
s) SOURCE_HOST="$OPTARG" ;;
|
||||
t) DEST_HOST="$OPTARG" ;;
|
||||
p) SOURCE_PORT="$OPTARG" ;;
|
||||
q) DEST_PORT="$OPTARG" ;;
|
||||
n) DRY_RUN=true ;;
|
||||
*) usage ;;
|
||||
esac
|
||||
done
|
||||
[[ -z "${CSV:-}" || -z "${SOURCE_HOST:-}" || -z "${DEST_HOST:-}" ]] && usage
|
||||
|
||||
while IFS=',' read -r email new_password old_password aliases quota_mb; do
|
||||
[[ -z "$email" ]] && continue
|
||||
|
||||
if [[ -z "$old_password" || -z "$new_password" ]]; then
|
||||
echo "Missing old_password or new_password for $email" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> Syncing $email"
|
||||
|
||||
args=(run --rm imapsync/imapsync
|
||||
--host1 "$SOURCE_HOST" --port1 "$SOURCE_PORT" --ssl1 --user1 "$email" --password1 "$old_password"
|
||||
--host2 "$DEST_HOST" --port2 "$DEST_PORT" --ssl2 --user2 "$email" --password2 "$new_password"
|
||||
--automap --syncinternaldates --skipcrossduplicates --no-modulesversion)
|
||||
|
||||
[[ "$DRY_RUN" == true ]] && args+=(--dry)
|
||||
|
||||
if ! docker "${args[@]}"; then
|
||||
echo "warning: imapsync exited non-zero for $email" >&2
|
||||
fi
|
||||
done < <(tail -n +2 "$CSV")
|
||||
Reference in New Issue
Block a user