2

次のコードを使用して請求書を読み込み、プログラムで電子メールを送信します。

<?php
   $invoice = Mage::getModel('sales/order_invoice')
   ->loadByIncrementId($invoice_queue['increment_id']);
   if (null !== $invoice->getId()){
      $invoice->sendEmail();
      echo "- Done Invoice #". $invoice_queue['increment_id'] ."\r\n";
   }
   $invoice = null;
?>

これにより、請求書の電子メールが正しく送信されているようです。ただし、請求書の PDF 添付ファイルは電子メールにはありません。

Magento 経由でメールを送信する場合は、機能します。

sendEmail()関数を呼び出すときに、PDF を添付する方法はありますか?

4

1 に答える 1

1

請求書の電子メールを送信するには、上書きする必要があります

  1. mage/core/model/email/template.php で、ファイルの最後にこのメソッドを追加します。

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

2 sales/model/order/Invoice.php で、コメントの間にコード (2 行のコード) を関数 sendEmail に次のように追加します。

<?php 
public function sendEmail($notifyCustomer=true, $comment='')
        {
            if (!Mage::helper('sales')->canSendNewInvoiceEmail($this->getOrder()->getStore()->getId())) {
                return $this;
            }

            $currentDesign = Mage::getDesign()->setAllGetOld(array(
                'package' => Mage::getStoreConfig('design/package/name', $this->getStoreId()),
                'store'   => $this->getStoreId()
            ));

            $translate = Mage::getSingleton('core/translate');
            /* @var $translate Mage_Core_Model_Translate */
            $translate->setTranslateInline(false);

            $order  = $this->getOrder();
            $copyTo = $this->_getEmails(self::XML_PATH_EMAIL_COPY_TO);
            $copyMethod = Mage::getStoreConfig(self::XML_PATH_EMAIL_COPY_METHOD, $this->getStoreId());

            if (!$notifyCustomer && !$copyTo) {
                return $this;
            }

            $paymentBlock   = Mage::helper('payment')->getInfoBlock($order->getPayment())
                ->setIsSecureMode(true);

            $mailTemplate = Mage::getModel('core/email_template');

            if ($order->getCustomerIsGuest()) {
                $template = Mage::getStoreConfig(self::XML_PATH_EMAIL_GUEST_TEMPLATE, $order->getStoreId());
                $customerName = $order->getBillingAddress()->getName();
            } else {
                $template = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, $order->getStoreId());
                $customerName = $order->getCustomerName();
            }
            // attachment here
            $pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf(array($this));
            $mailTemplate->addAttachment($pdf);

            if ($notifyCustomer) {
                $sendTo[] = array(
                    'name'  => $customerName,
                    'email' => $order->getCustomerEmail()
                );
                if ($copyTo && $copyMethod == 'bcc') {
                    foreach ($copyTo as $email) {
                        $mailTemplate->addBcc($email);
                    }
                }
        // enter code here
            }

            if ($copyTo && ($copyMethod == 'copy' || !$notifyCustomer)) {
                foreach ($copyTo as $email) {
                    $sendTo[] = array(
                        'name'  => null,
                        'email' => $email
                    );
                }
            }

            foreach ($sendTo as $recipient) {
                $mailTemplate->setDesignConfig(array('area'=>'frontend', 'store'=>$order->getStoreId()))
                    ->sendTransactional(
                        $template,
                        Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $order->getStoreId()),
                        $recipient['email'],
                        $recipient['name'],
                        array(
                            'order'       => $order,
                            'invoice'     => $this,
                            'comment'     => $comment,
                            'billing'     => $order->getBillingAddress(),
                            'payment_html'=> $paymentBlock->toHtml(),
                        )
                    );
            }

            $translate->setTranslateInline(true);

            Mage::getDesign()->setAllGetOld($currentDesign);

            return $this;
        }  ?>

バック オフィスから請求書を作成し、顧客に通知することを選択した場合、PDF 添付ファイルも送信する必要があります。

于 2015-01-31T09:16:05.363 に答える