-
-
Save jigzstar/6511534 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# rm_message.sh [email protected] subject | |
# create temp_file prior to calling this zmprov -l gaa | grep domain.com > /tmp/temp_email | |
if [ -z "$2" ]; then | |
echo "usage: rm_message.sh [email protected] <subject>" | |
exit 0 | |
else | |
addr=$1 | |
subject=$2 | |
for acct in `cat /tmp/temp_email` ; do | |
echo "Searching $acct for Subject: $subject" | |
for msg in `/opt/zimbra/bin/zmmailbox -z -m "$acct" s -l 999 -t message "from:$addr subject:$subject"|awk '{ if (NR!=1) {print}}' | grep -v -e Id -e "----" -e "^$" | awk '{ print $2 }'` | |
do | |
echo "Removing "$msg" from "$acct"" | |
/opt/zimbra/bin/zmmailbox -z -m $acct dm $msg | |
done | |
done | |
fi |
This is what working for my zimbra Release 8.5.0.GA.3042
/opt/zimbra/bin/zmmailbox -z -m "[email protected]" s -l 999 -t message "from:$addr "|awk '{ if (NR!=1) {print}}'|grep -v -e Id -e " -----" -e "^$" | awk '{ print $2 }'
Works on 8.7
#!/bin/bash
# rm_message.sh [email protected] subject
# or
# rm_message.sh [email protected]
if [ -z "$2" ]; then
addr=$1
for acct in `zmprov -l gaa | grep -E -v '(^admin@|^spam\..*@|^ham\..*@|^virus-quarantine.*@|^galsync.*@)'|sort` ; do
echo "Searching $acct"
for msg in `/opt/zimbra/bin/zmmailbox -z -m "$acct" s -l 999 -t message "from:$addr"|awk '{ if (NR!=1) {print}}' | grep -v -e Id -e "-" -e "^$" | awk '{ print $2 }'`
do
#echo "Removing "$msg" from "$acct""
#/opt/zimbra/bin/zmmailbox -z -m $acct dm $msg
echo "Moving "$msg" from "$acct" to Trash"
/opt/zimbra/bin/zmmailbox -z -m $acct mm $msg /Trash
done
done
else
addr=$1
subject=$2
for acct in `zmprov -l gaa | grep -E -v '(^admin@|^spam\..*@|^ham\..*@|^virus-quarantine.*@|^galsync.*@)'|sort` ; do
echo "Searching $acct for Subject: $subject"
for msg in `/opt/zimbra/bin/zmmailbox -z -m "$acct" s -l 999 -t message "from:$addr subject:$subject"|awk '{ if (NR!=1) {print}}' | grep -v -e Id -e "-" -e "^$" | awk '{ print $2 }'`
do
#echo "Removing "$msg" from "$acct""
#/opt/zimbra/bin/zmmailbox -z -m $acct dm $msg
echo "Moving "$msg" from "$acct" to Trash"
/opt/zimbra/bin/zmmailbox -z -m $acct mm $msg /Trash
done
done
fi
this doesn't work if the Subject contains a "-" character. Must edit the script line from
grep -v -e Id -e "-" -e "^$"
to
grep -v -e Id -e "----" -e "^$"
Thanks, will update. This worked for me on the older zimbra 7 server
How about removing an email only by subject without specifying the sender addr?
the script seems not to be working on zimbra version 9
One tip, switch the grep and awk in zmprov command:
... | grep -v -e Id -e "-" -e "^$" | awk '{ print $2 }'
... | awk '{ print $2 }' | grep -v -e Id -e "--" -e "^$" -e "Type"
This will firstly filter on msgId column (numbers only) then clear the output.
Doing this the subject can contain whatever and doesn't get filtered out by grep.
how if i want to delete by range of date ?
From Zimbra doc, you can use Zimbra command to filter messages:
zmmailbox -z -m [email protected] s -t message -l 50 "in:inbox date:01/01/2015"
Ref: https://wiki.zimbra.com/wiki/Deleting_messages_from_account_using_the_CLI
!/bin/bash
rm_message.sh [email protected] subject
"get message subject :" zmmailbox -z -m [email protected] s -t message -l 50 "in:inbox date:mm/dd/yyyy"
create temp_file prior to calling this zmprov -l gaa | grep domain.com > /tmp/temp_email
if [ -z "$2" ]; then
echo "usage: rm_message.sh [email protected] "
exit 0
else
addr=$1
subject=$2
for acct in
cat /tmp/temp_email
; doecho "Searching $acct for Subject: $subject"
for msg in
zmmailbox -z -m "$acct" s -l 999 -t message "subject:$subject"|awk '{ if (NR!=1) {print}}' | grep -v -e Id -e "-" -e "^$" | awk '{ print $2 }'
do
echo "Removing "$msg" from "$acct""
zmmailbox -z -m $acct dm $msg
done
done
fi