【问题标题】:Magento - problem sending email through an actionMagento - 通过操作发送电子邮件的问题
【发布时间】:2011-02-16 15:02:11
【问题描述】:

我有一个在前端接受表单数据并保存到数据库的基本模块。

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

我希望将电子邮件发送给店主:

我已执行以下操作以尝试使其正常工作:

app/code/local/Aero/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>

我在以下位置创建了一个模板文件:app/locale/en_US/template/email/request_brochure.html

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

这是我在 IndexController.php 中的 postAction

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;
}

提交表单时,数据不会发送到我在管理员中配置的电子邮件地址

有人知道我做错了什么吗?

谢谢

【问题讨论】:

  • 您是否收到任何错误消息?您可以捕获 $e->getMessage() 并在此处发布吗?

标签: magento magento-1.4


【解决方案1】:

我认为你需要设置一个主题,否则你不会通过:

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

(Mage_Core_Model_Email_Template)

所以,在您的电子邮件模板中,添加:&lt;!--@subject The subject of email @--&gt;

希望有帮助

【讨论】:

  • 好的,我已经在我的电子邮件模板中添加了缺少的配置。问题是,电子邮件中的实际表单字段都作为“数组”返回,而不是我发布的实际输入。有什么想法吗?
【解决方案2】:

好的,为了让它工作,我必须更换:

array('data' => $data)

array('data' => $postObject)

现在全部发送完美!

谢谢大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-05
    • 2014-04-25
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多