Automating Reciprocal Calendar Sharing
The problem: you've just added a new department of users to your Zimbra server. All of those users need to share their calendars with each of the other members of their department.
First, create a distribution list with all of the relevant user accounts via the Zimbra Admin console.
The following BASH script takes the name of that distribution list as a command line argument, then outputs a series of CLI commands to share each members's calendar (read-only) with the distribution list, then add a mountpoint to each user's shared calendar to the other list members' calendars. The script should be run as the zimbra user.
#!/bin/bash if [ "$#" == "1" ] then users=$(zmsoap --type admin --zadmin GetDistributionListRequest/dl="$1" @by="name" | grep dlm | sed -e 's/.*<dlm>\(.*\)<\/dlm>/\1/g') echo $users for u in $users do echo zmmailbox -z -m $u modifyFolderGrant /Calendar group firstname.lastname@example.org r uname=$(zmmailbox -z -m $u gid -v | grep zimbraPrefFromDisplay | sed -e 's/.*: "\(.*\)",/\1/') for v in $users do if [ $u != $v ] then echo zmmailbox -z -m $v createMountpoint --view appointment \"/$uname\'s Calendar\" $u /Calendar fi done done else echo "usage: $0 email@example.com" fi
NOTE: This script will just print out a bunch of commands: it won't actually *run* them. You should redirect the output of this script to a text file, then sanity check the commands in the text file BEFORE you try to run them. For example:
[zimbra@mail ~]$ zimbraRecipCalShare.sh firstname.lastname@example.org > check_me_first.sh ... then verify that the commands in the check_me_first.sh file are sane . . . [zimbra@mail ~]$ bash check_me_first.sh </pr> Also, the initial script takes a while to run (~2 minutes for a 10-user distribution list, in one instance) due to the various lookups that are required. The generated script takes even longer to run.