【问题标题】:Custom email sending in magento custom module在 magento 自定义模块中发送自定义电子邮件
【发布时间】:2014-03-31 23:51:07
【问题描述】:

我正在开发一个模块,该模块将在订单完成 7 天后发送电子邮件。我一直在发送电子邮件。我可以在管理中的交易电子邮件下拉列表中看到电子邮件模板。但是电子邮件没有发送。

这是包含电子邮件模板的 confix.xml 部分。

<template>
        <email>
            <recurring_order_email_template translate="label">
                <label>Recurring order email</label>
                <file>coeus_recurring_order_email.html</file>
                <type>html</type>
            </recurring_order_email_template>
        </email>
    </template>

这就是我在控制器操作中发送电子邮件的方式

 $emailTemplate = Mage::getModel('core/email_template')
            ->loadDefault('coeus_recurring_order_email');

    $emailTemplateVariables = array();
    $emailTemplateVariables['var1'] = 'var1 value';
    $emailTemplateVariables['var2'] = 'var 2 value';
    $emailTemplateVariables['var3'] = 'var 3 value';

    $emailTemplate->getProcessedTemplate($emailTemplateVariables);

   $emailTemplate->setSenderName('sender name');
    $emailTemplate->setSenderEmail('sender@test.com');
    try {
        $emailTemplate->send('myemail@gmail.com', 'bla bla',$emailTemplateVariables);
    } catch (Exception $e) {
        echo $e->getMessage();
    }  

我不知道为什么它不起作用。

【问题讨论】:

    标签: magento email


    【解决方案1】:
     $emailTemplate = Mage::getModel('core/email_template')->loadDefault('recurring_order_email_template');
    
    //Getting the Store E-Mail Sender Name.
    $senderName = Mage::getStoreConfig('trans_email/ident_general/name');
    
    //Getting the Store General E-Mail.
    $senderEmail = Mage::getStoreConfig('trans_email/ident_general/email');
    
    //Variables for Confirmation Mail.
    $emailTemplateVariables = array();
    $emailTemplateVariables['name'] = $customerName;
    $emailTemplateVariables['email'] = $customerEmail;
    
    //Appending the Custom Variables to Template.
    $processedTemplate = $emailTemplate->getProcessedTemplate($emailTemplateVariables);
    
    //Sending E-Mail to Customers.
    $mail = Mage::getModel('core/email')
     ->setToName($senderName)
     ->setToEmail($customerEmail)
     ->setBody($processedTemplate)
     ->setSubject('Subject :')
     ->setFromEmail($senderEmail)
     ->setFromName($senderName)
     ->setType('html');
     try{
     //Confimation E-Mail Send
     $mail->send();
     }
     catch(Exception $error)
     {
     Mage::getSingleton('core/session')->addError($error->getMessage());
     return false;
     }
    

    【讨论】:

    • 谢谢@Man Kingdom。正如你所解释的那样工作。
    • 欢迎@murtza!。这是我的荣幸!
    • @ManKingdom 在上面$mail如何添加回复邮件?
    • 我收到“身份验证失败:超出最大信用”错误。有人对此有想法吗?我的代码很完美这是服务器端问题吗?
    • 重要的是要注意 loadDefault('recurring_order_email_template') 与配置的 xml 标记有关,而不是模板文件的名称很明显,但它让我松了一些时间......
    【解决方案2】:

    将您的 etc/config.xml 代码更改为以下:

    <template>
            <email>
                <recurring_order_email_template>
                    <label>Recurring order email</label>
                    <file>coeus_recurring_order_email.html</file>
                    <type>html</type>
                </recurring_order_email_template>
            </email>
        </template>
    

    将您的控制器代码更改为以下:

    $emailTemplate = Mage::getModel('core/email_template')
                ->loadDefault('recurring_order_email_template');
    
        $emailTemplateVariables = array();
        $emailTemplateVariables['var1'] = 'var1 value';
        $emailTemplateVariables['var2'] = 'var 2 value';
        $emailTemplateVariables['var3'] = 'var 3 value';
    
       $emailTemplate->getProcessedTemplate($emailTemplateVariables);
    
       $emailTemplate->setSenderName('sender name');
       $emailTemplate->setSenderEmail('sender@test.com');
        try {
       $emailTemplate->send($recipientEmail, $senderName, $emailTemplateVariables);
        } catch (Exception $e) {
            echo $e->getMessage();
        } 
    

    根据需要更改您的 $recipientEmail、$senderName 和 $emailTemplateVariables。

    要加载电子邮件模板,您必须在

    之后指定标签名称
    <template>
                <email>
           </email>
    </template>
    

    您在 config.xml 中提供的内容

    【讨论】:

      【解决方案3】:

      我认为你在这里犯了一个错误。

      $emailTemplate = Mage::getModel('core/email_template')->loadDefault('coeus_recurring_order_email');
      

      试试这个

      $emailTemplate = Mage::getModel('core/email_template')
                  ->loadDefault('recurring_order_email_template');
      

      要加载电子邮件模板,您必须提供您在 config.xml 中提供的标签名称

      例如:在你的代码中

      使用

      <recurring_order_email_template>
      

      加载电子邮件模板

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-22
        • 2021-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多