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 Model

ขอบคุณมากสำหรับความช่วยเหลือ

คำตอบ:


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 เมื่อไม่นานมานี้
Anna Völkl

เพียงคนเดียวที่ออกฉันมีกับนี้คือถ้าคุณอยู่ในเซิร์ฟเวอร์โฮสติ้งที่ใช้ร่วมกันโดยไม่คำนึงถึงถ้าคุณตั้งค่าผู้ส่งก็ไม่ได้รับอนุญาตส่งเซิร์ฟเวอร์เอง (ถ้าคุณมองไปที่ส่วนหัวของอีเมลสำหรับReceived-SPF:
Moose

Magento จัดการกับการส่งอีเมลพร้อมไฟล์แนบแล้วฉันไม่พบว่าเกี่ยวข้องกับการข้ามฟังก์ชันของมัน
DependencyHell

6

เพียงเพื่อให้ได้คำตอบอื่นที่นี่คุณยังสามารถเขียนMage/Core/Model/Email/Template.phpและสร้างaddAttachmentฟังก์ชันใหม่ได้ ตัวอย่างนี้จะเพิ่ม pdf แต่คุณสามารถขยายเพื่อให้ทำงานกับไฟล์ประเภทใดก็ได้

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');

ขอบคุณมันทำงานอยู่ แต่การใช้ 'subject' และ 'set message' ในบรรทัดสุดท้ายเพราะฉันจะเห็นว่าหัวเรื่องถูกตั้งค่าเป็นบรรทัดที่ 4 แล้วและข้อความถูกตั้งค่าที่บรรทัดที่ 5
Sarvagya

ขอบคุณ @prince รหัสของคุณที่ใช้สำหรับฉันในผู้สังเกตการณ์ :)
Rakesh Donga

ใช่ไม่จำเป็นต้องใช้ Zend_Mail โดยตรง
DependencyHell

2

// 1 ฉันใช้โฟลเดอร์ขอใบเสนอราคาเป็น requestquote ในไดเรกทอรีสื่อสำหรับการบันทึก // ภาพที่อัปโหลด

// 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;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.