2016-04-19 4 views
5

में ईमेल करने के लिए ऑटो जेनरेटेड पीडीएफ संलग्न करना मेरे पास एक बहुत ही विशिष्ट आवश्यकता है। मेरे वेब ऐप में, मुझे डेटाबेस मानों और एक ईमेल बॉडी से पीडीएफ चालान उत्पन्न करना होगा। मैं आसानी से एसएमटीपी का उपयोग करके इसे भेज सकता हूं जो सही काम करता है।एएसपीनेट ऐप

लेकिन समस्या यह है कि हम हमेशा सही होने के लिए सिस्टम पर भरोसा नहीं कर सकते हैं, और यह एक चालान है। इसलिए, हमें SMTP का उपयोग करने के बजाय डिफ़ॉल्ट मेल क्लाइंट खोलने की आवश्यकता है। अभी, मेरे पास निम्नलिखित कोड

//Code to create the script for email 
string emailJS = ""; 
emailJS += "window.open('mailto:[email protected]?body=Test Mail" + "&attachment=" + emailAttachment + "');"; 
//Register the script for post back 
ClientScript.RegisterStartupScript(this.GetType(), "mailTo", emailJS, true); 

यह ईमेल को पूरी तरह से खोलता है, लेकिन कोई अनुलग्नक काम नहीं कर रहा है। पथ /Web/Temp/123.pdf होना चाहिए।

यदि मैं नीचे की तरह सामान्य यूआरएल के समान पथ का उपयोग करता हूं, तो यह फ़ाइल को नई विंडो में ठीक से खोलता है।

ClientScript.RegisterStartupScript(this.GetType(), "newWindow", "window.open('/Web/Temp/123.pdf');", true); 

तो, स्पष्ट रूप से फ़ाइल मौजूद है, लेकिन यह सर्वर पर मौजूद है। दूसरी ओर आउटलुक क्लाइंट मशीन पर खुलता है। इसलिए, मैं C:\Web\Temp\123.pdf जैसे पूर्ण निर्धारित पथ का उपयोग नहीं कर सकता। यदि मैं कोशिश करता हूं, तो यह क्लाइंट मशीन पर फ़ाइल ढूंढने का प्रयास करेगा, जहां फ़ोल्डर स्वयं मौजूद नहीं हो सकता है।

मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं यहां क्या कर सकता हूं। अगर कोई और तरीका है तो मुझे कोशिश करनी चाहिए।

पीएस नहीं, मैं सीधे ईमेल नहीं भेज सकता। इससे मेरे लिए भविष्य में नरक बहुत अधिक समस्या होगी।

संपादित करें: मुझे एक अजीब समस्या भी मिली। अगर मैं अनुलग्नक में फ़ाइल पथ में एक डबल कोट जोड़ता हूं, तो \ स्वचालित रूप से जोड़ा जाता है। @"&attachment=""" + Server.MapPath(emailAttachment) + @"""');" मुझे आउटपुट &attachment=\"C:\Web\Temp\123.pdf\" के रूप में देता है।

मैं उस डबल कोट से बचने की कोशिश कर रहा हूं और किसी भी तरह से यह स्लैश जोड़ता है। मुझे पता है कि यह एक पूरी तरह से अलग समस्या है, लेकिन सोचा कि मुझे एक नया प्रश्न बनाने के बजाय यहां उल्लेख करना चाहिए।

संपादित करें: मैंने स्थानीयहोस्ट पर एक निश्चित पथ की कोशिश की। इसलिए, मैं मूल रूप से उसी मशीन पर ऐप का परीक्षण कर रहा हूं जहां फ़ाइल संग्रहीत हो रही है। अभी भी, कोई अनुलग्नक बिल्कुल नहीं।

string emailJS = ""; 

emailJS += @"window.open('mailto:[email protected]?body=Test Mail" + emailAttachment + @"&attachment="; 
emailJS += @"""D:\Dev\CSMS\CSMSWeb\Temp\635966781817446275.Pdf""');"; 
//emailJS += Server.MapPath(emailAttachment) + @"');"; 
//Register the script for post back 
ClientScript.RegisterStartupScript(this.GetType(), "mailTo", emailJS, true); 

यह सुनिश्चित करने के लिए पथ अपडेट किया गया है कि यह उचित है। अब, यह command line argument not valid कहकर त्रुटि फेंकता है।

संपादित करें:

वहाँ किसी भी अन्य विधि मैं कोशिश कर सकता है? मेरे पास सर्वर की तरफ फ़ाइल पथ है। हो सकता है कि मैं क्लाइंट मशीन पर कुछ डिफ़ॉल्ट फ़ोल्डर में फ़ाइल को स्वचालित रूप से डाउनलोड कर सकूं और वहां से खुलूं? क्या यह संभव है?

संपादित करें: मैंने एक और विकल्प की कोशिश की।

emailJS += @"mailto:[email protected]?body=Test Mail" + @"&attachment="; 
emailJS += @"\\localhost\CSMSWeb\Temp\635966781817446275.Pdf"; 
//emailJS += Server.MapPath(emailAttachment) + @"');"; 
Process.Start(emailJS); 

Process.Start लाइन काम करता है लेकिन यह कुछ भी नहीं करता है। शुरू करने की कोई प्रक्रिया नहीं है, कोई त्रुटि नहीं है।

संपादित करें: याय। अंततः उपयोगकर्ता को डिफ़ॉल्ट मेल क्लाइंट खोलने के बजाय विषय और शरीर को प्रदर्शित करने के लिए एक अलग रूप का उपयोग करने के लिए स्वीकृति मिल गई। हालांकि, मैं अभी भी इस समस्या को हल करना पसंद करूंगा।

+0

है है यह इंटरनेट एप्लिकेशन जिस पर आप काम कर रहे हैं? यदि ऐसा है, तो यह कुछ प्रतिबंधों के साथ किया जा सकता है, अन्यथा यह नहीं कर सकता है। – Andrei

+0

हां, इंट्रानेट एप्लिकेशन। – jitendragarg

उत्तर

2

तो, यहां समस्या यह तथ्य है कि mailto केवल अनुलग्नक के लिए सीधे फ़ाइल पथ का समर्थन करता है।यही है, नेटवर्क का उपयोग करने के लिए पथ होना चाहिए, या नेटवर्क के भीतर इंट्रानेट पथ होना चाहिए।

दूसरे शब्दों में, http://yourapp/Web/Temp/123.pdf जैसे पथ काम नहीं करेंगे, और /Web/Temp/123.pdf अनिवार्य रूप से वही काम नहीं करेगा। ये पथ नहीं हैं, लेकिन उन फ़ाइलों के लिंक जिन्हें डाउनलोड और स्थानीय रूप से संग्रहीत किया जाना चाहिए, उन्हें संलग्नक के रूप में उपयोग करने से पहले - मेलटो प्रोटोकॉल के लिए इसका कोई समर्थन नहीं है।

हालांकि, बाद से अपने आवेदन इंट्रानेट है, क्या तुम कर सकते हो यकीन है कि उपयोगकर्ताओं को अपने सर्वर पर कुछ नेटवर्क साझा फ़ोल्डर के लिए उपयोग किया इरादा बनाने के लिए, और उसके बाद फाइल करने के लिए नेटवर्क पथ के साथ उन्हें प्रदान करना है, कि \\theserver\files\123.pdf

+0

तो, इस मामले में, जब मैं अपने पीसी पर डीबगिंग कर रहा हूं, \\ localhost \ web \ temp \ 123.pdf' या 'C: \ web \ temp.pdf'। क्या आवश्यकता होगी? – jitendragarg

+0

कोई नहीं। सबसे पहले आपको एक साझा फ़ोल्डर बनाना होगा, और इस प्रक्रिया में विंडोज़ आपको नेटवर्क पथ दिखाएगी। यही वह चीज है जिसकी आपको आवश्यकता है। दोबारा, सुनिश्चित करें कि आपके ग्राहकों को इस फ़ोल्डर में फ़ाइलों का उपयोग करने की अनुमति है – Andrei

+0

ठीक है, बस परीक्षण के लिए, मैंने यही किया है। एक निश्चित रास्ता सीधे। स्थानीय मशीन पर डिबगिंग करते समय भी यह असफल रहा। प्रश्न में संपादन की जांच करें और देखें कि क्या आप इस मुद्दे को समझ सकते हैं। शायद मैं यहाँ कुछ और याद कर रहा हूँ। मेरा मतलब है, इस मामले में, सर्वर क्लाइंट के समान है, इसलिए दृष्टिकोण के पास सीधे पहुंच है। मैंने फ़ाइल पथ से भी बचने के लिए सुनिश्चित किया है। अभी भी एक ही समस्या है। : / – jitendragarg