【问题标题】:Magento: previewing/testing transactional emails with actual data, without actually sending them?Magento:使用实际数据预览/测试交易电子邮件,而不实际发送它们?
【发布时间】:2012-12-11 16:10:15
【问题描述】:

我正在编辑一些包含在 Magento 交易电子邮件中的 phtml 文件,但为了测试更改,我必须实际发送电子邮件。在(例如)订单确认电子邮件的情况下,这意味着我每次想要测试电子邮件时都必须下订单!

在后端选择“预览电子邮件”没有帮助,因为电子邮件不包含可见的订单数据。

有没有一种方法可以预览交易电子邮件,但让它与订单数据一起呈现?

【问题讨论】:

  • 你可以硬编码它来发送电子邮件给你吗?
  • 作为“预览电子邮件”功能的一部分,您的意思是?可能,虽然我不确定如何。而且我不知道如何在发送之前将订单数据注入其中。
  • 为这种情况创建一个开发环境总是一个好主意。此外,您不必创建新订单,您可以重新发送以前的订单电子邮件(通过转到该订单并单击重新发送电子邮件)
  • 重新发送电子邮件是一个很好的提示。谢谢你。如果您想将此作为官方答案,我会接受。否则我会回答的。
  • 所有其他电子邮件通知呢?

标签: php oop magento


【解决方案1】:

来自用户 R.S:

您不必创建新订单,您可以重新发送以前的订单电子邮件(通过转到该订单并单击重新发送电子邮件)。

这是我在使用模板时发现的最接近快速重新测试电子邮件的方法。谢谢 R.S!

【讨论】:

  • 如果新订单邮件已经发送,可能不会再次发送。检查Mage_Sales_Model_Order::sendNewOrderEmail() 是否有if ($this->getEmailSent()) { return $this; } 测试。如果是这样,请暂时将其注释掉。
【解决方案2】:

以下 sn-p 将呈现“新销售订单”电子邮件并针对任何给定订单显示它。例如,将以下内容放在 /test.php 中,然后浏览到正确的位置,例如 http://www.example.com/test.php

require_once 'app/Mage.php';
Mage::app();

// loads the proper email template
$emailTemplate  = Mage::getModel('core/email_template')
                      ->loadDefault('sales_email_order_template');

// All variables your error log tells you that are missing can be placed like this:

$emailTemplateVars = array();
$emailTemplateVars['usermessage'] = "blub";
$emailTemplateVars['store'] = Mage::app()->getStore();
$emailTemplateVars['sendername'] = 'sender name';
$emailTemplateVars['receivername'] = 'receiver name';

// order you want to load by ID

$emailTemplateVars['order'] = Mage::getModel('sales/order')->load(673);

// load payment details:
// usually rendered by this template:
// web/app/design/frontend/base/default/template/payment/info/default.phtml
$order = $emailTemplateVars['order'];
$paymentBlock = Mage::helper('payment')->getInfoBlock($order->getPayment())
                ->setIsSecureMode(true);
$paymentBlock->getMethod()->setStore(Mage::app()->getStore()); 

$emailTemplateVars['payment_html'] = $paymentBlock->toHtml();

//displays the rendered email template
echo $emailTemplate->getProcessedTemplate($emailTemplateVars);

【讨论】:

  • 请在您的代码中添加更多信息,以便本网站的以下访问者可以从您的回答中受益!
  • 它真的很好用!非常感谢!这样可以节省很多电子邮件:D
【解决方案3】:

对于销售订单,我使用测试帐户和根目录中的脚本。

脚本如下所示:

<?php
include 'app/Mage.php';
Mage::app('default');

$_order = Mage::getModel('sales/order')->load($argv[1]);
$_order->sendNewOrderEmail(); 

我这样称呼它:

php -f sendTestEmail.php -- 4303 

其中 4303 是我之前用于测试的顺序。

希望有帮助。

【讨论】:

  • 这是 Web 无法访问的 shell 脚本的理想用例。如果脚本小子在 webroot 中找到这个,神圣的垃圾邮件蝙蝠侠。
  • @LukeA.Leber 如果它只在 dev 上不用担心,只要确保它不会出现在公共访问地图中
【解决方案4】:

我们开发了一个名为 Hackathon_EmailPreview 的免费开源扩展。

关于订单邮件,您可以在浏览器中预览它们而无需发送,您可以输入任何订单号来查看不同订单的外观。

【讨论】:

  • “如何使用”你的扩展没有帮助。您应该将其添加到您的文档中,因为只有一个安装说明。
  • 确实如此。感谢您的意见。
  • 您好,我已经在 Magento 1.9 上测试了您的模块,但它无法正常工作。点击预览按钮后,我们得到一个错误,类似于“调用支付实例”,我不记得确切,但它不适用于 1.9 版本。
  • 这可能是真的。这是一个 Hackathon 项目,不是一个积极维护的项目。如自述文件中所述,它仅使用 CE 1.7.0.2(这是 Hackathon 的当前版本)进行了测试。
【解决方案5】:

按照这篇博文中的说明进行操作:Magento (L)ocalhost (E)mail (S)erver (S)imulator (Nov 2010; by Branko Ajzele) Magento 将保存 html 电子邮件,包括您尝试在 var/log 中发送的所有变量。

【讨论】:

  • 这也很棒,而且肯定会派上用场。谢谢你。它唯一没有做的就是摆脱我继续下订单的需要。但是使用上面 R.S 的提示,关于“重新发送电子邮件”,这将很容易。
  • 确实如此。继续重新发送相同的订单以微调您的交易电子邮件。
【解决方案6】:

我们实际上开发了一个扩展程序,让您可以做到这一点:测试从 Magento 后端发送任何 Magento 交易电子邮件。希望在这里提及它不是太商业化。: http://www.yireo.com/software/magento-extensions/emailtester

【讨论】:

  • StackOverflow 不是发布付费扩展链接的地方,尤其是当您的答案只是没有有用词的链接时。
  • 这个哥们只是提出一个解决方案,我认为这里没有违反任何SO规则......
  • 嗯,答案促销。但我所能做的就是留下一个“促销”评论,因为我在工作中使用该扩展程序并且它可以完成工作并且是一个不错的选择。
【解决方案7】:

您可以进入后台,进入客户,选择您自己的客户用户,在底部您会看到“发送自动生成的密码”。输入管理员密码,然后单击“保存并继续编辑”。这样,您将向自己的帐户发送密码并测试您的模板。

【讨论】:

    【解决方案8】:

    我发布了一个扩展程序,允许您从后台预览交易邮件。您只需传递一个订单,然后在 BO 中就会出现一个邮件预览按钮。此外,它还允许您直接在邮件预览窗口中启用模板/块提示。

    在这里查看:https://github.com/OddBrew/Oddbrew_MailViewer

    这是一个免费的扩展,所以我希望它不属于SO的促销规则。

    【讨论】:

    • 好东西 - 谢谢!在 1.9.4 上运行良好。
    【解决方案9】:
    【解决方案10】:

    我使用一个小测试脚本再次发送订单确认电子邮件。这适用于 Magento 1.9,因为它触发 cronjob 来处理电子邮件队列。此外,它会重置属性“已发送电子邮件”,因此 Magento 不会跳过发送该电子邮件。

    include 'app/Mage.php';
    Mage::app('default');
    
    $oid = '1234567';
    
    $_order = Mage::getModel('sales/order')->load($oid);    
    $_order->setEmailSent('0');
    $_order->save();
    
    $_order->sendNewOrderEmail();
    
    // var_dump($_order);
    
    // Trigger email queue
    $a = new Mage_Core_Model_Email_Queue();
    $a->send();
    
    echo "\nFinished\n";
    

    【讨论】:

      【解决方案11】:

      转到 app/code/local/Mage/Core/Model/Email/Template.php 文件。 在发送函数中,在第 441 行附近有一段代码

         if ($this->isPlain()) {
               $mail->setBodyText($text);
          } else {
              $mail->setBodyHTML($text);
          }
        echo $text;die();
      

      它会在浏览器上回显邮件而不实际发送给用户。可以用于测试。

      【讨论】:

        猜你喜欢
        • 2014-05-30
        • 2015-08-18
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        • 1970-01-01
        • 1970-01-01
        • 2012-06-28
        • 2015-06-25
        相关资源
        最近更新 更多