最新消息:觉得本站不错的话 记得收藏哦 博客内某些功能仅供测试 讨论群:135931704 快养不起小站了 各位有闲钱就打赏下把 My Email weicots#gmail.com Please replace # with @

Magento 创建发送邮件模块 完整版

Magento 资料整理 ajiang-tuzi 5769浏览

邮件是几乎所有电商系统都要用到的功能,在magento中实现简单的邮件发送并不复杂,不过要想用特定邮件模板,就需要对magento邮件系统做一些深入了解,本文就分析一下如何完成一个发送自定义邮件的模块
有几个关键的点先说一下,大家好有个印象,system.xml,config.xml,core_config_data(table名),邮件模板(Admin->System->Transactional Emails),这几个因素在配置自定义邮件过程中几乎都会用到,但是如果对magento email机制比较了解的话,就可以省掉一些因素,快速的实现自定义邮件发送功能,当然为了加深了解,本文会提到所有因素。
首先是system.xml,

app\code\local\Aps\Weicot\etc\system.xml

你也可以写在其他模块的 system.xml 中 比如 customer

/*
*Weicot 兔子自定义付款系统
*付款链接发送模块
*作者 ajiang-兔子 
*20151014
*1050653098@qq.com
*/
<config>
    <tabs>
        <weicotconfig translate="label" module="weicot">
            <label>Weicot Config</label>
            <sort_order>99999</sort_order>
        </weicotconfig>
    </tabs>
    <sections>
	<!--核心开始-->
        <weicot_options translate="label" module="weicot">
            <label>Weicot Email Options</label>
            <tab>weicotconfig</tab>
            <fontend_type>text</fontend_type>
            <sort_srder>1000</sort_srder>
            <show_in_default>1</show_in_default>
            <show_in_website>1</show_in_website>
            <show_in_store>1</show_in_store>
            <groups>
               <weicot_email translate="label">
                   <label>Weicot Pay Email</label>
                   <frontend>text</frontend>
                   <sort_order>5</sort_order> 
                   <show_in_default>1</show_in_default>
                   <show_in_website>0</show_in_website>
                   <show_in_store>0</show_in_store>
                   <fields>
                       <exist_pay_weicot_template translate="label">
                           <label>Success Pay Email</label>
                           <frontend_type>select</frontend_type>
                           <source_model>adminhtml/system_config_source_email_template</source_model>
                           <srot_order>3</srot_order>
                           <show_in_default>1</show_in_default>
                           <show_in_website>1</show_in_website>
                           <show_in_store>1</show_in_store>
                       </exist_pay_weicot_template>
					   <!--我写了两个模块 如果你只写一个的话 这段你可以不要-->
					    <fail_pays_weicot_template translate="label">
                           <label>Fail Pay Mail</label>
                           <frontend_type>select</frontend_type>
                           <source_model>adminhtml/system_config_source_email_template</source_model>
                           <srot_order>1</srot_order>
                           <show_in_default>1</show_in_default>
                           <show_in_website>1</show_in_website>
                           <show_in_store>1</show_in_store>
                       </fail_pays_weicot_template>
					   <!----------------------weicot end-------------------------->
                   </fields>
               </weicot_email>
            </groups>
        </weicot_options>
		<!--结束-->
    </sections>
</config>

 

插件完整版 system.xml system
这个文件建立之后,在后台System->Configuration的对应tab中,就会找到相应的配置,请看如下示例:
xml中的sections标签紧跟的是customer标签,所以进入System->Configuration后,在左侧要点击Weicot Email Options (因为标签weicot_options已经给出了限定范围)标签,找到Weicot Pay Email,会看到有一个Success Pay Email<的label,这些都是在system.xml里配置的,当然如果想要改变这些label,只需要在system.xml中改就可以。 这里要注意的是

<source_model>adminhtml/system_config_source_email_template</source_model>

这个决定了Weicot Pay Email对应的下拉框,包含了所有的已存在的邮件模板,并且在(Admin->System->Transactional Emails)中可以看到并修改他们。
接下来看config.xml文件

/*
*Weicot 兔子自定义付款系统
*付款链接发送模块
*作者 ajiang-兔子 
*20151014
*1050653098@qq.com
*/
<!--核心开始-->
       <template>
            <email>
                <weicot_options_weicot_email_exist_pay_weicot_template translate="label" model="weicot">
                    <label>Weicot Success Pay</label>
                    <file>weicot/exist_pay.html</file>
                    <type>html</type>
                </weicot_options_weicot_email_exist_pay_weicot_template>
				</email>
				<email>
				 <!--我写了两个模块 如果你只写一个的话 这段你可以不要-->
				 <weicot_options_weicot_email_fail_pay_weicot_template translate="label" model="weicot">
                    <label>Weicot Fail Pay</label>
                    <file>weicot/fail_pay.html</file>
                    <type>html</type>
                </weicot_options_weicot_email_fail_pay_weicot_template>
				  <!----------------------weicot end-------------------------->
            </email> 
        </template>
		<!--核心结束-->

插件完整版 config.xml
注意标签

weicot_options_weicot_email_exist_pay_weicot_template,

它和system.xml里的标签是有关联的,刚好是system.xml里的

< weicot_options >,< weicot_email >,< exist_pay_weicot_template >

这三个标签的组合,并且这里一定要这么写,不这么写的话,这个模板文件exist_pay.html在Weicot Email Options的下拉选项中就不会出现。然后别忘了在

app/locale/en_US/template/email/ weicot/

下面要添加exist_pay.html;注意这里(config.xml)的label的值是Weicot Success Pay,进入System->Configuration,在左侧点击Customer Configuration标签,在Weicot Email Options下面,对应Weicot Pay Email的下拉框就会看到名称为Weicot Success Pay的选项(前面说了,如果config和system的标签关联不上的话,这里就不会出现Weicot Success Pay),选择他之后,一定要点击右上角的save config按钮,这个设置才能被保存到DB,即

table core_config_data

,注意在DB中保存的值并不是Weicot Success Pay,而是它的父标签

weicot_options_weicot_email_exist_pay_weicot_template

发送代码例子

/*
*Weicot 兔子自定义付款系统
*付款链接发送模块
*作者 ajiang-兔子 
*20151014
*1050653098@qq.com
*/
public function paySuccessMail($order){
		$info=$this->getInfo($order);
		$Emial=$info->getData('customer_email');
		define('EMAIL_TEMPLATE',"weicot_options_weicot_email_exist_pay_weicot_template");
        $mailSubject = 'Success Mail';
		$email = Mage::getStoreConfig('trans_email/ident_general/email');
        $name = Mage::getStoreConfig('trans_email/ident_general/name');
        $sender = Array('name'  => $name,
                        'email' => $email);
        $to = array($Emial);
        $storeId = Mage::app()->getStore()->getId();
        $mailConfirm = Mage::getModel('core/email_template');
		$template=$mailConfirm->loadDefault(EMAIL_TEMPLATE);
        $translate  = Mage::getSingleton('core/translate');
        $sen= $mailConfirm ->setTemplateSubject($mailSubject)
            ->sendTransactional($template, $sender, $to, '',
                $this->templateInfo($order),$storeId);
        $translate->setTranslateInline(true);		
	}

关于在邮件模板中获得参数

/*
*Weicot 兔子自定义付款系统
*付款链接发送模块
*作者 ajiang-兔子 
*20151014
*1050653098@qq.com
*/

$this->templateInfo($order);

//函数原型
	public function templateInfo($order){
		$info=$this->getInfo($order);
		$storeId = Mage::app()->getStore()->getId();
		$billingAddress=$info->getBillingAddress();
      ………………………………………………………………………….
………………………………………………………………………………..

		$outinfo=array(
		'orderId'=>$order,
		'names'=>$Name,
		'Phone'=>$Phone,
		'company'=>$company,
		'Address'=>$Address,
		'City'=>$City,
		'State'=>$State, 
		'Country'=>$Country,
		'payInfo'=>$payInfo, 
		'status'=>$status,
		'state'=>$state,
		'track'=>$track,
		'createdtime'=>$created_at
		);
		return $outinfo; 
//太多了 怕页面容不下 就不写了
//可以看到这个函数返回的是数组 
//而如何获得这些数据那
//像这样子就行 在邮件模板中 {{var  state}} 这种方式获得数
	}

当然你也可以在 邮件模板中引入其他模板就像这样
这还的多谢一个朋友的提醒

写个邮件模板  加一个自定义的lay handler
用layout handler 加block
邮件模板里 {{layout handler=xxxxx}}]

你可以 把这个发送函数 写在 controllers 里
也可以写在Model 里
当然如果你写在 Model 里可以以这种方式调用

/*
*Weicot 兔子自定义付款系统
*付款链接发送模块
*作者 ajiang-兔子 
*20151014
*1050653098@qq.com
*/

public function sendMMAction(){
		$mail=Mage::getModel('weicot/sendMail');
		$order='100000013';
	var_dump($mail->paySuccessMail($order));
	}

到哪里都可以以这种方式调用

/*
*Weicot 兔子自定义付款系统
*付款链接发送模块
*作者 ajiang-兔子 
*20151014
*1050653098@qq.com
*/

Mage::getModel('weicot/sendMail')->paySuccessMail($order);
//或
$mail=Mage::getModel('weicot/sendMail');
$mail->paySuccessMail($order);

简易参考资料
magento 发送邮件 简易版搞笑版

转载请注明:(●--●) Hello.My Weicot » Magento 创建发送邮件模块 完整版

蜀ICP备15020253号-1