菜鸟学编程:给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,如需转载请自行联系原作者


相关文章
|
7月前
|
人工智能
快来围观!我自制的 AI 周报小能手:自动收集整理周报,一键发送邮件
快来围观!我自制的 AI 周报小能手:自动收集整理周报,一键发送邮件
149 0
|
10月前
|
搜索推荐
想提升职场形象?收下这3种工作中常用的邮件问候语吧!
邮件开场白至关重要,它定了邮件的调子,影响读者情绪和理解。升级到功能强大的邮箱,利用邮件跟踪功能优化沟通。考虑与收件人的关系、邮件情境及期望结果来选择合适的问候语。冷邮件需正式,非正式邮件可展现亲近,跟进邮件则强调重点。记得适时使用个性化和幽默元素,以及考虑时间及群发情况。良好的电子邮件礼仪能提升回复率和沟通效率。
100 1
想提升职场形象?收下这3种工作中常用的邮件问候语吧!
|
10月前
|
Dubbo NoSQL Java
阿里(钉钉部门)远程面,三面坐上“直通车”,拿下offer没问题
本人毕业于华南地区某不知名211院校,Java方向,目前钉钉三面已经结束,基本可以说是坐上了“直通车”,收到的反馈都是比较好的,跟HR沟通感觉希望很大,按道理来说拿下offer是没有太大问题的,以下内容就是我这次的钉钉远程面试经历的一个分享和一些心得,希望对大家能够有所帮助。
|
人工智能 小程序 前端开发
【用AI写周报,“卷死”同事】打造一款自动生成周报的微信小程序
在现代企业中,周报是一个重要的沟通和管理工具。然而,手动编写周报是一项繁琐的任务,往往需要花费大量时间和精力。因此,利用人工智能技术来自动化周报生成是一个值得探究的方向。本文将介绍如何通过微信小程序接入ChatGPT,根据前端、后端、设计师、产品、测试和架构师等职位自动生成周报,并提供完整的代码实现。
404 0
|
Cloud Native Dubbo 应用服务中间件
系列征文2|后端领域主题征文开始啦!参与即有奖!
阿里云开发者社区推出“后端技术征文挑战赛”。现面向社区所有开发者征集后端领域技术文章,可以是语言框架的使用技巧,也可以是技术领域的趋势探讨,只要你有干货,那就分享出来!在活动规定时间内前往阿里云开发者社区发文,就有机会获得空气炸锅、社区积分等丰富奖励,参与即可获奖,快来参加吧!
1548 17
系列征文2|后端领域主题征文开始啦!参与即有奖!
|
小程序 前端开发 Android开发
常用邮箱申请渠道有哪些?此文给你讲清楚了
之前给大家提到过在注册小程序APPid时,需要用到邮箱,这里需要注意一下两点。 一个邮箱只能注册一个小程序 一个身份证可以注册5个,个人小程序 那么接下来就给大家列举一下,具体的邮箱都有那些。
386 0
常用邮箱申请渠道有哪些?此文给你讲清楚了
倒计时1天!钉钉未来组织概念馆即将开馆!听说超火的奶茶店老板也来了!
2021未来组织大会倒计时1天! 10月13日邀你与数字化先行者一起探索数字化的无限可能! 钉钉总裁不穷解读未来组织数字化的趋势观点 未来组织有哪些数字化指标衡量?社科院发布权威报告解读 云钉一体背景下, 玩转低代码的钢铁厂厂长, 「未来工厂」如何利用数字技术解放生产力? 奶牛养得好,牛奶才会好 「认养一头牛」的组织如何创新? 更有远道而来的神秘嘉宾“请”你喝秋天的第一杯奶茶! 想了解更多「未来组织」信息? 下滑提前一睹为快!
倒计时1天!钉钉未来组织概念馆即将开馆!听说超火的奶茶店老板也来了!
|
前端开发 算法 数据挖掘
俄罗斯央行:急需数字卢布,不会推迟 CBDC 测试;腾讯发布多个 Web3 岗位招聘信息;V 神:自己对以太坊的影响力不断下降 | 区块链周报
区块链周报栏目从产业动态、技术进展和政策监管等方面,为您总结了本周区块链领域发生的头条事件,让您更快速了解行业最新动态。
144 0
|
监控 数据可视化 BI
做好这个比周报更有用!【宜搭精品应用推荐】
宜搭的精品应用模板之一“OKR管理系统”,囊括了OKR录入、目标里程碑录入、目标/KR变更、KR执行情况填写、KR进展更新等核心功能点,可以帮助团队同学对齐目标、聚焦重点、可视化目标里程。在宜搭模板市场,可一键复制使用,科学管理目标,快快喊上团队成员用起来吧~
做好这个比周报更有用!【宜搭精品应用推荐】