症狀如後: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操作介面凍結無回應。但測試發現,耐心等待撐得夠久,作業仍會完成並恢復正常運作:

經過測試觀察,分析如下:

  1. 由於信件來自公司Exchange內部傳送,故Outlook不會阻擋圖片下載。(以下為外部信件,如圖所示需使用者授權,Outlook才會下載內嵌圖檔。)
  2. 在轉寄、回覆或暫存時(甚至在草稿匣中點選預覽也是),Outlook會試圖下載擷取<img>圖檔,由於其src非有效IP,而Outlook使用前景執行緒下載,在連線逾期之前,程式呈現無回應狀態。
  3. 在網路找到一篇文章提及類似狀況及一個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>刪除可解決,就不積極圖謀改善了。


Comments

# by Neo

若回信時來不及刪圖就Hang住, 可以disable 網卡會立刻解開. 刪圖後再重新enable網卡即可解決.

# by Jeffrey

to Neo, 妙招!謝謝分享,已筆記。

Post a comment