2014-05-05 9 views
6

के रूप में गतिशील रूप से जेनरेट की गई फ़ाइल भेजें, मैं वर्तमान में उपयोगकर्ताओं को कुछ पैरामीटर चुनने की अनुमति देता हूं और उन पर आधारित, मैं एक सीएसवी फ़ाइल उत्पन्न करता हूं और उपयोगकर्ताओं को डाउनलोड के रूप में धक्का देता हूं। जैसेईमेल

send_data <generated csv data>, :disposition => 'attachment' :type => 'text/csv' 

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

मैं सामान्य रूप से एक ईमेल भेज सकता हूं। मैं एक संलग्नक के रूप में पहले से मौजूद फाइल भेज सकता हूं। मैं इस फाइल को सहेजना नहीं चाहता हूं। मैं इसे सीधे उपयोगकर्ता को ईमेल करना चाहता हूं।

मैं यह कैसे कर सकता हूं?

+0

स्टैक ओवरफ़्लो में आपका स्वागत है! – fotanus

उत्तर

6

@ जुआनपास्टस - मैंने आपके द्वारा सुझाए गए तरीके से ऐसा किया। लेकिन इसने फ़ाइल को ईमेल निकाय में एक पाठ के रूप में प्रदर्शित करने का कारण बना दिया।

इस तरह यह ईमेल में दिखाई दिया।

सामग्री-प्रकार: टेक्स्ट/सीएसवी; वर्णसेट = यूटीएफ -8; फ़ाइल नाम = data.csv सामग्री-स्थानांतरण-एन्कोडिंग: 7 बिट सामग्री-विस्थापन: लगाव; फ़ाइल नाम = data.csv सामग्री-ID: xyzxyz [पाठ के रूप में csv फ़ाइल की सामग्री]

तब मैं संदेश के मुख्य भाग शामिल है और यह काम किया।

mail(to: user.email, subject: 'XYZ', body: 'XYZ') 

इसने ईमेल को शरीर और विषय प्रदान करने का कारण बताया और फ़ाइल इसके बजाय अनुलग्नक के रूप में दिखाई दी।

+0

मैं अब यह करने की कोशिश कर रहा हूं। क्या आप मुझे वह कोड दिखा सकते हैं जिसका उपयोग आप 'csv_data' के लिए करते हैं? मैं इसका पता लगाने की कोशिश कर रहा हूं कि इसका संदर्भ कैसे लें। वर्तमान में जब मेरा ऐप एक सीएसवी फ़ाइल उत्पन्न करता है, तो यह मुख्य निर्देशिका में सहेजा जाता है जहां 'ऐप',' डीबी', 'कॉन्फ़िगर' झूठ बोलता है। क्या आप इस ब्लॉक से अलग कुछ उपयोग करते हैं: 'CSV.open ("my.csv", "w") करते हैं –

5

मैं इस परीक्षण किया है नहीं है, लेकिन यह काम करना चाहिए:

class YourMailer < ActionMailer::Base 
    def csv_mail(user, csv_data) 
    attachments['a.csv'] = csv_data 
    mail(to: user.email) 

    end 
end 

और अपने नियंत्रक में:

YourMailer.csv_mail(user, csv_data).deliver 

attachments और inline attachments देखें।

+0

धन्यवाद ... कि लगभग काम किया। –