我需要在客户下订单时将文件附加到Magento发送的电子邮件中。
此附件可以是PDF,HTML或简单的TXT,并且必须包含订单摘要(SKU,数量,单价,总价)。
我怎样才能实现这一目标?
提前致谢!
答案 0 :(得分:12)
解决方案并不复杂,尽管您需要一些时间来实现它。我将简要解释所需的所有步骤。
主要步骤是:
1)您需要重写Mage_Sales_Model_Order
课程。覆盖该类中的`sendNewOrderEmail()'方法。
您需要撰写要发送给客户的附件。将原始的sendNewOrderEmail()
方法源代码复制到覆盖方法中,并将以下行放在$mailer->send()
之前(对于我们的示例,我们将采用简单的情况 - 我们将发送一个文本文件,仅包含Grand订单总数,附件将命名为“summary.txt”)
$fileContents = "Hello, here is the copy of your invoice:\n";
$fileContents .= sprintf("Grand total: %.2f", $this->getGrandTotal()) . "\n";
$fileContents .= "Thank you for your visit!";
$fileName = 'summary.txt';
$mailer->addAttachment($fileContents, $fileName);
2)重写Mage_Core_Model_Email_Template_Mailer
- 添加方法addAttachment($fileContents, $fileName)
,将附加的附件添加到受保护变量,存储附件数组。
在此课程中覆盖send()
方法。在该方法中,您需要将附件数组传递给发送的每个电子邮件模板。例如。添加像
$emailTemplate->setAttachments($this->getAttachments());
在行$emailTemplate->setDesignConfig...
之前
3)重写Mage_Core_Model_Email_Template
。
添加方法setAttachments($attachments)
,必须将传入附件设置为某个受保护变量。
在此课程中覆盖send()
方法。在该方法中,您需要向已发送的信件添加附件。把这些行放在
foreach ($this->getAttachments() as $atInfo) {
$attachment = $mail->createAttachment($atInfo['fileContents']);
$attachment->filename = $atInfo['fileName'];
}
在$mail->send()
之前。
这就是全部。对于Magento开发人员来说,完成这项任务真的不是很难。它只需要一些时间来编写内容,重写类和完成接口。