activesync.example, com”的通配符SSL證書(shū)被客戶(hù)端接受為有效。
[0061]當(dāng)客戶(hù)端設(shè)備102向Exchange ActiveSync服務(wù)器進(jìn)行請(qǐng)求時(shí),該請(qǐng)求不能被盲目地轉(zhuǎn)送至消息服務(wù)器106,因?yàn)槊總€(gè)請(qǐng)求包括“Deviceld”參數(shù),并且消息服務(wù)器106保持用于用戶(hù)名和DeviceId的每個(gè)組合的同步狀態(tài)信息。遺憾的是,可能用戶(hù)具有在同一客戶(hù)端設(shè)備102上配置的用于同一用戶(hù)的兩個(gè)電子郵件帳戶(hù),一個(gè)使用代理服務(wù)器,并且一個(gè)直接地連接到消息服務(wù)器106。如果發(fā)生這種事,則客戶(hù)端設(shè)備102認(rèn)為到兩個(gè)服務(wù)器(即,Exchange ActiveSync代理服務(wù)器和消息服務(wù)器106)的兩個(gè)連接具有相互不同的同步狀態(tài),但是消息服務(wù)器106看到相同的DeviceId,并且因此對(duì)兩個(gè)連接應(yīng)用同一同步狀態(tài)。這導(dǎo)致不明確的結(jié)果。為了解決此問(wèn)題,Exchange ActiveSync代理服務(wù)器將客戶(hù)端設(shè)備102請(qǐng)求上的DeviceId修改成是某個(gè)其他串,不等于同一用戶(hù)所使用的任何其他客戶(hù)端設(shè)備102。通常,向DeviceId附加任意后綴就足夠了。
[0062]因此,在從客戶(hù)單設(shè)備102發(fā)送到Exchange ActiveSync代理服務(wù)器的每個(gè)請(qǐng)求上,替換DeviceId參數(shù),并且將主機(jī)標(biāo)題替換成參考消息服務(wù)器的主機(jī)名。如果來(lái)自消息服務(wù)器106的響應(yīng)包含包括消息服務(wù)器的主機(jī)名的任何Set-Cookie標(biāo)題,則ExchangeActiveSync代理服務(wù)器將其重寫(xiě)以使用cookie的域字段中的Exchange ActiveSync代理服務(wù)器的已編碼子域。可以由Exchange ActiveSync代理服務(wù)器安全地傳遞HTTP請(qǐng)求和響應(yīng)主體,除在Sync、SendMaiK SmartForward以及SmatReply命令上之外,如下所述。
[0063]來(lái)自客戶(hù)端設(shè)備102的同步命令可不被Exchange ActiveSync代理服務(wù)器修改,而是解析客戶(hù)端的WBXML (無(wú)線應(yīng)用協(xié)議二進(jìn)制XML)請(qǐng)求主體以確定同步的類(lèi)型。例如,具有O的值的AirSync:GetChanges可被客戶(hù)端設(shè)備102用來(lái)指示特定消息的下載,而不是文件夾內(nèi)容的同步,并且可以由客戶(hù)端設(shè)備發(fā)送AirSyncBase:BodyPreference元素以指示所請(qǐng)求消息格式(純文本、HTML、RTF或MME)和消息內(nèi)容的截?cái)?。在消息代碼轉(zhuǎn)換中使用此信息,以確保以客戶(hù)端設(shè)備102預(yù)期的格式向客戶(hù)端設(shè)備102提供消息。
[0064]需要將來(lái)自消息服務(wù)器106的Sync命令響應(yīng)中的WBXML解碼并搜索作為AirSync: Responses 元素的子元素的任何 AirSync:Fetch 元素以及作為 AirSync: Commands元素的子元素的任何AirSync:Add或AirSync:Change元素。此類(lèi)元素可包含電子郵件消息或另一類(lèi)型的消息(例如,會(huì)議邀請(qǐng))??梢酝ㄟ^(guò)檢查AirSync:Applicat1nData/Email:MessageClass值是否是“ IPM.Note”來(lái)檢測(cè)電子郵件消息。希望僅處理電子郵件消息的應(yīng)用程序可以在沒(méi)有修改的情況下連同其他MessageClass值一起傳遞消息,但是其他應(yīng)用程序可能希望也增強(qiáng)日歷條目及其他類(lèi)型的消息。
[0065]針對(duì)要解析和修改的電子郵件消息,檢查內(nèi)容類(lèi)型(AirSyncBase: Type ),其可以是純文本、HTML、RTF或MME。在純文本或HTML的情況下,使用元素Email:1nternetCPID中的代碼頁(yè)值來(lái)確定消息的字符編碼,并且如果施加字符編碼歸一化,則用歸一化編碼的代碼頁(yè)ID來(lái)更新此元素。連同此內(nèi)容類(lèi)型信息一起,可以將消息數(shù)據(jù)(AirSyncBase:Data元素)傳遞至下面討論的消息代碼轉(zhuǎn)換和增強(qiáng)層。不能安全地修改消息的內(nèi)容類(lèi)型,因?yàn)榉祷氐南⒏袷叫枰c客戶(hù)端設(shè)備102的格式請(qǐng)求匹配,但是可以在將WBXML響應(yīng)重組并將其發(fā)送到客戶(hù)端設(shè)備102之前用增強(qiáng)版本來(lái)替換該消息數(shù)據(jù)。
[0066]當(dāng)發(fā)送消息時(shí),客戶(hù)端設(shè)備102使用SendMail、SmartReply或SmartForward命令。通常,將出站消息包含在ComposeMail:MME元素中的客戶(hù)端設(shè)備請(qǐng)求主體中。此消息被用于到消息接收者的傳輸和到用戶(hù)的“已發(fā)送郵件”文件夾的保存兩者。ExchangeActiveSync代理服務(wù)器以與本文討論的SMTP代理服務(wù)器相同的方式修改此消息,并將已修改SendMail、SmartReply或SmartForward請(qǐng)求發(fā)送到消息服務(wù)器106。
[0067]SMTP代理服務(wù)器
SMTP意圖允許消息傳輸中的中間服務(wù)器,并且SMTP中間服務(wù)器或SMTP代理服務(wù)器的使用(例如,出于存檔目的)是公共的。這里所述的方法與公共SMTP中間服務(wù)器的不同之處在于SMTP代理服務(wù)器充當(dāng)用于客戶(hù)端設(shè)備102的郵件提交代理,并且通常使用另一郵件提交代理作為消息服務(wù)器106。在此配置中,接收者的郵件傳輸代理看到來(lái)自用戶(hù)的正常消息服務(wù)器106的消息,其降低了該消息將被標(biāo)記為垃圾郵件的風(fēng)險(xiǎn)。
[0068]類(lèi)似于消息服務(wù)器106的郵件提交代理通常在允許提交消息之前要求用戶(hù)用用戶(hù)名和口令進(jìn)行認(rèn)證。這意味著當(dāng)將客戶(hù)端設(shè)備102配置成連接到SMTP代理服務(wù)器時(shí),可以以上文針對(duì)IMAP代理服務(wù)器所述的相同方式在用戶(hù)名中對(duì)消息服務(wù)器的主機(jī)名進(jìn)行編碼。當(dāng)連接到消息服務(wù)器106時(shí),SMTP代理服務(wù)器從由客戶(hù)端設(shè)備102供應(yīng)的上游主機(jī)名和原始用戶(hù)名的復(fù)合串提取原始用戶(hù)名。
[0069]在客戶(hù)端設(shè)備102已被連接之后,但是在其已認(rèn)證之前,SMTP代理服務(wù)器獨(dú)立于任何消息服務(wù)器106基于其自己的能力對(duì)命令進(jìn)行響應(yīng)。在客戶(hù)端設(shè)備102已提供證書(shū)且消息服務(wù)器106已成功地認(rèn)證用戶(hù)之后,SMTP代理服務(wù)器將客戶(hù)端設(shè)備的命令轉(zhuǎn)送到消息服務(wù)器106,并且將消息服務(wù)器的響應(yīng)轉(zhuǎn)送到客戶(hù)端設(shè)備102。
[0070]遵循來(lái)自客戶(hù)端設(shè)備102的DATA命令,SMTP代理服務(wù)器以因特網(wǎng)消息格式接受后續(xù)消息,并且將其傳遞到這里討論的消息代碼轉(zhuǎn)換層,指示其正在處理由用戶(hù)發(fā)送的出站消息(而不是由用戶(hù)接收到的入站消息)。結(jié)果得到的已修改消息被連同轉(zhuǎn)送的DATA命令一起發(fā)送到消息服務(wù)器106。
[0071]消息代碼轉(zhuǎn)換
圖7A和7B圖示出根據(jù)實(shí)施例的代碼轉(zhuǎn)換消息的方法700的流程圖。在一些實(shí)施例中,由這里討論的代理服務(wù)器104來(lái)執(zhí)行方法700的至少一部分。最初,在702處接收電子郵件消息。方法700在704處確定消息是否采取因特網(wǎng)消息格式。如果消息采取因特網(wǎng)消息格式,則在706處解析消息的MME結(jié)構(gòu)。方法700還在708處將消息主體的編碼歸一化,并且在710處解析來(lái)自MME標(biāo)題和/或消息主體的元數(shù)據(jù)。如果在704處消息被確定為未采取因特網(wǎng)消息格式,則方法700在712處將消息主體的字符編碼歸一化,并在714處解析來(lái)自協(xié)議上下文和/或消息主體的元數(shù)據(jù)。
[0072]方法700通過(guò)在716處使用已解析元數(shù)據(jù)來(lái)識(shí)別與消息相關(guān)聯(lián)的補(bǔ)充信息而繼續(xù)。這可涉及到與任何數(shù)目的補(bǔ)充信息服務(wù)器108或數(shù)據(jù)源118的通信。方法700然后在718處確定該消息是否采取HTML格式。如果該消息未采取HTML格式,則方法700在720處將消息轉(zhuǎn)換成HTML格式,如果消息的協(xié)議許可內(nèi)容類(lèi)型的改變的話。方法700通過(guò)在722處向消息中插入補(bǔ)充信息來(lái)增強(qiáng)消息。
[0073]該消息在724處確定消息是否采取因特網(wǎng)消息格式。如果該消息采取因特網(wǎng)消息格式,則方法700在726處用增強(qiáng)消息主體來(lái)更新MME容器。如果該消息并未采取因特網(wǎng)消息格式,則方法700在728處用更新消息主體來(lái)更新協(xié)議容器。方法700通過(guò)在730處基于消息協(xié)議中的增強(qiáng)上下文而將消息串行化成適當(dāng)?shù)母袷蕉^續(xù)。最后,在732處將消息傳送至適當(dāng)?shù)南到y(tǒng)或客戶(hù)端設(shè)備。
[0074]以下示例呈現(xiàn)出消息代碼轉(zhuǎn)換程序的特定實(shí)施例。消息代碼轉(zhuǎn)換和增強(qiáng)層接受從這里所述電子郵件協(xié)議代理服務(wù)器104中的一個(gè)提取的郵件消息作為輸入。作為最低限度,代理服務(wù)器104支持因特網(wǎng)消息格式、純文本以及HTML作為輸入和輸出格式。在出文本和HTML輸入的情況下,代理服務(wù)器104允許指定字符編碼和相關(guān)標(biāo)題字段(諸如消息的發(fā)送者和接收者電子郵件地址)。在因特網(wǎng)消息格式的情況下,該信息被包含在消息的標(biāo)題字段內(nèi)。代理服務(wù)器104支持兩個(gè)不同的操作模式:入站(由用戶(hù)接收到的消息)和出站(由用戶(hù)發(fā)送的消息)。在入站消息的情況下,還指定已認(rèn)證用戶(hù)帳戶(hù)、客戶(hù)端設(shè)備類(lèi)型以及客戶(hù)端軟件版本的細(xì)節(jié)。
[0075]如果要進(jìn)行代碼轉(zhuǎn)換的消息采取因特網(wǎng)消息格式,則解析其MME結(jié)構(gòu),如在RFC2045,2046,2047和2049中所述。在多部分消息的情況下,識(shí)別由客戶(hù)端顯示的主體部分(即,并非附件的部分或不那么優(yōu)選的多部分/替換版本等)。這些可見(jiàn)主體部分通常采取純文本或HTML格式,并且可以與作為純文本或HTML提供給代碼轉(zhuǎn)換層的消息相同的方式對(duì)其進(jìn)行處理,如下所述。
[0076]—旦消息主體采取純文本或HTML格式,則將其字符編碼歸一化,以便促進(jìn)用來(lái)自其他源的數(shù)據(jù)來(lái)修改消息。在一些實(shí)施例中,將UTF-8 (UCS變換格式一8位)用于字符編碼,因?yàn)榭梢詿o(wú)損地將字符編碼轉(zhuǎn)換成UTF-8,并且其得到多種客戶(hù)端設(shè)備的支持。解析消息主體以及從消息標(biāo)題或電子郵件協(xié)議獲得的元數(shù)據(jù)(諸如發(fā)送者和接收者的電子郵件地址)并用來(lái)查詢(xún)?nèi)魏螖?shù)目的數(shù)據(jù)庫(kù)或服務(wù)以找到可用來(lái)增強(qiáng)消息的信息。此類(lèi)查詢(xún)可考慮對(duì)于已認(rèn)證用戶(hù)而言特定的數(shù)據(jù)。
[0077]接下來(lái),針對(duì)包含在消息內(nèi)(例如,在出站消息的情況下包含在引用答復(fù)中)的任何現(xiàn)有增強(qiáng)或增強(qiáng)的片段來(lái)分析消息主體。可用在HTML源中使用的特定元素ID或類(lèi)名或者用文本中的特定不可見(jiàn)Unicode字符序列或適合于應(yīng)用程序的任何其他不同特征來(lái)識(shí)別此類(lèi)增強(qiáng)。可從消息刪除或者用替換表示來(lái)替換此類(lèi)現(xiàn)有增強(qiáng),視情況而定。
[0078]接下來(lái),如果消息采取純文本格式且如果在允許使用HTML而不是純文本的背景下執(zhí)行代碼轉(zhuǎn)換,則將純文本消息轉(zhuǎn)換成等價(jià)HTML。由于在HTML中忽視換行符,所以純文本消息中的換行符在HTML轉(zhuǎn)換中被轉(zhuǎn)換成顯式換行符或段落元素。為了允許不同尺寸的屏幕上的