症狀如後:Outlook 2010收到來自其他部門的郵件,開啟信件準備回覆或轉寄,在按下暫存或傳送時Outlook UI凍結無回應。
經檢查比對,推測為信中包含無效URL的<img>所致(URL指向寄件者才存取得到的內部IP),試用一小段程式重現問題:
ExchangeService ews = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
ews.Credentials = new WebCredentials("userid", "pwd", "domain");
ews.Url = new Uri(ewsUrl);
EmailMessage newMsg = new EmailMessage(ews);
newMsg.ToRecipients.Add(new EmailAddress("receiver@mail.com"));
newMsg.Subject = "無效外部圖檔測試";
newMsg.Body = new MessageBody(BodyType.HTML,
"<html><body>Outlook Killer! " +
"<img src=\"http://172.16.1.88/images/encrypt.gif\" >" +
//"<img src=\"http://wwww.no-such-domain.com.tw/images/encrypt.gif\" >"
"</body></html>");
newMsg.Send();
以上程式將送出一封內文採HTML格式的信件,其中包含<img> src指向不存在的內部IP(172.16.1.88),信件圖檔無法顯示出現叉燒包,轉寄或回覆時按左上方磁片圖示存檔或傳送鈕,將導致Outlook 2010操作介面凍結無回應。但測試發現,耐心等待撐得夠久,作業仍會完成並恢復正常運作:
經過測試觀察,分析如下:
- 由於信件來自公司Exchange內部傳送,故Outlook不會阻擋圖片下載。(以下為外部信件,如圖所示需使用者授權,Outlook才會下載內嵌圖檔。)
- 在轉寄、回覆或暫存時(甚至在草稿匣中點選預覽也是),Outlook會試圖下載擷取<img>圖檔,由於其src非有效IP,而Outlook使用前景執行緒下載,在連線逾期之前,程式呈現無回應狀態。
- 在網路找到一篇文章提及類似狀況及一個Hotfix,安裝後並無改善。仔細推敲,該案例的無效URL是(102.112.2o7.net),本例則為IP。做了另一個測試,將無效IP改為www.no-such-domain.com.tw,則不會造成UI凍結。因此猜測該Hotfix修正Domain Name無效凍結問題,但未能涵蓋無效IP的情境。
【結論】
這個問題只發生在<img> src使用無效IP的Exchange內部信,由於Outlook使用前景執行緒下載內嵌圖屬不良設計,造成操作界面長時間凍結。嚴格來說,此狀況不算常見情境,遇到時宜將無效<img>刪除可解決,就不積極圖謀改善了。