Magento模塊示例發送郵件

今天寫一個magento模塊,主要的功能是實現前臺用戶利用表單給管理員發送郵件的一個功能,功能很簡單,但在這個模塊中,能夠了解到一些有關magento的一些細節,好比,如何獲取系統標籤id,如何使用magento默認的提示信息,如何使用smtp服務等等。
新建模塊Inchoo
目錄結構以下:javascript

Inchoo
 |--_SimpleContact
          |----controllers
                |--IndexController.php
          |----etc
                |--config.xml

首先須要讓magento識別寫的擴展:
app/etc/modules/Inchoo_SimpleContact.xmlphp

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Inchoo_SimpleContact>
            <active>true</active>
            <codePool>local</codePool>
        </Inchoo_SimpleContact>
    </modules>    
</config>

其次再在模塊的配置文件config.xml中添加:html

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Inchoo_SimpleContact>
            <version>0.1.0</version>
        </Inchoo_SimpleContact>
    </modules>   
    <frontend>
        <routers>
            <SimpleContact>
                <use>standard</use>
                <args>
                    <module>Inchoo_SimpleContact</module>
                    <frontName>simplecontact</frontName>
                </args>
            </SimpleContact>
        </routers>
    </frontend>    
</config>

在控制中IndexController.php代碼以下,在代碼中解釋器含義:java

<?php
class Inchoo_SimpleContact_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        //Get current layout state
        $this->loadLayout();
        //使用mganeto默認的提示信息,須要在控制器添加$this->_initLayoutMessages('core/session');
        $this->_initLayoutMessages('core/session');
        //在控制器中建立一個block
        $block = $this->getLayout()->createBlock(
                'Mage_Core_Block_Template',
                'inchoo.simple_contact',
                array(
                        'template' => 'inchoo/simple_contact.phtml'
                )
        );
        $this->getLayout()->getBlock('content')->append($block);
        //$this->getLayout()->getBlock('right')->insert($block, 'catalog.compare.sidebar', true);

        $this->_initLayoutMessages('core/session');
        $this->renderLayout();
    }
    //發送郵件
    public function sendemailAction()
    {
            $params = $this->getRequest()->getParams();
            //print_r($params);
            //這裏獲取後臺設置的smtp的host和port
            //$my_smtp_host = Mage::getStoreConfig('system/smtp/host');
            //$my_smtp_port = Mage::getStoreConfig('system/smtp/port');
            //如下代碼,須要提早安裝好smtp的一個擴展插件SMTPPro            $general_email=Mage::getStoreConfig('trans_email/ident_general/email');
            $sales_email = Mage::getStoreConfig('trans_email/ident_sales/email');
            $support_email = Mage::getStoreConfig('trans_email/ident_support/email');
            //smtppro
            $smtppro_host = Mage::getStoreConfig('smtppro/general/smtp_host');
            $smtppro_port = Mage::getStoreConfig('smtppro/general/smtp_port');
            $smtppro_username = Mage::getStoreConfig('smtppro/general/smtp_username');
            $smtppro_password = Mage::getStoreConfig('smtppro/general/smtp_password');
            $email=Mage::getStoreConfig('contacts/email/recipient_email');

             $config = array(
                    'port' => $smtppro_port,
                     'auth' => 'login',
                     'username' => $smtppro_username,
                     'password' => $smtppro_password
            );
            $transport = new Zend_Mail_Transport_Smtp($smtppro_host, $config);
            Zend_Mail::setDefaultTransport($transport);
            
            $mail =  new Zend_Mail('utf-8');
            print_r($transport);
            //exit();
            $mail->setBodyText($params['comment']);
//             $mail->setFrom($config['username']);
//             $mail->addTo($params['email'], $params['name']);
            $mail->setFrom($params['email']);
            $mail->setSubject('test');
            $mail->addTo($email);
           
            try {
                $mail->send();
                $this->_redirect('*/*');
                Mage::getSingleton('core/session')->addSuccess('Your request has been sent!');
            }
            catch(Exception $ex) {
                print_r($ex->getMessage());
                Mage::getSingleton('core/session')->addError('Unable to send!');
                $this->_redirect( $this->getBaseUrl());
               
            }
        }
        
}

備註:代碼中提到的SMTP Pro插件,能夠在Magento Connect上下載源文件,而後安裝到本身的項目中便可,安裝成功後,能夠看到在systerm->Configuration左側看到ASCHRODER EXTENSIONS/SMTP Pro,點擊看到以下界面:
圖片描述
提示:若是安裝好後,打開報錯,應先清理緩存,而後logout註銷,從新登陸後臺便可。
控制器中有緩存

$my_smtp_host = Mage::getStoreConfig('system/smtp/host');
$my_smtp_port = Mage::getStoreConfig('system/smtp/port');

這裏是獲取magento本身的input值,如圖所示:
圖片描述
同理可得port的input值。
前臺頁面代碼以下:session

路徑以下:
app/design/frontend/rwd/default/template/inchoo/simple_contact.phtml

simple_contact.phtml內容以下:app

<div class="box simple_contact">
 
<form id="simple_contact_form" name="simple_contact_form" action="<?php echo $this->getUrl('*/*/sendemail/') ?>" method="post">
 
    <fieldset class="group-select">
        <h4 class="legend">Inchoo_SimpleContact module sample</h4>
        <ul>
        <li>
                <div class="input-box">
                    <label for="name">Gimme your name <span class="required">*</span></label><br />
 
                    <input name="name" id="name" title="Name" value="" class="required-entry input-text" type="text" />
                </div>
 
                <div class="input-box">
                    <label for="email">And your email <span class="required">*</span></label><br />
                    <input name="email" id="email" title="Email" value="" class="required-entry input-text validate-email" type="text" />
                </div>
 
                <div class="clear"></div>
 
                <div class="input-box">
           &nbsp;        <label for="comment">Some comment?</label><br />
 
                    <textarea name="comment" id="comment" title="Comment" class="required-entry input-text" style="height:100px;" cols="50" rows="3"></textarea>
                </div>
                </li>
                </ul>
    </fieldset>
    <div class="button-set">
        <p class="required">* Required Fields</p>
        <button class="form-button" type="submit"><span>Submit</span></button>
 
    </div>
</form>
</div>
    <script type="text/javascript">  
    //< ![CDATA[  
      var myForm= new VarienForm('simple_contact_form', true);  
    //]]>  
    </script>

頁面效果如圖:
圖片描述frontend

相關文章
相關標籤/搜索