2

次のコードは、magento モデルを介して (特定のテンプレート ID の) トランザクション メールを送信しているように見えます。

私がそれを機能させることができない唯一のビットは、トランザクション電子メールに PDF が添付されていることです。

これは私がこれまでに持っているコードです:

function GetTransactionalSender() {
    return array(
        'name'  => Mage::getStoreConfig('trans_email/ident_support/name'),
        'email' => Mage::getStoreConfig('trans_email/ident_support/email')
    );
}

function SendTransactionalEmail($templateId, $recepientEmail, $recepientName, $vars, $storeId, $pdf_attachment = '') {
    $status = false;
    try {
        $transactionalEmail = Mage::getModel('core/email_template')
            ->setDesignConfig(array('area' => 'frontend', 'store' => $storeId));;
        if (!empty($pdf_attachment) && file_exists($pdf_attachment)) {
            $transactionalEmail
                ->getMail()
                ->createAttachment(file_get_contents($pdf_attachment), 'application/pdf')
                ->filename = basename($pdf_attachment);
        }
        $transactionalEmail
            ->sendTransactional($templateId, GetTransactionalSender(), $recepientEmail, $recepientName, $vars);
        $status = true;
    } catch (Exception $e) { }
    return $status;
}

$template_id = 1;
$to_email = 'user@domain.com';
$to_name = 'User Name';
$vars = array();
$store_id = 1
$pdf_file = '/full/path/to/my/file.pdf';
$sent = SendTransactionalEmail($template_id, $to_email, $to_name, $vars, $store_id, $pdf_file);

電子メールが送信されると、添付ファイルの名前はATT00001.pdfという名前で表示され、開くと空白のページになります。

私がここで間違っていることは何か分かりますか? Magento モデルを介して取引メールに PDF を添付しますか?

4

2 に答える 2

7

ここで私の問題の解決策を見つけました: https://stackoverflow.com/a/10837774/2332336

以下は、トランザクション メールに添付ファイルを追加するための正しいスニペットです。

if (!empty($pdf_attachment) && file_exists($pdf_attachment)) {
    $transactionalEmail
        ->getMail()
        ->createAttachment(
            file_get_contents($pdf_attachment),
            Zend_Mime::TYPE_OCTETSTREAM,
            Zend_Mime::DISPOSITION_ATTACHMENT,
            Zend_Mime::ENCODING_BASE64,
            basename($pdf_attachment)
        );
}
于 2013-06-18T09:29:53.207 に答える
2

//1アップロードされた画像を保存するために、メディア ディレクトリのrequestquoteとして request quote フォルダーを使用しました //

//2 トランザクション メールに渡されるカスタム変数の配列があります //メール テンプレートは magento admin で作成され、そのテンプレート ID は 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);
于 2015-01-30T16:11:43.180 に答える