Zimbra 管理员如何更新用户邮箱中保存的联系人信息?
Posted 史振宁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zimbra 管理员如何更新用户邮箱中保存的联系人信息?相关的知识,希望对你有一定的参考价值。
场景:
Zimbra 邮件服务器因变更了主域名,所有用户的邮箱后缀也随着变更到新域名。但是用户邮箱联系人中依然会保留了以前联系过的人员的邮箱(老域名), 联系人并不会随着域名的改变自动更新。这就导致用户发送邮件时,自动补全到了老域名邮箱(用户很可能不会注意到这点)。
需求:
让用户自己去清理或者点击忘记,对用户来说是不太友好的方案。 这就要求邮件管理员能够统一去给所有人做更新或者删除。
思路尝试:
思路1:将每个用户邮箱中老域名的联系人删除。 通过老域名过滤联系人,进行删除操作。
- 首先,获取某用户的联系人信息
[zimbra@com ~]$ zmmailbox -z -m shizhenning gact Id: 673 Folder: /Emailed Contacts Date: 05/28/21 15:16 Revision: 995 Attrs: firstName: 王彦博 fullName: 王彦博 email: wangyanbo@p1.com
Id: 675
Folder: /Emailed Contacts
Date: 05/28/21 15:16
Revision: 996
Attrs:
firstName: 李志康
fullName: 李志康
email: lizhikang@p1.com
- 看看怎么删除联系人
[zimbra@com ~]$ zmmailbox help contact
autoComplete(ac) [opts] query
-v/--verbose verbose output
autoCompleteGal(acg) [opts] query
-v/--verbose verbose output
createContact(cct) [opts] [attr1 value1 [attr2 value2...]]
-T/--tags <arg> list of tag ids/names
-f/--folder <arg> folder-path-or-id
-i/--ignore ignore unknown contact attrs
deleteContact(dct) contact-ids
flagContact(fct) contact-ids [0|1*]
getAllContacts(gact) [opts] [attr1 [attr2...]]
-v/--verbose verbose output
-f/--folder <arg> folder-path-or-id
getContacts(gct) [opts] contact-ids [attr1 [attr2...]]
-v/--verbose verbose output
modifyContactAttrs(mcta) [opts] contact-id [attr1 value1 [attr2 value2...]]
-r/--replace replace contact (default is to merge)
-i/--ignore ignore unknown contact attrs
moveContact(mct) contact-ids dest-folder-path
tagContact(tct) contact-ids tag-name [0|1*]
有个 deleteContact 参数,但是参数值需要明确指定联系人的id,而不能根据域名直接操作。
另外还有个 modifyContactAttrs参数,可以看到也需要明确指定id。既然都需要id,看来都不好实现。所以放弃删除联系人这个思路。
#### 思路2. 把联系人清空了,不就解决了吗!
- 思路1中,已经看到所有联系人都在“/Emailed Contacts“ 这个文件夹下,看看能不能通过对文件夹的操作。
看看怎么操作文件夹
[zimbra@com ~]$ zmmailbox help folder
createFolder(cf) [opts] folder-path
-c/--color <arg> color
-u/--url <arg> url to connect to
-V/--view <arg> default type for folder (appointment,contact,conversation,document,message,task,wiki)
-F/--flags <arg> flags
createMountpoint(cm) [opts] folder-path owner-id-or-name remote-item-id-or-path [reminder-enabled (0*|1)]
-c/--color <arg> color
-V/--view <arg> default type for folder (appointment,contact,conversation,document,message,task,wiki)
-F/--flags <arg> flags
createSearchFolder(csf) [opts] folder-path query
-s/--sort <arg> sort order TODO
-c/--color <arg> color
-t/--types <arg> list of types to search for (message,conversation,contact,appointment,document,task,wiki)
deleteFolder(df) folder-path
emptyFolder(ef) folder-path
getAllFolders(gaf) [opts]
-v/--verbose verbose output
getFolder(gf) [opts] folder-path
-v/--verbose verbose output
有两个文件夹操作命令, deleteFolder 、emptyFolder 分别是删除和清空。 删除的话就不建议了,可以试试清空。
- 清空联系人
[zimbra@com ~]$ zmmailbox -z -m shizhenning ef "/Emailed Contacts"
[zimbra@com ~]$ zmmailbox -z -m shizhenning gact
[zimbra@com ~]$
确实清空了,web登陆后,也不会自动补全到老域名了,并且会自动补全到新域名。
将方案告诉相关同学后,相关同学反馈说,其实还是希望保留联系人,最好是更新下,看看能不能直接把联系人旧的域名替换成新域名。
听到相关同学的反馈后,我自己深入思考了下,清空文件下虽然解决了问题,但其实不是合理的方案。 因为有的用户会有外部联系人,清空会把外部联系人也清空,也许会导致丢失外部联系人。 意识到这个方案有些鲁莽了。
#### 思路3. 更新联系人。
刚才已经看到有一个modifyContactAttrs 参数,用来修改联系人的相关参数,但是只支持通过id字段来修改属性。
命令说明:
modifyContactAttrs(mcta) [opts] contact-id [attr1 value1 [attr2 value2...]]
-r/--replace replace contact (default is to merge)
-i/--ignore ignore unknown contact attrs
联系人属性:
Id: 673
Folder: /Emailed Contacts
Date: 05/28/21 15:16
Revision: 995
Attrs:
firstName: 王彦博
fullName: 王彦博
email: wangyanbo@p1.com
在测试如何修改email字段时候,始终提示参数不够,或者属性错误。 就是不知道怎么使用这个命令,查阅资料,一点没有该命令的使用案例,逼得咨询zimbra技术支持,技术支持也说没用过这个命令,需要研究研究。
接下来又是各种尝试,想到即便测试成功了,还得先办法搞定id的事,太复杂了。 一度想放弃,真想直接使用清空的方案。但些许的责任心让我继续测试。
功夫不负有心人,终于测试出来怎么使用了.
【我给已经删除的2位联系人再次发了封邮件,联系人里又保存了老域名,便于后续测试】
我的联系人如下:
[zimbra@.com ~]$ zmmailbox -z -m shizhenning gact
Id: 807
Folder: /Emailed Contacts
Date: 05/28/21 19:33
Revision: 1229
Attrs:
firstName: 李志康
fullName: 李志康
email: lizhikang@p1.com
Id: 808
Folder: /Emailed Contacts
Date: 05/28/21 19:33
Revision: 1230
Attrs:
firstName: 王彦博
fullName: 王彦博
email: wangyanbo@p1.com
尝试修改联系人:
[zimbra@.com ~]$ zmmailbox -z -m shizhenning mcta 807 email lizhikang@tantanapp.com
807
[zimbra@.com ~]$ zmmailbox -z -m shizhenning gact
Id: 807
Folder: /Emailed Contacts
Date: 05/28/21 19:37
Revision: 1231
Attrs:
firstName: 李志康
fullName: 李志康
email: lizhikang@tantanapp.com
Id: 808
Folder: /Emailed Contacts
Date: 05/28/21 19:33
Revision: 1230
Attrs:
firstName: 王彦博
fullName: 王彦博
email: wangyanbo@p1.com
Folder、Date、Revision、Attrs 都不是属性字段, firstName、fullName、email才是。
### 实现
- 实现了联系人属性修改,接下来就是实现id和email的对应关系了。 毕竟修改联系人属性 必须指定id.
写个shell来实现:
#!/bin/bash
for mailbox in cat tantan_staff_email.txt
#全员邮箱账号,不含@后缀
do
ids=/opt/zimbra/bin/zmmailbox -z -m $mailbox gact| grep -i id | awk -F ":" print $2
#获取联系人所有id
for i in $ids[@]
do
/opt/zimbra/bin/zmmailbox -z -m $mailbox gct $i | grep "p1.com"
if [[ $? -eq 0 ]];then
contact=/opt/zimbra/bin/zmmailbox -z -m $mailbox gct $i | grep "p1.com"|awk -F ":" print $2|awk -F "@" print $1
#获取对应id下联系人邮箱账号前缀
/opt/zimbra/bin/zmmailbox -z -m $mailbox mcta $i email "$contact"@tantanapp.com
fi
done
echo "$mailbox process done!" >> /home/shizhenning/process.log
done
其中全员邮箱账号通过如下命令获取:
zmaccts | grep tantanapp.com | grep active | awk -F " " print $1 | awk -F "@" print $1 > /tmp/tantan_staff_email.txt
通过process.log 文件可以查询处理日志。
以上是关于Zimbra 管理员如何更新用户邮箱中保存的联系人信息?的主要内容,如果未能解决你的问题,请参考以下文章