Zimbra 管理员如何更新用户邮箱中保存的联系人信息()

古人已用三冬足,年少今开万卷余。这篇文章主要讲述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/--verboseverbose output
autoCompleteGal(acg)[opts] query
-v/--verboseverbose output
createContact(cct)[opts] [attr1 value1 [attr2 value2...]]
-T/--tags < arg> list of tag ids/names
-f/--folder < arg> folder-path-or-id
-i/--ignoreignore unknown contact attrs
deleteContact(dct)contact-ids
flagContact(fct)contact-ids [0|1*]
getAllContacts(gact)[opts] [attr1 [attr2...]]
-v/--verboseverbose output
-f/--folder < arg> folder-path-or-id
getContacts(gct)[opts] contact-ids [attr1 [attr2...]]
-v/--verboseverbose output
modifyContactAttrs(mcta)[opts] contact-id [attr1 value1 [attr2 value2...]]
-r/--replacereplace contact (default is to merge)
-i/--ignoreignore 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/--verboseverbose output
getFolder(gf)[opts] folder-path
-v/--verboseverbose 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/--replacereplace contact (default is to merge)
-i/--ignoreignore 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 shizhenningmcta 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
其中全员邮箱账号通过如下命令获取:

【Zimbra 管理员如何更新用户邮箱中保存的联系人信息()】zmaccts| grep tantanapp.com | grep active | awk -F " " print $1 | awk -F " @" print $1> /tmp/tantan_staff_email.txt
通过process.log 文件可以查询处理日志。


    推荐阅读