iT邦幫忙

0

單機版 OUTLOOK 通訊錄,請大家建議更好的更新方法

大家好,小弟公司是使用OUTLOOK(大部份員工)或OUTLOOK EXPRESS(少部份員工)。

◎目前製做OUTLOOK通訊錄的方式如下述
分公司自行編輯WAB通訊錄(BY OUTLOOK EXPRESS),
交由總公司統一匯整所有分公司WAB通訊錄,再匯入OUTLOOK通訊錄(成為集團版通訊錄)。

◎目前困難點
1.匯整WAB通訊錄時(有匯出入動作)經常發生資料遺失,必須再三比對,並人工修正
2.員工須手動匯入集團版通訊錄,因程序複雜經常抱怨連連
3.承第2點,導致員工經常不更新通訊錄

◎公司目前是使用LINUX MAIL SERVER,在CLIENT使用單機版的OUTLOOK或OUTLOOK EXPRESS情形下。
請大家建議更好的更新方法,謝謝。

熊大叔 iT邦新手 2 級 ‧ 2021-05-12 11:43:36 檢舉
統一一個通訊錄.pst檔案呢
除了個人郵件收發的.pst
在設立一個通訊錄.pst
然後每次電腦開機就跑更新
更新源頭是你
這樣如何?
liwaylai iT邦新手 3 級 ‧ 2021-05-12 18:09:27 檢舉
好做法,我認同,謝謝您!
eynysina iT邦新手 5 級 ‧ 2021-05-13 13:36:28 檢舉
我司也有這個問題,我那時後研究最終的結果也是這個。
有指令可以直接把pst檔掛到outlook裡。
所以pst的複製,掛載,更新,就都可以搭配gpo做。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
japhenchen
iT邦超人 1 級 ‧ 2021-05-12 11:52:37

我公司也是用單機版outlook / Windows live mail ,極少部份人用thunderbird mail,還有iphone跟android手機

ActiveDirectory主機上登載的資料不全,人員的通訊資料都存放在HR資料庫裡,目前通訊錄的產生分成三種版本

  • 一人一VCF(適用於WindowsLive),用asp.net編寫,網頁點擊下載時會把HR匯出成VCF檔並打包成ZIP,網頁有匯入操作說明。
  • 所有人放在一個VCF(適用於Google及Apple行動裝置的通訊錄匯入格式),方法同上
  • outlook(2013/2016/2019)通訊錄自動更新工具(含離職移除、新進新增、更動郵箱),用C#+MAPI編寫成EXE做成click once安裝包,安裝時會取得管理員權限,寫進Windows7/10的系統排程裡,安排在每日中午12點整,大家都在吃飯時進行會再執行自己,進行系統通訊錄更新,放中午12點也是影響工作效率最小,且能保証會被執行的時間點

以下提供我用MAPI的方法簡述,至於怎麼用MAPI,請自行上網查,長篇大論的放這裡會被嫌棄

private static void 新增連絡人(string 工號, string 部門, string 姓名, string 郵箱)
{
    Outlook.Application outlookApp = new Outlook.Application();
    Outlook.NameSpace outlookNS = outlookApp.GetNamespace("MAPI");

    if (!連絡人存在嗎(郵箱, false))
        try
        {
            Outlook.ContactItem newContact = (Outlook.ContactItem)outlookApp.CreateItem(Outlook.OlItemType.olContactItem);
            newContact.LastName = $"{姓名}";
            newContact.FirstName = $"{工號}";
            newContact.Email1Address = $"{姓名}{工號} ({郵箱})";
            newContact.Email1DisplayName = $"{姓名}{工號} {郵箱}";
            newContact.CompanyName = "超人集團";
            newContact.Department = 部門;
            newContact.FileAs = $"{姓名}{工號}@超人集團";
            newContact.Account = $"{姓名}{工號}@超人";
            newContact.Save();
        }
        catch
        {
            Console.WriteLine("錯誤: 這個連絡人[{0}]無法新增(可能存在)", 姓名);
        }
}

以上方法不會破壞個人通訊錄內容,只有公司員工才會被增減

有得分的話,再加送"新增系統排程"和取得系統管理員權限的方法

看更多先前的回應...收起先前的回應...

thunderbird吃系統通訊錄,跟outlook同一方法解決

https://ithelp.ithome.com.tw/upload/images/20210512/20117954tgzgLKsbux.jpg

每日(有開機的話)只跑一次,不會真的每50分鐘執行一次
https://ithelp.ithome.com.tw/upload/images/20210512/20117954JLKUOfLQkb.jpg

清理已經存在的全部公司員工→再新增在職 = 不重覆+移除離職

private static void 清理Ol_超人連絡人()
{
    Outlook.Application outlookApp = new Outlook.Application();
    Outlook.NameSpace outlookNS = outlookApp.GetNamespace("MAPI");
    Outlook.MAPIFolder contactsFolder = outlookNS.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderContacts);
    Outlook.Items contactItems = contactsFolder.Items;
    foreach (var acc in contactItems)
    {
        string otMail = ((Outlook.ContactItem)acc).Email1Address.ToLower().Trim();
        string otCompanyName = ((Outlook.ContactItem)acc).CompanyName.Trim();
        if (acc is Outlook.ContactItem && otMail != null && otMail.ToString().Trim().Contains("@supermen.com.tw") && otCompanyName.Contains("超人集團")) 
        {
                //只刪自動產生的通訊錄名單,不刪別的
                ((Outlook.ContactItem)acc).Delete();
        }        
    }
}

熊大叔 iT邦新手 2 級 ‧ 2021-05-14 18:45:26 檢舉

這是精華 要保存@@

不知有沒有人想到,我如何取得HR資料,讓程式去連SQL?我才不會做這麼可怕的事,直連SQL...

我用ASP.NET寫成網頁,打開網頁的內容就是json格式,有工號,姓名、email、分機號碼及公務手機號碼,給這個自動更新的程式去抓,有用AD認証登入後才下載

0
hank_itman
iT邦新手 1 級 ‧ 2021-05-13 09:30:43

之前使用過一種方式。

建立一個郵件帳號,專門用來登錄通訊錄的,每個人都設定IMAP的方式去同步這個帳號,但是要記的設定預設寄信帳號為本人的帳號

我要發表回答

立即登入回答