JS实现静默发送邮件功能

楼主
我是社区第485122位番薯,欢迎点我头像关注我哦~
1. 概述
1.1 应用场景
  • 填报完某个页面后,判断填报中出现了某个关键字,此时需要发送邮件给某个领导。若使用定时任务可能不及时,也会占用服务器资源;使用手动发送则比较麻烦,需要填写收件人,抄送人,内容等等。

  • 需要在填报成功后通过 JS 判断,符合某个条件时,需要发送邮件,而且发送指定的内容,这时就需要用到 JS 发送邮件功能。


1.2 预期效果

模板中勾选中止的数据,填报成功后立即通过邮件告知,并发送中止的内容信息。如下图所示:

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

1.3 解决思路

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

2. 示例

2.1 模板准备

打开模板 %FR_HOME%\webroot\WEB-INF\reportlets\doc\Form\LineForm\LineForm1.cpt 。

2.2 添加填报成功事件

在 FineReport 设计器中,点击模板>模板Web属性>填报页面设置,在「事件设置」下添加一个填报成功事件,如下图所示:

JS 代码如下所示:

  1. function encode(s) //对符号进行转义      
  2. {      
  3.     s=s.replace(/</g,'<');      
  4.     s=s.replace(/>/g,'>');      
  5.     s=s.replace(/"/g,'"');   
  6.     return s;   
  7. }   
  8. var v=false;   
  9. var content='';   
  10. content+='<html><body>以下产品发生了中止:<br /><br /><table cellspacing="0" border="1">';   
  11. var row=0;   
  12. content+='<tr><th>产品名称</th><th>供应商</th><th>类别</th><th>成本价</th><th>单价</th><th>库存量</th><th>订购量</th><th>再订购量</th></tr>';   
  13. $('td[id^="K"]').each(function(i,e){   
  14.     if($(e).attr('cv')=='true' || $(e).attr('cv')=='真' )   
  15.     {   
  16.         v=true;//只要出现了中止,就令v为true,这样之后一定会发送邮件  
  17.         row=$(e).attr('row');   
  18.         content+='<tr><td>'+$('.x-table td[col=2][row='+row+']').text()+'</td>';//添加该行第3列内容   
  19.         content+='<td>'+$('.x-table td[col=3][row='+row+']').text()+'</td>';//添加该行第4列内容   
  20.         content+='<td>'+$('.x-table td[col=4][row='+row+']').text()+'</td>';//添加该行第5列内容+   
  21.         content+='<td>'+$('.x-table td[col=5][row='+row+']').text()+'</td>';//添加该行第6列内容   
  22.         content+='<td>'+$('.x-table td[col=6][row='+row+']').text()+'</td>';//添加该行第7列内容   
  23.           content+='<td>'+$('.x-table td[col=7][row='+row+']').text()+'</td>';//添加该行第8列内容   
  24.           content+='<td>'+$('.x-table td[col=8][row='+row+']').text()+'</td>';//添加该行第9列内容   
  25.         content+='<td>'+$('.x-table td[col=9][row='+row+']').text()+'</tr>';//添加该行第10列内容   
  26.     }   
  27.    });   
  28.    content+='</table></body></html>';   
  29.    //如果选择了中止,就发送邮件   
  30. if(v){   
  31.     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>"})      
  32.       
  33. }
复制代码

其中,发送邮件里面的参数有几个需要在实际实用中修改,如下表所示:

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

注:发送邮件需要设置发件人账户,请参考  邮箱

2.3 效果预览

保存模板,点击填报预览,效果如本文 1.2 章「预期效果」相同。

注:该方法不支持移动端。



编辑于 2020-12-4 09:47  
分享扩散:

沙发
发表于 2020-12-4 13:05:26
帮助文档的内容/。?
板凳
发表于 2020-12-4 17:11:12
这个太复杂了吧,
我都是参数面板有个位置填邮箱(可以提前做好下拉菜单)
查询后的结果。。然后超链接发送邮件。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

2回帖数 7关注人数 7957浏览人数
最后回复于:2020-12-4 17:11

返回顶部 返回列表