2013-03-04 9 views
12

मैं एक ईमेल में कुछ अनुलग्नक जोड़ने की कोशिश कर रहा हूं जो एक php wrapper के माध्यम से mandrill api का उपयोग करके भेजा जा रहा है। मैंने फाइल को सफलतापूर्वक संलग्न करने की कोशिश करने के लिए कई अलग-अलग चीजों की कोशिश की है लेकिन इसका कोई फायदा नहीं हुआ है। मैं केकेएफपी 2.x का उपयोग कर रहा हूं लेकिन मुझे नहीं लगता कि इस उदाहरण में कोई विशेष महत्व है (शायद यह करता है ?!)।मंड्रिल ईमेल अनुलग्नक फ़ाइल पथ

$mandrill = new Mandrill(Configure::read('Site.mandrill_key')); 
    $params = array(
     'html' => ' 
      <p>Hi '.$user['User']['name'].',</p> 
      <p>tIt is that time of the year again.<br /> 
      <a href="http://my-site.com/members/renewal">Please login to the website members area and upload your renewal requirements</a>.</p> 
      <p>Kind regards.</p>', 
     "text" => null, 
     "from_email" => Configure::read('Site.email'), 
     "from_name" => Configure::read('Site.title'), 
     "subject" => "Renewal Pending", 
     "to" => array(array('email' => $user['User']['email'])), 
     "track_opens" => true, 
     "track_clicks" => true, 
     "auto_text" => true, 
     "attachments" => array(
      array(
       'path' => WWW_ROOT.'files/downloads/renewals', 
       'type' => "application/pdf", 
       'name' => 'document.pdf', 
      ) 
     ) 
    ); 

    $mandrill->messages->send($params, true); 

} 

यह दिखाता है कि एक अनुलग्नक ईमेल में जोड़ दिया गया है और एक पीडीएफ है, लेकिन वास्तविक पीडीएफ नहीं किया गया है: मैं https://bitbucket.org/mailchimp/mandrill-api-php

यहाँ पर php आवरण प्रकार का बंदर द्वारा बनाए रखा का उपयोग कर रहा है कोड जुड़ा हुआ। मैं भी में के रूप में फ़ाइल पर सीधे पथ जोड़कर की कोशिश की:

"attachments" => array(
      array(
       'type' => "application/pdf", 
       'name' => WWW_ROOT.'files/downloads/renewals/document.pdf', 
      ) 

मैं googled है और हर लेख मैं पा सकते हैं पढ़ा लेकिन मैं कैसे एक प्रकार का बंदर के लिए सही ढंग से करने के लिए पथ निर्दिष्ट करना चाहिए के बारे में कोई विशेष संदर्भ नहीं मिल सकता है मेरा लगाव संलग्न करें।

किसी भी मदद की सराहना की जाएगी।

+0

फिर यह टैग किया गया केकफ़्फ़ क्यों है? आप जो भी उपयोग कर रहे हैं उससे कम से कम लिंक करना बुद्धिमान होगा। हम में से कोई भी क्रिस्टल बॉल नहीं है;) – mark

+1

मैं अपने ढांचे के रूप में केकेएफपी 2.x का उपयोग कर रहा हूं लेकिन मुझे नहीं लगता था कि यह महत्वपूर्ण था। मैंने सोचा कि यह भविष्य केकफ़्प लोगों के लिए उपयोगी हो सकता है जो इस संदर्भ को खोजने के लिए मैंडिल का उपयोग करने का प्रयास कर रहे हैं। मैं अपनी पोस्ट संपादित करूँगा और उल्लेख करूंगा कि मैं केकेएफपी का उपयोग कर रहा हूं। यदि आपके पास केकफ़्पी के साथ मैंडिल का उपयोग करने का अनुभव है तो मैं इनपुट की सराहना करता हूं। – Manu

+0

मेरा मतलब है कि आप एक वर्ग (मंड्रिल) के बारे में एक प्रश्न कैसे पूछ सकते हैं जिसे किसी ने कभी नहीं देखा है? यह मेरे जैसे पूछ रहा है कि मैं अपने उन्नत अवांछित वर्ग की मेरी superAwesomeFooBar() विधि को कैसे हल कर सकता हूं बिना स्रोत कोड के स्थान का उल्लेख किए .. आप इसे एक शॉट देना चाहते हैं? :) – mark

उत्तर

23

ऐसा लगता है कि आप path नामक पैरामीटर पास कर रहे हैं, लेकिन मंड्रिल एपीआई संलग्नक के लिए फ़ाइल का पथ नहीं लेता है। यदि आप प्रेषण या प्रेषण-टेम्पलेट कॉल का उपयोग कर रहे हैं, तो अनुलग्नक तीन कुंजी के साथ एक सहयोगी सरणी (हैश) होना चाहिए: प्रकार, नाम और सामग्री।

सामग्री पैरामीटर को बेस 64 एन्कोडेड स्ट्रिंग के रूप में फ़ाइल की सामग्री होना चाहिए, इसलिए पथ की बजाय, आप फ़ाइल सामग्री प्राप्त करना चाहेंगे, बेस 64 उन्हें एन्कोड करें, और फिर उन्हें content नामक पैरामीटर में पास करें path

आप मापदंडों का पूरा विवरण देख सकते हैं, अनुलग्नकों के लिए शामिल हैं, यहां का बंदर एपीआई डॉक्स में: https://mandrillapp.com/api/docs/messages.html#method=send

+2

धन्यवाद कैटलिन। मेरी अज्ञानता के लिए खेद है। मैं मंड्रिल का उपयोग करने से परिचित नहीं हूं और मेरे पास बेस 64 एन्कोडेड नहीं है या उस मामले के लिए संलग्न फाइलें पहले ईमेल पर नहीं हैं। अब तक मैं मंड्रिल से बहुत प्रभावित हूं और आपकी त्वरित प्रतिक्रिया की सराहना करता हूं! – Manu

+0

हाँ, हमारे साथ स्टैक ओवरफ्लो में कूदने के लिए धन्यवाद:) यह बहुत उपयोगी है। – Costa

23

ठीक है। तो कैटलिन को उनके इनपुट के लिए धन्यवाद। पीएचपी तरीका यह से निपटने के लिए फ़ाइल प्राप्त करने के लिए है और फिर इसे base64_encode:

"attachments" => array(
     array(
      'content' => $attachment_encoded, 
      'type' => "application/pdf", 
      'name' => 'file.pdf', 
     ) 

तो आसान:

$attachment = file_get_contents(WWW_ROOT.'files/downloads/file.pdf'); 
$attachment_encoded = base64_encode($attachment); 

और उसके बाद एक प्रकार का बंदर सरणी के संलग्नक भाग में आप पारित! धन्यवाद कैटलिन!

+0

हाय @ मॅनू, इसे डीकोड करने के बारे में क्या? मैं डीकोडेड बेस 64 कैसे सहेजूं? – CodeGuru

+0

मुझे नहीं पता कि आप क्या हासिल करने की कोशिश कर रहे हैं लेकिन यह धागा मैंडिल एपीआई का उपयोग करके फाइलों को कैसे संलग्न और भेजना है। जब आप फ़ाइल प्राप्त करते हैं तो आपको फ़ाइल में कुछ भी करने की आवश्यकता नहीं होती है। यह किसी भी ईमेल अनुलग्नक की तरह डाउनलोड करने के लिए उपलब्ध है। – Manu

+0

आपका मतलब है कि मंड्रिल इसे डाउनलोड करने के लिए एक लिंक प्रदान करेगा? – CodeGuru

संबंधित मुद्दे