JS实现静默发送邮件功能

编辑
  • 文档创建者:yets11
  • 浏览次数:6597次
  • 编辑次数:10次
  • 最近更新:Kevin-s 于 2019-06-04
  • 1.场景描述

    FineReport 中提供了各种发送邮件的方法,比如报表工具栏手动点击发送邮件,控件点击或编辑后发送邮件,决策系统中定时任务发送邮件等等;

    但是在某些场景下,比如填报完某个页面后,判断填报中出现了某个关键字,此时需要发送邮件给某个领导,而使用定时任务可能不及时,也会以占用服务器资源,使用手动发送则比较麻烦,需要填写收件人,抄送人,内容等等,比如我们需要在填报成功后通过JS判断,符合某个条件时,需要发送邮件,而且发送指定的内容,这时就需要用到 JS 发送邮件功能了。

    需求:模板中选择了一批数据中发生了中止,填报成功后立即通过邮件告知,并发送中止的内容信息。


    注:邮件以 HTML 显示,可复制内容。


    2.解决思路

    在 JS 中,FineReport 提供了_g().emailReport()这个方法来启动发送邮件功能,但是仍然弹出的是手动发发邮件的功能,我们可以使用FR.sentMail()方法来实现更加灵活的发送邮件功能


    3.解决方案

    要求填报成功后检测到中止列中有勾选中止时,发送邮件,并提示哪些信息发生了中止

    打开模板%FR_HOME%\webroot\WEB-INF\reportlets\doc\Form\LineForm\LineForm1.cpt添加一个填报成功事件,如下图:


    JS 代码如下:

    function encode(s) //对符号进行转义      
    {      
        s=s.replace(/</g,'&lt;');      
        s=s.replace(/>/g,'&gt;');      
        s=s.replace(/"/g,'&quot;');   
        return s;   
    }   
    var v=false;   
    var content='';   
    content+='<html><body>以下产品发生了中止:<br /><br /><table cellspacing="0" border="1">';   
    var row=0;   
    content+='<tr><th>产品名称</th><th>供应商</th><th>类别</th><th>成本价</th><th>单价</th><th>库存量</th><th>订购量</th><th>再订购量</th></tr>';    
    $('td[id^="K"]').each(function(i,e){   
        if($(e).attr('cv')=='true' || $(e).attr('cv')=='真' )   
        {   
            v=true;//判断是否选择了中止   
            row=$(e).attr('row');   
            content+='<tr><td>'+$('.x-table td[col=2][row='+row+']').text()+'</td>';//添加该行第3列内容   
            content+='<td>'+$('.x-table td[col=3][row='+row+']').text()+'</td>';//添加该行第4列内容   
            content+='<td>'+$('.x-table td[col=4][row='+row+']').text()+'</td>';//添加该行第5列内容+   
            content+='<td>'+$('.x-table td[col=5][row='+row+']').text()+'</td>';//添加该行第6列内容   
            content+='<td>'+$('.x-table td[col=6][row='+row+']').text()+'</td>';//添加该行第7列内容   
              content+='<td>'+$('.x-table td[col=7][row='+row+']').text()+'</td>';//添加该行第8列内容   
              content+='<td>'+$('.x-table td[col=8][row='+row+']').text()+'</td>';//添加该行第9列内容   
            content+='<td>'+$('.x-table td[col=9][row='+row+']').text()+'</tr>';//添加该行第10列内容   
        }   
       });   
       content+='</table></body></html>';   
       //如果选择了中止,就发送邮件   
    if(v){   
        FR.sentMail({xmlconf:"<?xml version=\"1.0\" encoding=\"UTF-8\"?><R xmlVersion=\"20151125\" releaseVersion=\"8.0.0\" class=\"com.fr.js.EmailJavaScript\"><Parameters/><EmailJS mailTo=\"min.chen@fanruan.com\" cc=\"\" bcc=\"\" title=\"邮件标题\" mainText=\""+encode(content)+"\" showTplContent=\"True\"/><\/R>"})      
          
    }

    其中,发送邮件里面的参数有几个需要在实际实用中修改

      参数描述  
      mailTo  收件人邮箱地址,可以是多个
      cc  抄送邮箱地址
      bcc  密件抄送邮箱地址
      tittle  邮件主题
      mainText  邮件主要内容
     showTplContent  是否显示报表内容

    注:发送邮件需要设置发件人账户,点击管理系统>系统管理>邮件,进行配置,详细请查看系统管理中的邮箱配置;

    填报成功后,如果选了中止,就会发送邮件,并且显示发送结果,最终效果如上图。

    附件列表


    主题: 填报应用
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]