自定义模块中Magento的自定义电子邮件发送

13

我正在开发一个模块,完成订单后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();
    }  

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

3个回答

31
 $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 gondal
欢迎 @murtza!这是我的荣幸! - Maniprakash Chinnasamy
@ManKingdom 在上面的 $mail 中如何添加回复邮件? - Sandesh
我收到了“认证失败:超过最大信用额度”的错误。有人对此有什么想法吗?我的代码是完美的,这是一个服务器端的问题吗? - Chiragit007
需要注意的是,loadDefault('recurring_order_email_template')与配置的xml标签相关,而不是模板文件的名称。这似乎很明显,但它让我浪费了一些时间... - open-ecommerce.org
@ManiprakashChinnasamy 在Magento 2中,core/email_template等的类等效是什么?谢谢。 - Juliano Vargas

4

将您的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中的内容

1
我认为你在这里犯了一个错误。
$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>

加载电子邮件模板


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接