Zimbra 管理員如何更新用戶郵箱中保存的聯(lián)系人信息?

場景:

Zimbra 郵件服務器因變更了主域名,所有用戶的郵箱后綴也隨著變更到新域名。但是用戶郵箱聯(lián)系人中依然會保留了以前聯(lián)系過的人員的郵箱(老域名), 聯(lián)系人并不會隨著域名的改變自動更新。這就導致用戶發(fā)送郵件時,自動補全到了老域名郵箱(用戶很可能不會注意到這點)。

需求:

讓用戶自己去清理或者點擊忘記,對用戶來說是不太友好的方案。 這就要求郵件管理員能夠統(tǒng)一去給所有人做更新或者刪除。

思路嘗試:

思路1:將每個用戶郵箱中老域名的聯(lián)系人刪除。 通過老域名過濾聯(lián)系人,進行刪除操作。

  • 首先,獲取某用戶的聯(lián)系人信息
[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
  • 看看怎么刪除聯(lián)系人
[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 參數(shù),但是參數(shù)值需要明確指定聯(lián)系人的id,而不能根據(jù)域名直接操作。

另外還有個 modifyContactAttrs參數(shù),可以看到也需要明確指定id。既然都需要id,看來都不好實現(xiàn)。所以放棄刪除聯(lián)系人這個思路。

思路2. 把聯(lián)系人清空了,不就解決了嗎!

  • 思路1中,已經(jīng)看到所有聯(lián)系人都在“/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 分別是刪除和清空。 刪除的話就不建議了,可以試試清空。

  • 清空聯(lián)系人
[zimbra@com ~]$ zmmailbox -z -m shizhenning ef "/Emailed Contacts"
[zimbra@com ~]$ zmmailbox -z -m shizhenning gact
[zimbra@com ~]$ 

確實清空了,web登陸后,也不會自動補全到老域名了,并且會自動補全到新域名。

將方案告訴相關同學后,相關同學反饋說,其實他們還是希望保留聯(lián)系人,最好是更新下,看看能不能直接把聯(lián)系人舊的域名替換成新域名。

聽到相關同學的反饋后,我自己深入思考了下,清空文件下雖然解決了問題,但其實不是合理的方案。 因為有的用戶會有外部聯(lián)系人,清空會把外部聯(lián)系人也清空,也許會導致丟失外部聯(lián)系人。 意識到這個方案有些魯莽了。

思路3. 更新聯(lián)系人。

剛才已經(jīng)看到有一個modifyContactAttrs 參數(shù),用來修改聯(lián)系人的相關參數(shù),但是只支持通過id字段來修改屬性。
命令說明:

 modifyContactAttrs(mcta)     [opts] {contact-id} [attr1 value1 [attr2 value2...]]
    -r/--replace                 replace contact (default is to merge)
    -i/--ignore                  ignore unknown contact attrs

聯(lián)系人屬性:

Id: 673
Folder: /Emailed Contacts
Date: 05/28/21 15:16
Revision: 995
Attrs:
  firstName: 王彥博
  fullName: 王彥博
  email: wangyanbo@p1.com

在測試如何修改email字段時候,始終提示參數(shù)不夠,或者屬性錯誤。 就是不知道怎么使用這個命令,查閱資料,一點沒有該命令的使用案例,逼得咨詢zimbra技術支持,技術支持也說沒用過這個命令,需要研究研究。

接下來又是各種嘗試,想到即便測試成功了,還得先辦法搞定id的事,太復雜了。 一度想放棄,真想直接使用清空的方案。但些許的責任心讓我繼續(xù)測試。

功夫不負有心人,終于測試出來怎么使用了.

【我給已經(jīng)刪除的2位聯(lián)系人再次發(fā)了封郵件,聯(lián)系人里又保存了老域名,便于后續(xù)測試】
我的聯(lián)系人如下:

[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

嘗試修改聯(lián)系人:

[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才是。

實現(xiàn)

  • 實現(xiàn)了聯(lián)系人屬性修改,接下來就是實現(xiàn)id和email的對應關系了。 畢竟修改聯(lián)系人屬性 必須指定id.

寫個shell來實現(xiàn):

#!/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}'` #獲取聯(lián)系人所有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下聯(lián)系人郵箱賬號前綴
         /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 文件可以查詢處理日志。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容