菜鸟学编程:给TeamToy添加一键发送周报至领导邮箱的功能

简介:

在偷懒了一个多月之后,俺终于开始正式做TeamToy的邮件提醒系统啦! 

最初的想法是,做一个自动脚本,让其每个周五下班的时候将“本周报告”发送到自己的和领导的邮箱当中;不过在研究了半天之后,发现比预想的要复杂,决定先从手动版开始。在各种搜索资料、偷懒、询问Easy大和求助不乖师父之后,终于实现了最初设想“自动发送报告为邮件”的“发送报告为邮件”功能了!(当然言下之意就是“自动”的部分还没实现……这个再说吧)

目的:在“报告”页面中添加一个按钮,点击之后,自动将当前显示的报告(div#report_list)部分内容发送到指定邮箱。

Hacking步骤:

1、先自行读一遍SAE中的邮件函数,SAEmail相关的文档:

http://apidoc.sinaapp.com/sae/SaeMail.html 

2、发送邮件属于基础功能,在TeamToy当中都写在 /code/function/core.function.php 当中。从hacking的思路而言,总是要先看看有没有现成发送邮件的函数,所以先在core.function.php当中搜索 SAEmail 字段(当然你也可以在全部文档中搜索),找到了一个 send_notice 函数。

读了一下这个函数,发现跟咱要的功能相差太多,所以决定新加一个函数。

在下面新起一个:

function just_send_email( $to, $subject, $content )
{
    $to = $to;
     $subject = $subject;
     $content = $content;

     if( c('smtp') )
     {
          $m = new SaeMail();
          $m->quickSend( $to , $subject , strip_tags($content) , c('smtp_user') , c('smtp_password') );

          if ($m === false)
        var_dump($mail->errno(), $mail->errmsg());
     }
    
}

3、进入 /code/mod/report.class.php ,在下面添加一个函数:

     function mailreport()
     {
          /*这些变量可以先随便填几个string做测试,逐渐再把功能加入*/
          $to = 'some@mail.com';
          $subject = z(t(v('subject')));
          $content = t(v('content'));
          just_send_email( $to, $subject, $content );
          return render( $content , 'mail' );
     }

上面最后return的内容是方便让人做测试的。render的定义通过搜索 function render 可以定位到core.function.php,是给输出的内容套套子用的,TeamToy默认只提供了default和ajax两种模板,对邮件内容而言都太臃肿了,所以咱新建一个mail模板:

在 /code/view/layout/ 下面新建一个文件夹 mail ,在 mail下建一个文件 index.tpl.html ,里面的内容写这个就行:

<?=$data?>

回头可以再加点css,现在先这么放着就行。

4、进入 /code/view/layout/default/main/report/index.tpl.html ,加入触发函数的入口。

研究这部分花了我很多时间,总算是七零八碎拼出来了一个解决办法。

首先自然是在页面里加一个入口,我写在了原页面“打印”功能的右边:

<a href="javascript:do_print('report_list')">打印</a> | <a href="?m=report&a=mailreport">发送邮件</a>

之后的问题,就是如何将这个页面里div#report_list的内容传递到发送邮件的php函数当中去的问题。

(写到这里,发现左边的javascript:do_print('report_list')已经是现成的内容抓取实现,如果能设法用类似的功能传值,或者用JavaScript直接发送邮件出去,就不用我下面的这个实现了。)

从js传值到php需要动用ajax的方式。TeamToy采用的js库是mootools,与传值有关的文档可在这里查看:

http://mootools.net/docs/core/Request/Request

当然,我这种菜鸟看了一遍文档之后还是没看懂,所以搜了一个demo出来:

http://www.knowledgesutra.com/forums/topic/64355-mootools-12-ajax-request/

简单来说,最后的实现就是:

先在页首添加一段js:

<script language="javascript">
     window.addEvent('domready', function() {
 
          $('runAjax').addEvent('click', function(event) {
                  event.stop();
                  var req = new Request({
                          method: 'post',
                          url: $('runAjax').get('href'),
                          data: { 'content' : $('report_list').get('html'), 'subject' : $('report_subject').get('html') },
                          onRequest: function() {  },
                          onComplete: function(response) { alert('mail sent:' + response); }
                  }).send();
$('runAjax').removeEvent('click');
          });
  });
</script>

然后在刚才写的那个“发送邮件”功能上,修改成这样:

<a id='runAjax' href="?m=report&a=mailreport">发送邮件</a>

再就是report_subject这个id原本是没有的,咱给它加上:

<h4 id="report_subject">    
<?php
$uid = intval(v('uid'));
if( $uid < 1): ?>
<?=c('team_name')?>     
……

 

ok,commit上去试试看吧!

最后就是一些css的调整,以及收信人的设置,这个就不用我多写啦。

通过Ajax的方式来发送邮件的问题就在于——无法自动发送-。-

所以自动发送要如何弄,俺还要再多想想……


     本文转自shenleigang 51CTO博客,原文链接:http://blog.51cto.com/lazycai/795793,如需转载请自行联系原作者


相关文章
|
3月前
|
Dubbo NoSQL Java
阿里(钉钉部门)远程面,三面坐上“直通车”,拿下offer没问题
本人毕业于华南地区某不知名211院校,Java方向,目前钉钉三面已经结束,基本可以说是坐上了“直通车”,收到的反馈都是比较好的,跟HR沟通感觉希望很大,按道理来说拿下offer是没有太大问题的,以下内容就是我这次的钉钉远程面试经历的一个分享和一些心得,希望对大家能够有所帮助。
|
7月前
|
前端开发 Java
OA会议管理系统之会议通知(送审成功可查看人员是否参与会议)(一)
OA会议管理系统之会议通知(送审成功可查看人员是否参与会议)
76 0
|
7月前
|
前端开发
OA会议管理系统之会议通知(送审成功可查看人员是否参与会议)(二)
OA会议管理系统之会议通知(送审成功可查看人员是否参与会议)(二)
30 0
|
开发者
2023致开发者的一封信
简要讲述一下随着阿里云社区一路一来的收获,以及对新年的希望
2023致开发者的一封信
|
Java
传智杯Java志愿者传智专修学院总共召集了n位志愿者来负责打扫活动,现在需要你负责帮忙统计每位志愿者的工作情况,用来制作光荣榜,给他们发小花花
传智杯Java志愿者传智专修学院总共召集了n位志愿者来负责打扫活动,现在需要你负责帮忙统计每位志愿者的工作情况,用来制作光荣榜,给他们发小花花
98 0
传智杯Java志愿者传智专修学院总共召集了n位志愿者来负责打扫活动,现在需要你负责帮忙统计每位志愿者的工作情况,用来制作光荣榜,给他们发小花花
|
移动开发 运维 前端开发
开发霸总:我要让所有人知道,这个扫码组件,被你承包了
mPaaS 扫码插件上架 uni-app 插件市场:别人有的你也要有,我不允许你羡慕别人
2490 0
开发霸总:我要让所有人知道,这个扫码组件,被你承包了
|
数据库
【自然框架】开源社区活动,会员注册的第一份代码!
  前情回顾:     自然框架开源社区的第一次活动——实现会员注册     人员表设计思想 —— 也许会有点帮助     自然框架开发系列(一):自然框架 和 AgileEAS.NET 合作,开发b/s的药店系统!     漫长的期待,终于等来了第一份代码,这份代码由“好坏”提供。
957 0
|
程序员 持续交付 运维
【聚能聊有奖话题】程序员、测试员、项目经理,你们有freestyle吗?
近日云效公共云版本正式进入商业化服务阶段。 云效是一站式企业协同研发云,支持公共云、专有云和混合云三种模式下的大规模团队的项目管理和协同研发,它为应用项目研发全周期(需求->开发->测试->发布->运维->运营)提供高效的工具化支撑,落地实现敏捷研发、流式实施交付和分层自动化等先进理念,从而助力企业产品快速创新迭代和研发效能升级。
1335 0