2011-02-16 143 views
0

我有一个基本模块,它接受前端上的表单数据并保存到数据库。Magento - 通过动作发送电子邮件的问题

我还想要做的是发送一封电子邮件,如果数据已成功保存。

我想的电子邮件发送给店主:

我做了以下尝试,并得到这个工作:

应用程序/代码/本地/航空/ Catalogrequest的/ etc /config.xml

<template> 
    <email> 
    <request_brochure_email translate="label" module="Aero_Catalogrequest"> 
     <label>Request a brochure</label> 
     <file>request_brochure.html</file> 
      <type>html</type> 
    </request_brochure_email> 
</email> 
</template> 

<default> 
    <Aero_Catalogrequest> 
    <sendemail> 
     <template>request_brochure_email</template> 
    </sendemail> 
    </Aero_Catalogrequest> 
</default> 

我已经创建了一个模板文件:应用程序/locale/en_US/template/email/request_brochure.html

<p> 
    {{var data.fname}} 
    </p> 

这是我postAction我IndexController.php

public function postAction() 
{ 
    $post = $this->getRequest()->getPost(); 
    if ($post) { 
     $request = Mage::getModel('catalogrequest/catalogrequest'); 
     $data = $this->getRequest()->getPost(); 
     $data['time_added'] = now(); 
     $data['country'] = $data['country_id']; 
     $data['ip'] = $_SERVER['REMOTE_ADDR']; 
     $data['fname'] = ucwords($data['fname']); 
     $data['lname'] = ucwords($data['lname']); 
     $data['address1'] = ucwords(str_replace(",", " ",$data['address1'])); 
     $data['address2'] = ucwords(str_replace(",", " ",$data['address2'])); 
     $data['city'] = ucwords($data['city']); 
     if(empty($data['region'])){ 
      $data['state'] = Mage::getModel('directory/region')->load($data['state'])->getCode(); 
     } else { 
      $data['state'] = $data['region']; 
     } 
      $postObject = new Varien_Object(); 
      $postObject->setData($post); 

     // Validate 
     if(!$errors = $request->validate($data)){ 
      MAGE::getSingleton('core/session')->addError($errors); 
     } 


     // Add to database 
     try { 
      $mailTemplate = Mage::getModel('core/email_template'); 
      /* @var $mailTemplate Mage_Core_Model_Email_Template */ 
      $mailTemplate->setDesignConfig(array('area' => 'frontend')) 
       ->sendTransactional(
        Mage::getStoreConfig(self::XML_PATH_SAMPLE_EMAIL_TEMPLATE), 
        Mage::getStoreConfig(self::XML_PATH_EMAIL_SENDER), 
        Mage::getStoreConfig(self::XML_PATH_EMAIL_RECIPIENT), 
        null, 
        array('data' => $data) 
       ); 

      if (!$mailTemplate->getSentSuccess()) { 
       throw new Exception(); 
      } 

      $request->setData($data)->save(); 
      MAGE::getSingleton('core/session')->addSuccess($this->__('<h2>Thank you</h3> You can expect to receive your catalogue in 10-14 days.o. ')); 

      $translate->setTranslateInline(true); 
      $this->_redirect('*/*/thanks'); 

     } catch(Exception $e){ 
      MAGE::getSingleton('core/session')->addError('Sorry, we\'ve had some trouble saving your request'); 
      $this->_redirect('*/*/'); 
      return; 
     } 

    } 
    return; 
} 

当我提交表单,数据不会被发送到电子邮件地址我已经在管理员配置

有没有人有任何想法我做错了什么?

感谢

+0

您是否收到任何错误消息?你能捕获$ e-> getMessage()并在这里发布吗? – 2011-02-17 03:06:55

回答

4

我认为你需要设置一个主题,否则你将无法通过:

public function isValidForSend() 
{ 
    return !Mage::getStoreConfigFlag('system/smtp/disable') 
     && $this->getSenderName() 
     && $this->getSenderEmail() 
     && $this->getTemplateSubject(); 
} 

(Mage_Core_Model_Email_Template)

所以,在你的邮件模板,添加:<[email protected] The subject of email @-->

希望有帮助

+0

好的我在我的电子邮件模板中添加了缺失的配置。问题是,电子邮件消息中的实际表单字段都以“数组”而不是我发布的实际输入的形式返回。有任何想法吗? – terrid25 2011-02-17 09:34:37

0

好了,所以,使其工作,我不得不更换:

array('data' => $data) 

array('data' => $postObject) 

现在,所有完美发送!

谢谢全部