2013-04-12 4 views
6

में किसी अनुलग्नक के सामग्री प्रकार को संशोधित जब मैं VBScript में किसी ईमेल संदेश में अनुलग्नक के रूप में एक MHTML फाइल जोड़ने की कोशिश, ContentMediaType गलत तरीके से "message/rfc822" (RFC 822) पर सेट है। जो मैं समझता हूं, यह माइक्रोसॉफ्ट के अनुसार सही है, लेकिन RFC 2557 के अनुसार गलत है जो कहता है कि यह "multipart/related" होना चाहिए। यह एक समस्या है, क्योंकि अधिकांश (यदि सभी नहीं) मेल क्लाइंट ईमेल संदेश के रूप में "message/rfc822" की व्याख्या करते हैं। चूंकि फ़ाइल एक्सटेंशन ".mht" और ".mhtml" ईमेल संदेश के किसी भी वैध फ़ाइल एक्सटेंशन से मेल नहीं खाते हैं, इसलिए मेल क्लाइंट फ़ाइल नाम पर ".msg", ".eml" आदि में से एक को जोड़ता है। जब कोई उपयोगकर्ता अनुलग्नक खोलता है, तो यह एक ईमेल संदेश के रूप में खुलता है और एक एमएचटीएम फ़ाइल के बाद से सही तरीके से प्रदर्शित नहीं होता है और एक ईमेल संदेश अलग-अलग सहेजे जाते हैं।एक CDO.Message वस्तु

Sub SendEmail(FromAddress, ToAddress, Subject, Body, Attachment) 
    Call Err.Clear 
    On Error Resume Next 

    Schema = "http://schemas.microsoft.com/cdo/configuration/" 
    Set Configuration = Sys.OleObject("CDO.Configuration") 
    Configuration.Fields.Item(Schema + "sendusing") = 2 
    Configuration.Fields.Item(Schema + "smtpserver") = SMTPServer 
    Configuration.Fields.Item(Schema + "smtpserverport") = 25 
    Configuration.Fields.Item(Schema + "smtpauthenticate") = 1 
    ' Configuration.Fields.Item(schema + "sendusername") = "" 
    ' Configuration.Fields.Item(schema + "sendpassword") = "" 
    Call Configuration.Fields.Update 

    Set Message = Sys.OleObject("CDO.Message") 
    Set Message.Configuration = Configuration 
    Message.From = FromAddress 
    Message.To = ToAddress 
    Message.Subject = Subject 
    Message.HTMLBody = Body 
    If Not IsEmpty(Attachment) Then 
    'CDO.Message.AddAttachment doesn't set the correct content media type for an MHTML file. 
    Call Message.AddAttachment(Attachment) 
    End If 

    Call Message.Send 
End Sub 

मुझे इस कोड चलाने के लिए, Message.Attachments.Item(1).ContentMediaType"message/rfc822" को तैयार है। ".mht" या ".mhtml" (केस-असंवेदनशील) के साथ Attachment (एक स्ट्रिंग) समाप्त होने पर मुझे "multipart/related" होने की आवश्यकता है। मैं इसे निम्नलिखित कोड के साथ कर सकता हूं।

If Len(Attachment) >= 4 And InStr(Len(Attachment) - 3, Attachment, ".mht", vbTextCompare) Or Len(Attachment) >= 4 And InStr(Len(Attachment) - 5, Attachment, ".mhtml", vbTextCompare) Then 
    Message.Attachments.Item(1).ContentMediaType = "multipart/related" 
End If 

किसी अज्ञात कारण से, इस Message.Attachments से लगाव undefines।

मैंने these instructions प्रति संलग्नक मैन्युअल रूप से जोड़ना देखा है, लेकिन जब मैं Message.Attachments.Item(1).Fields.Update पर कॉल करता हूं, तो ऑब्जेक्ट अपरिभाषित हो जाता है। मुझे लगता है कि अनुलग्नक के ContentMediaType को सेट करना, स्पष्ट रूप से इसे Fields की Update विधि का आह्वान करता है जो मुझे लगता है कि यह अप्रत्याशित व्यवहार के लिए ज़िम्मेदार है।

उचित फ़ाइल एक्सटेंशन को बनाए रखते हुए मैं "multipart/related" सामग्री प्रकार के साथ एमएमटीएम फ़ाइल कैसे प्राप्त कर सकता हूं?

+0

@IlyaKurnosov, मैंने माइक्रोसॉफ्ट आउटलुक 2010, ऐप्पल मेल (आईफोन पर), और मेरे वेब क्लाइंट (एक्सचेंज) की कोशिश की है। –

+0

संभावित रूप से संबंधित: http://stackoverflow.com/questions/31250/content-type-for-mht-files –

उत्तर

3

तो आपकी समस्या यह है कि कम से कम कुछ ईमेल क्लाइंट एमएचटीएम अनुलग्नक को गलत तरीके से सहेजते हैं यदि अनुलग्नक के लिए सामग्री प्रकार content-type="message/rfc822" के रूप में सेट किया गया है।

सबसे पहले, यह ध्यान देने योग्य है कि इस मुद्दे के मूल कारण का आपका विश्लेषण त्रुटिपूर्ण है। आप multipart/related एमआईएमई प्रकार के खेल में आता है, जहां आप उलझन में दिखाई देते हैं। वास्तव में, RFC 2557 यह नहीं बताता कि एमएचटीएम अनुलग्नक के अनुरूप शरीर भाग content-type="multipart/related" होना चाहिए। इसके बजाए, एमआईएमई मल्टीपार्ट/संबंधित एमएचटीएम फाइल की आंतरिक संरचना है। का हवाला देते हुए विकिपीडिया article:

एक MHTML फ़ाइल की सामग्री इनकोडिंग है जैसे कि यह एक HTML ई-मेल संदेश थे, MIME प्रकार बहुखण्डीय/संबंधित इस्तेमाल करते हैं।

आईई। यदि आप पाठ संपादक के साथ MHTML फ़ाइल को खोलने के लिए, आपको निम्न देखना चाहिए:

Content-Type: multipart/related; ... 

माइक्रोसॉफ्ट कहा गया है कि MHTML फ़ाइलों KB937912 में content-type="message/rfc822" साथ पेश की जानी चाहिए। जब आप AddAttachment विधि के माध्यम से ऐसी फ़ाइल संलग्न करते हैं तो यह वही है जो सीडीओ डिफ़ॉल्ट रूप से करता है। मेरा मानना ​​है कि ऐसा व्यवहार आरएफसी 2557 के किसी भी तरह से विरोधाभास नहीं करता है। आरएफसी के अनुसार:

कई दस्तावेज़ प्रारूप हैं ...जो दस्तावेज़ों को रूट संसाधन से जोड़ता है और उस रूट संसाधन के भीतर यूआरआई द्वारा संदर्भित सहायक संसाधनों की संख्या सहायक संसाधनों को निर्दिष्ट करता है। ई-मेल [एसएमटीपी], [आरएफसी 822] संदेशों में ऐसे बहु-संसाधन दस्तावेज़ भेजने में सक्षम होने की स्पष्ट आवश्यकता है।

इस दस्तावेज़ में परिभाषित मानक इस उद्देश्य के लिए एमआईएम-स्वरूपित [MIME1 से MIME5] संदेशों में ऐसे बहु-संसाधन दस्तावेज़ों को कुल करने के तरीके को निर्दिष्ट करता है।

संक्षेप में, आपको निश्चित रूप से multipart/related पर सामग्री प्रकार का एमएचटीएम अनुलग्नक सेट नहीं करना चाहिए।

जबकि message/rfc822 एमएचटीएम फाइलों के साथ उपयोग करने का तरीका लगता है, यह स्पष्ट रूप से प्रश्न में वर्णित समस्या को ट्रिगर करता है। मैंने Outlook 2010 और OWA 2010 के साथ परीक्षण किया, और इसे पुन: पेश करने में सक्षम था।

एमटीएमएल अनुलग्नकों के लिए विभिन्न ईमेल क्लाइंट्स द्वारा उपयोग किए जाने वाले वैकल्पिक सामग्री प्रकार application/octet-stream और application/x-mimearchive हैं। इन दोनों ने मेरे परीक्षणों में समस्या का प्रदर्शन नहीं किया।

+0

मैं आपके हिस्से पर शोध की सराहना करता हूं। आपका अंतिम अनुच्छेद संभावित वैकल्पिक सामग्री प्रकारों की रूपरेखा तैयार करता है, लेकिन आप यह नहीं समझाते कि मैं यह कैसे कर सकता हूं। मेरे द्वारा किए गए दृष्टिकोणों में से कोई भी काम नहीं करेगा। मैं सीडीओ में एक अनुलग्नक के सामग्री प्रकार को अद्यतन नहीं कर रहा हूं। शायद वीबीस्क्रिप्ट में ईमेल भेजने का दूसरा तरीका है? –

+1

@TylerCrompton अनुलग्नक की सामग्री प्रकार का अद्यतन निश्चित रूप से * सीडीओ के साथ संभव है। यह आपके लिए काम नहीं करता क्योंकि आपने इसे 'मल्टीपार्ट/संबंधित' पर सेट करने का प्रयास किया था। आपके द्वारा प्रश्न में दिखाए गए कोड में बस 'एप्लिकेशन/ऑक्टेट-स्ट्रीम' या 'एप्लिकेशन/एक्स-मिमर्चिव' का उपयोग करें। –