Magento - проблема с отправкой электронной почты через действие - PullRequest
0 голосов
/ 16 февраля 2011

У меня есть базовый модуль, который принимает данные формы во внешнем интерфейсе и сохраняет их в базе данных.

Я также хочу отправить электронное письмо, если данные были успешно сохранены.

Я бы хотел, чтобы письмо было отправлено владельцу магазина:

Я сделал следующее, чтобы попытаться заставить это работать:

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

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

При отправке моей формы данные не отправляются на адрес электронной почты, который я настроил в админке

Кто-нибудь знает, что я делаю не так?

Спасибо

Ответы [ 2 ]

4 голосов
/ 16 февраля 2011

Я думаю, вам нужно задать тему, иначе вы не пройдете:

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

(Mage_Core_Model_Email_Template)

Итак, в свой шаблон электронной почты добавьте: <!--@subject The subject of email @-->

Надеюсь, что поможет

0 голосов
/ 17 февраля 2011

Хорошо, чтобы заставить его работать, пришлось заменить:

array('data' => $data)

с

array('data' => $postObject)

Все отлично отправляет сейчас!

Спасибо всем

...