Magento: ईमेल में फ़ाइल अटैचमेंट भेजें


9

एक कस्टम मॉड्यूल में, मैं ईमेल भेजने के लिए इस फ़ंक्शन का उपयोग करता हूं:

public function sendMail($errorCod, $errorMsg) {

    $mail = Mage::getModel('core/email');

    $recipients = array(
            Mage::getStoreConfig('trans_email/ident_custom1/name') => Mage::getStoreConfig('trans_email/ident_custom1/email'),  
            Mage::getStoreConfig('trans_email/ident_custom2/name') => Mage::getStoreConfig('trans_email/ident_custom2/email')
    );

    foreach ($recipients as $recipient):
        $mail->setToEmail($recipient);

        $mailBody  = "<b>Error Code: </b>".$errorCod."<br />";
        $mailBody .= "<b>Error Massage: </b>".$errorMsg."<br />";

        $mail->setBody($mailBody);
        $mail->setSubject('Lorem Ipsum');
        $mail->setFromEmail(Mage::getStoreConfig('trans_email/ident_general/email'));
        $mail->setFromName("Lorem Ipsum");
        $mail->setType('html');

        try {
            $mail->send();
        }
        catch (Exception $e) {
    }

    endforeach;

}

मैं एक ही ई-मेल में 2 अटैचमेंट फाइल भेजने की कोशिश करता हूं।

Mage_Core_Model_Email_Template मॉडल का उपयोग किए बिना मैं यह कैसे कर सकता हूं।

मदद के लिए बहुत बहुत धन्यवाद।

जवाबों:


14

Zend_Mail का उपयोग करने का प्रयास करें। देख:

public function sendMail($errorCod = "", $errorMsg = "")
{

    $mail = new Zend_Mail('utf-8');

    $recipients = array(
        Mage::getStoreConfig('trans_email/ident_custom1/name') => Mage::getStoreConfig('trans_email/ident_custom1/email'),
        Mage::getStoreConfig('trans_email/ident_custom2/name') => Mage::getStoreConfig('trans_email/ident_custom2/email'),
    );
    $mailBody   = "<b>Error Code: </b>" . $errorCod . "<br />";
    $mailBody .= "<b>Error Massage: </b>" . $errorMsg . "<br />";
    $mail->setBodyHtml($mailBody)
        ->setSubject('Lorem Ipsum')
        ->addTo($recipients)
        ->setFrom(Mage::getStoreConfig('trans_email/ident_general/email'), "FromName");

    //file content is attached
    $file       = Mage::getBaseDir('var') . DS . 'log' . DS . 'exception.log';
    $attachment = file_get_contents($file);
    $mail->createAttachment(
        $attachment,
        Zend_Mime::TYPE_OCTETSTREAM,
        Zend_Mime::DISPOSITION_ATTACHMENT,
        Zend_Mime::ENCODING_BASE64,
        'attachment_1.log'
    );
    $file       = Mage::getBaseDir('var') . DS . 'log' . DS . 'system.log';
    $attachment = file_get_contents($file);
    $mail->createAttachment(
        $attachment,
        Zend_Mime::TYPE_OCTETSTREAM,
        Zend_Mime::DISPOSITION_ATTACHMENT,
        Zend_Mime::ENCODING_BASE64,
        'attachment_2.log'
    );

    try {
        $mail->send();
    } catch (Exception $e) {
        Mage::logException($e);
    }
}

वास्तव में, मैंने कुछ समय पहले Zend_Mail के साथ इस समारोह को लागू किया था।
अन्ना वोक्कल

मेरे पास इसका एकमात्र मुद्दा यह है कि यदि आप एक साझा होस्टिंग सर्वर पर हैं, भले ही यदि आप एक प्रेषक सेट करते हैं, तो यह स्वयं सर्वर का अनुमत प्रेषक नहीं है (यदि आप इसके लिए ईमेल हेडर देखते हैंReceived-SPF:
Moose

मैगेंटो पहले से ही अटैचमेंट के साथ ईमेल भेजने का काम करता है, मुझे उसके कार्यों को दरकिनार करने के लिए प्रासंगिक नहीं लगता है
डिपेंडेंसीहेल

6

बस एक और जवाब पाने के लिए यहां आप फिर से लिख सकते हैं Mage/Core/Model/Email/Template.phpऔर एक addAttachmentफ़ंक्शन बना सकते हैं । यह उदाहरण एक पीडीएफ जोड़ देगा लेकिन आप इसे किसी भी फ़ाइल प्रकार के साथ काम करने के लिए बढ़ा सकते हैं।

public function addAttachment(Zend_Pdf $pdf){
    $file = $pdf->render();
    $attachment = $this->getMail()->createAttachment($file);
    $attachment->type = 'application/pdf';
    $attachment->filename = 'yourfile.pdf';
}

3

अनुलग्नक फ़ाइल के साथ मेल भेजने के लिए इस कोड को किसी भी phtml या नियंत्रक में कॉपी करें:

  $mailTemplate = Mage::getModel('core/email_template');
  $mailTemplate->setSenderName('Sender Name'); 
  $mailTemplate->setSenderEmail('sender@sender.email');
  $mailTemplate->setTemplateSubject('Subject Title');
  $mailTemplate->setTemplateText('Body Text');
  // add attachment
  $mailTemplate->getMail()->createAttachment(
          file_get_contents(Mage::getBaseDir('base') . '/media/file/file.pdf'), //location of file
          Zend_Mime::TYPE_OCTETSTREAM,
          Zend_Mime::DISPOSITION_ATTACHMENT,
          Zend_Mime::ENCODING_BASE64,
          'file.pdf'
  );
  $mailTemplate->send('toemail@email.com','subject','set message');

धन्यवाद यह काम कर रहा है। लेकिन अंतिम पंक्ति में 'विषय' और 'सेट संदेश' का उपयोग क्या है क्योंकि जैसा कि मैं देख सकता हूं कि विषय पहले से ही पंक्ति 4 पर सेट है और पंक्ति 5 पर संदेश सेट है?
सर्वग्य

धन्यवाद @ मेरे पर्यवेक्षक में आपके लिए इस्तेमाल किया गया कोड :) :)
राकेश डोंगा

हां, सीधे Zend_Mail का उपयोग करने की आवश्यकता नहीं है
निर्भरताहेल

2

// 1 मैंने छवियों को सहेजने / अपलोड करने के लिए मीडिया निर्देशिका में अनुरोध के रूप में एक अनुरोध उद्धरण फ़ोल्डर का उपयोग किया

// 2 ट्रांजेक्शनल ईमेल में पास होने के लिए कस्टम चर की एक सरणी है। // ईमेल टेम्प्लेट मैजेंटो एडमिन में बनाया गया था और इसका टेम्प्लेट 3

// कोड को Magento 1.9.1.0 पर परीक्षण किया गया है

// कोड नीचे शुरू होता है

$uploadfilename = '';

if( !empty($_FILES["rfloorplanattachment"]["name"])  )
{

    $image_ext = end(explode('.',$_FILES["rfloorplanattachment"]["name"]));
    $allowed_ext =  array('gif','png' ,'jpg','jpeg','pdf','doc','docx','rtf','odt');

    $uploadfilename = md5(substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, rand(1,100).rand(1,100))).str_replace(" ","_",$_FILES["rfloorplanattachment"]["name"]); 
    $source_upl         = $_FILES["rfloorplanattachment"]["tmp_name"];
    $target_path_upl = Mage::getBaseDir('media').DS.'requestquote'.DS.$uploadfilename;  
    if(in_array($image_ext ,$allowed_ext ) ) {
        @move_uploaded_file($source_upl, $target_path_upl);
    }
}


$senderName = Mage::getStoreConfig('trans_email/ident_general/name');
$senderEmail = Mage::getStoreConfig('trans_email/ident_general/email');

$templateId = 3;
$sender = Array('name' => $senderName,'email' => $senderEmail);


$requestquotesvars = array(
            'firmname'     =>  $customer->getFirstname()
        );


$emaiName = 'Request Quote Firms';

$storeId = Mage::app()->getStore()->getId();

$translate = Mage::getSingleton('core/translate');
$transactionalEmail = Mage::getModel('core/email_template');
if(file_exists(Mage::getBaseDir('media').DS.'requestquote'.DS.$uploadfilename) )
{
$transactionalEmail->getMail()
                ->createAttachment(
        file_get_contents(Mage::getBaseDir('media').DS.'requestquote'.DS.$uploadfilename),
        Zend_Mime::TYPE_OCTETSTREAM,
        Zend_Mime::DISPOSITION_ATTACHMENT,
        Zend_Mime::ENCODING_BASE64,
        basename($uploadfilename)
    );
}
$transactionalEmail->sendTransactional($templateId, $sender, $companymail, $emailName, $requestquotesvars, $storeId);
$translate->setTranslateInline(true);

   unlink(Mage::getBaseDir('media').DS.'requestquote'.DS.$uploadfilename);

2

आनंद लें: काम करने का उदाहरण

$mail = new Zend_Mail();
$mail->setType(Zend_Mime::MULTIPART_RELATED);
$mail->setBodyHtml($html_body);
$mail->setFrom('support@example.com', 'Example');
$mail->addTo('your_email@gmail.com', 'Arslan');
$mail->setSubject('Sending email using Zend Framework');
$dir = Mage::getBaseDir();
$path = "test.html";  // any file named test.html at root
$file = $mail->createAttachment(file_get_contents($path));
$file ->type        = 'text/csv';
$file ->disposition = Zend_Mime::DISPOSITION_INLINE;
$file ->encoding    = Zend_Mime::ENCODING_BASE64;
$file ->filename    = 'test.html';
try {
    //Confimation E-Mail Send
    $mail->send();
}
catch(Exception $error) {
    Mage::getSingleton('core/session')->addError($error->getMessage());
    return false;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.