這兩天接到一個有趣的題目,希望能夠用程式作出一個自動加入簽名檔到 Outlook 中的功能。這個題目主要是因為企業整體的 CIS 設計,希望能夠統一所有員工的外送郵件,使用相同的、設計過的及被公關部門認可的簽名檔,是的,上面那一句話聽起來讓人覺得公司的行政程序往往比寫程式還難。
首先,先試試看可不可以用程式作到,然後要 User 準備好一個在 Outlook 裡 “可用的” 簽名檔來進行後續的製作,在 User 還沒有把東西給我之前,自己先作一個簡單的 POC,確定後面程式的流程要怎麼跑:
1) 在 Outlook 裡用內建的功能建立一個 HTML 格式的簽名檔。
2) 用搜尋功能找到簽名檔的儲存路徑: 發現存放在 C:\Documents and Settings\Administrator\Application Data\Microsoft\Signatures
3) 開啟 regedit 搜尋簽名檔是否存在 registry 中: 沒有。
4) OK… 接下來看看簽名檔存放路徑,發現有三個檔案,分別是:檔名.HTM 檔名.TXT 檔名.RTF,這表示當你使用不同的信件格式的時候,Outlook 會幫你套用的簽名檔就分別是從這三個檔案裡讀的。
5) 試一下剛剛想的是對的,把三個簽名檔 Rename,再到 Outlook 裡改預設簽名檔,看看可不可以改成 Rename 過的:沒錯!
6) 測試寄一份信件給自己,看看收到的簽名檔格式對不對(分別寄出 HTML、TEXT、RTF 三種格式):都正確。
好的,現在腦袋裡程式的流程是:使用者輸入個人資料→用個人資料 Replace 掉範本檔裡的值→找出 User 的 Home 目錄→分別寫入三個不同格式的簽名檔→然後… Shit,使用者得自己去改預設簽名才行,因為並沒有修改預設簽名檔的方法(記下來,要找方法搞定它)。
使用者的 Email 來了,耶~怎麼是圖形檔格式,幫幫忙,用圖形來傳送整個簽名嗎?會被網管人員扁死的,這個剛出爐的圖形大小為 57K,每一封信多夾了 57K 的話,網路不塞爆了才怪!縮圖、改成 HTML 格式及對格式作一些美化修改等等的動作。寄一份給自己試試看,哇哩,誰殺了比爾?Outlook 不支援 TD background=”xxx.jpg” 的語法,再試,改為 TABLE background= 的格式,也不行,再再試,改為 style=”background-image 的語法,也不行,放棄。折衷對策一:改用 bgcolor 來騙過所有觀眾的眼睛,測試,效果還不錯,縮圖後的結果為 17K,雖然可能還是會遭到網管的討伐,不過我盡力了。
心裡有一股疑惑產生,事情不應該這麼順利,一個在單一平台(我的電腦)上測試過的流程,並不能算是一個完整的 POC,對,『我的電腦』,跟你 Windows 桌面上的圖示是一樣的名字,但是那指的是不同的東西,別搞混了。這表示程式需要相容性,它會給幾百個使用者使用,嗯,依照這個公司的規模,幾千個也不無可能,絕不能太過草率,否則丟的可是自己的臉。相容性,要相容 Outlook Express, Outlook 2000, Outlook XP, Outlook 2003。相容性,要相容 Windows 98/XP/NT/2000 嗯,應該沒有哪個鳥人會用 2003 Server 收信的,略過。
按下 Compaq 鍵盤上方的放大鏡,Compaq Easy Access Buttons 把我帶到了 Google,”outlook signature directory” 關鍵字領著我來到了 MSDN 的 Knowledge Base,底下有幾個該注意的目錄:
Win98 / ME
[WinDir]\Application\Data\Microsoft\Signatures
[WinDir]\Application Data\Microsoft\Signatures
NT4
[WinDir]\Profiles\[User]\Application Data\Microsoft\Signatures
[WinDir]\Profiles\[User]\Application Data\Microsoft\Signatures
Windows 2000/XP
C:\Documents and Settings\[User]\Application Data\Microsoft\Signatures
疑惑解除,該寫程式了!開啟 Delphi 6,一陣手指與鍵盤的互扁聲。好像寫得有點鈍,經過六個月與 C Sharp 的奮戰,都有點快要忘了 Object Pascal 是甚麼碗糕,字串用 “string” — Error! 改… 想要 Replace String 居然寫成 sUsername.Replace 咚!Code Insight 它根本就不屌我。大約過了廿七分鐘的適應,才漸漸有了 Pascal 的感覺,Borland 我回來了,隨時間在流逝,離成功不遠了,手指扁鍵盤的頻率也就增加了不少。沒錯,是狂扁的聲音。
測試,搞定 — 收工?錯了!得寄給其它人幫忙測試,Deploy 沒有經過嚴格測試的程式,與散播未知破壞力的『病毒』無異。
真是一個冷到骨子裡的天氣,整天要靠著熱茶或是熱開水來保持體溫,晚上吃完飯出去抽煙的時候還忘了穿外套,冷得直發抖,還好緊接著灌了一杯多加了一份濃縮的中杯熱美式,讓腦袋再度回溫。可能是因為天氣冷的時候,人的反應動作會比較慢,今天在回來的路上就看到了兩起車禍,一起是星巴克前的十字路口 (對啦,在我享受著咖啡的時候),另一起是在自強隧道內,這兩起車禍,讓擁擠的下班時刻的我的腦袋,多了一些詭異的氣氛。
回到家心裡還掛著這支程式應該要能自動設定預設簽名檔的事,『放大鏡』鍵又被扁了一下,不同的 Keyword 在 Google 上會有不同的效果,我找到了 Outlook Express 的 registry key,在自己電腦上用 regedit 又找到了 Outlook 2003 的存放 key 值,分別是:
HKEY_CURRENT_USER\Identities\{F96A58C9-9C77-491E-A6E0-FE373539DCCE}\Software\Microsoft\Outlook Express\5.0\signatures
及
HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Signatures
為了其它 Outlook 版本的相容性,我還另外在 Google 上搜尋了 “HKEY_CURRENT_USER\Software\Microsoft\Office”,再加上:
HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Outlook\Signatures
HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Outlook\Signatures
HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Outlook\Signatures
這三組 Key,使用亂槍打鳥的方式,可以讓你得到獵物的機率加大,剩下的,就是睡個好覺,明天再來改程式。
— Result
失敗,Outlook 2003 的設定不曉得藏那去了,找不到。User 只好手動改這部分了..
— Other
如果你嘗試也寫一個這樣的程式,而你的 Outlook 不屌你的話,可以參考微軟的這一篇文章: Image in Signature Does Not Display Correctly in Outlook 2002 Messages
[END]