Table of Contents

Get Users Mailbox Size from CLI

https://wiki.zimbra.com/wiki/Get_all_user's_mailbox_size_from_CLI

su - zimbra
all_accounts=`zmprov -l gaa`; for account in $all_accounts; do mbox_size=`zmmailbox -z -m $account gms`; echo "Mailbox size of $account = $mbox_size"; done ;

Find A Preference/Setting/Attribute

I was searching for a CLI method of applying a GUI attribute but could find no documentation. I looked at the zmprov help options and found the option of description!

This will give all attributes changeable via zmprov

zmprov description

Then find a term you think might be relevant and grep for it (here I though “Address” might be part of the attribute name)

zmprov description | grep Address

List Accounts

https://wiki.zimbra.com/wiki/Zmprov_Examples

List All Accounts
zmprov -l gaa
List All Accounts For Domain
zmprov -l gaa somedomain.com
List All Accounts Excluding Most System Accounts
zmprov -l gaa | grep -v mail.somedomain.com | grep -v galsync

Auto Reply Based on Filter

This reply's based on the user's email address being in the to,cc fields…

/opt/zimbra/bin/zmmailbox -z -m account@domain.com afrl "Filter_name" active any address "to,cc" all is "alias@domain.com" reply "Auto reply message" stop

This reply is based on anything that arrives after a certain date, effectively replying to everything after that date.

/opt/zimbra/bin/zmmailbox -z -m mcl@porschefresno.com afrl "Auto_Reply_To_All" active any date after 20190501 reply "Please note that the mailboxes user@domain.com and useralias@domain.com are no longer in use." stop

Export Mailbox to TGZ Archive

http://shahzadlinux.blogspot.com/2017/01/how-to-take-mailbox-backup-of-zimbra.html

This is useful for individual backups or archiving a mailbox that is no longer needed and will be deleted.

Backup
zmmailbox -z -m user@example.com getRestURL "//?fmt=tgz" > /backup/user@example.com.tar.gz
Restore
zmmailbox -z -m user@example.com postRestURL "//?fmt=tgz&resolve=reset" /backup/user@example.com.tar.gz
Restore to a subfolder name archive_2021
zmmailbox -z -m user@example.com postRestURL "/archive_2021/?fmt=tgz&resolve=reset" /backup/user@example.com.tar.gz
Export List of Mailboxes
#Python Script that uses Shell Scripts to Export Mailboxes from Zimbra
#Requires Python 3.5 or higher
#Must be run as zimbra user
#No error checking, and is rough but works...
 
# https://stackoverflow.com/questions/4256107/running-bash-commands-in-python
 
# Import subprocess to allow OS/bash commands
import subprocess
import datetime
 
# The file path and file that contains the mailboxes to be exported
# The file should contain 1 E-mail address per line
mailboxes_to_export_fp = "/opt/zimbra/scripts/mailbox_export/mailboxes_to_export.txt"
 
# The file path where the mailboxes will be exported to
export_fp = "/tmp"
 
# Open file and read it line by line: https://stackabuse.com/read-a-file-line-by-line-in-python/
with open(mailboxes_to_export_fp) as fp:
    for index, line in enumerate(fp):
        line = ("{}".format(line.strip()))
        mailbox = line
        ct = datetime.datetime.now()
        print(line)
        print(mailbox)
        # Run a bash command in Python with a Python variable: https://stackoverflow.com/questions/29834114/use-python-variable-in-bash-command-with-os-system https://www.reddit.com/r/learnpython/comments/18q69d/how_can_you_pass_a_command_with_quotes_to_the/
        bashCommand = ("zmmailbox -z -m {mailbox} getRestURL \"//?fmt=tgz\" > \"{export_fp}/{mailbox}_{ct}.tar.gz\"".format(
            mailbox=(mailbox), ct=(ct), export_fp=(export_fp)))
        print(bashCommand)
        subprocess.call(bashCommand,
                        shell=True)  # having to use shell=True since it needs to run in the Zimbra users environment
# import shlex
# subprocess.call(shlex.split(bashCommand))