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 (and you'd rather not explain how to do this manually to all of them ;-).
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
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.