博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
禅道二次开发发送邮件功能
阅读量:5881 次
发布时间:2019-06-19

本文共 3677 字,大约阅读时间需要 12 分钟。

hot3.png

禅道默认在BUG和任务 修改,指派 的时候会发送邮件给默认的接收人

但是其他模块就没有对应的开发配置。如果有发信的需求,就要手动修改代码来进行开发了

 

此次接到的需求是当上传新文档的时候 给指定人发信,这里指定人也是固定的,不需要额外选择

首先参考默认的测试发信页面

 

(本项目禅道是搭建在windows平台上的)

前台页面的路径在 \zentao\module\mail\view\test.html.php 没什么可说的,传了一个收件人到后台   

后台处理的文件路径是\zentao\module\mail\control.php   找到public function test() 这个方法

这个方法前面大段都是判断服务器有没有权限 有没有开启fs读写

真正核心的是

 $this->mail->send($this->post->to, $this->lang->mail->subject, $this->lang->mail->content, "", true);

传的5个参数是  发给谁,主题 ,正文 ,抄送, 是否发给自己。禅道发信默认是不发给自己的

我们再参考BUG模块发信的代码 在\zentao\module\bug\control.php里面

最后的核心发送代码  还是一行

 $this->loadModel('mail')->send($toList, 'BUG #'. $bug->id . ' ' . $bug->title . ' - ' . $productName, $mailContent, $ccList);

 

和mail唯一不同的就是loadModel('mail')->send   和 mail->send 这一点了

那接下来 就可以复用这个地方的代码了

在文档的control.php里 建一个自己的send方法,这里我取名叫sendmail_doc,表明是文档发信

public function sendmail_doc()            {              /* 设置发送人和抄送人. 是禅道系统里有的用户*/                $toList      = 'zhc';                  $ccList      = 'user1,user2'             /* 邮件标题和正文. */                $mailTitle ='有人上传了文件';                $mailContent = '有人上传了文件,请在系统中查看';                            /*发送核心语句 */                $this->loadModel('mail')->send($toList, $mailTitle, $mailContent, $ccList,true);                        }

ok  然后在创建的地方调用就好了

创建文档的前端页面在\zentao\module\doc\view\create.html.php里面 ,提交之后调用create()方法

只要在create()里面的post提交段插入即可,找到if(!empty($_POST))后面的内容

public function create($libID, $moduleID = 0, $productID = 0, $projectID = 0, $from = 'doc')    {        $projectID = (int)$projectID;        if(!empty($_POST))        {            $docResult = $this->doc->create();            /*就在插入表之后发送,对没错 就是这里*/			$this->sendmail_doc();	    	echo js::alert('您创建了文档,邮件已发送');               if(!$docResult or dao::isError()) die(js::error(dao::getError()));            $docID = $docResult['id'];            if($docResult['status'] == 'exists')            {                echo js::alert(sprintf($this->lang->duplicate, $this->lang->doc->common));                die(js::locate($this->createLink('doc', 'view', "docID=$docID"), 'parent'));            }            $this->action->create('doc', $docID, 'Created');            if($from == 'product') $link = $this->createLink('product', 'doc', "productID={$this->post->product}");            if($from == 'project') $link = $this->createLink('project', 'doc', "projectID={$this->post->project}");            if($from == 'doc')            {                $productID = intval($this->post->product);                $projectID = intval($this->post->project);                $vars = "libID=$libID&moduleID={$this->post->module}&productID=$productID&projectID=$projectID";                $link = $this->createLink('doc', 'browse', $vars);            }            die(js::locate($link, 'parent'));        }        $this->loadModel('product');        $this->loadModel('project');        ....

这样在创建文档之后就可以发送了

但是 ,这样有个问题,发送的内容是固定的,我们需要带入文档信息  比如标题什么的

我们现在对这个sendmail_doc()进行改造 ,需要额外传一个参数进去 

    $this->sendmail_doc($docResult);

     echo js::alert('您创建了文档,邮件已发送');   

 

传入之后 在sendmail_doc()处增加处理的逻辑

public function sendmail_doc($docResult)			{				/* 设置发送人和抄送人. */				$toList      = 'zhc';				$ccList      = 'user1,user2';			    $docID = $docResult['id'];				$doc = $this->doc->getById($docID, true);							/* 设置邮件标题和正文. */				$mailTitle = $this->app->user->account.'新上传了文件:'.$doc->title;				$mailContent = $doc->addedBy.'在'.$doc->addedDate.'上传了一份文件 ,  文件名为:'.$doc->title.'请注意查看';								/发送/				$this->loadModel('mail')->send($toList, $mailTitle, $mailContent, $ccList,true);							}

$this->app->user->account  和 $doc->addedBy 都是可以作为发送人

 $doc->addedBy是数据表doc里的addedBy字段

 

OK 大功告成。到这里 一个发信模块就加好了

转载于:https://my.oschina.net/zhanghaochen/blog/815723

你可能感兴趣的文章
关于django一个请求的生命周期
查看>>
Supervisor-容器中启动多个程序
查看>>
CSS颜色代码大全
查看>>
mybatis数据处理的几种方式
查看>>
QStandardItem and QStandardItemModel Class Reference
查看>>
我的友情链接
查看>>
使用Nginx搭建WEB服务器
查看>>
【oracle唯一主键SYS_GUID()】
查看>>
作业2
查看>>
raid技术-研究感受
查看>>
远程主机探测技术FAQ集 - 扫描篇
查看>>
C++中调用python函数
查看>>
Nomad添加acl认证
查看>>
“TI门外汉”网路知识笔记一 OSI参考模型
查看>>
你不需要jQuery(五)
查看>>
DatanodeDescriptor说明
查看>>
ServlertContext
查看>>
eclipse编辑器生命周期事件监听
查看>>
Python WOL/WakeOnLan/网络唤醒数据包发送工具
查看>>
sizeof(long)
查看>>