Page tree
Skip to end of metadata
Go to start of metadata

 场景: 通常我们可过计划任务把电子表格报表内容以邮件的正文形式发送。

 实现思路:通过计划中的【定制】写JAVA代码实现。

 效果如下:

 


注1:本示例中接收邮箱建议使用foxmail客户端查看。

若是使用网页版邮箱客户端会产生格式丢失的问题(原因:网页版上接收查看邮件,网页自身会屏蔽很多信息;同时outlook对html的解析存在问题,这些会导致邮件显示无边框)。

注2:电子表格必须是纯表格(文本),不能存在图形,如果存在图形或其他非文本内容会存在发送的正文存在问题。(原因:因为导出html是有部分脚本及其他的需要执行,邮件的客户端执行不了)

若是只能通过网页版邮箱查看或者是电子表格存在非文本内容,建议考虑使用导出png的方式:通过计划任务把电子表格导出图片以邮件正文发送


操作步骤:

1、先创建好电子表格报表。

2、在【定制管理】-》【计划任务】-》【任务】创建任务,【任务类型】选择:“定制”

  JAVA代码如下:

自定义任务
 
importPackage(Packages.smartbi.sdk.service.spreadsheetreport);
importPackage(Packages.smartbi.scheduletask.task);
importPackage(Packages.smartbi.sdk.service.systemconfig);
importPackage(Packages.java.lang);
importPackage(Packages.java.util);
importPackage(Packages.java.text);
importPackage(Packages.java.io);
importPackage(Packages.org.apache.commons.lang);
importPackage(Packages.org.apache.commons.mail);
importPackage(Packages.smartbi.scheduletask.component);
importPackage(Packages.smartbi.util);
var report = null;
    //定义email对象,初始化参数
    var multiPartEmail = new SmartbiMultiPartEmail();
    var systemConfigService = new SystemConfigService(connector);
    var configList = systemConfigService.getSystemConfigs();
  
    var mailServer = null;
    var fromAddress = null;
    var userName = null;
    var password = null;
    var encryptPassword = null;
    var emailSSLEnabled = null;
    var emailTLSEnabled = null;
	var mailAlias = null;
    var port = "";
    for (var i = 0; i < configList.size(); i++) {
        var config = configList.get(i);
            if (config!=null) {
                if (config.getKey().equals("EMAIL_SMTP_SERVER")) {
                     mailServer = config.getValue();
                } else if (config.getKey().equals("EMAIL_USER_NAME")) {
                     userName = config.getValue();
                } else if (config.getKey().equals("EMAIL_USER_ALIAS")){
					mailAlias = config.getValue();
				} else if (config.getKey().equals("EMAIL_USER_ADDRESS")) {
                     fromAddress = config.getValue();
                } else if (config.getKey().equals("EMAIL_USER_PASSWORD")) {
                     password= config.getValue();
                } else if (config.getKey().equals("EMAIL_USER_PASSWORD_ENCRYPT")) {
                    encryptPassword = config.getValue();
                } else if (config.getKey().equals("EMAIL_SSL_ENABLED")) {
                    if (config.getValue().equals("true")) {
                        emailSSLEnabled = true;
                    }
                } else if (config.getKey().equals("EMAIL_TLS_ENABLED")) {
                    if (config.getValue().equals("true")) {
                        emailTLSEnabled = true;
                    }
                } else if (config.getKey().equals("EMAIL_SMTP_PORT")) {    //端口
                    port = config.getValue().trim();
                }
            }
        }
    if (StringUtil.equals(encryptPassword, "true")) {
        password = AESCryption.decrypt(password);
    }
    System.out.println(mailServer);
    System.out.println(fromAddress);
    System.out.println(password);
    multiPartEmail.setHostName(mailServer);
    multiPartEmail.setAuthentication(userName, password);
    if(mailAlias){
		 multiPartEmail.setFrom(fromAddress, mailAlias);
	} else{
   		 multiPartEmail.setFrom(fromAddress);
	}
    if(emailSSLEnabled){
        multiPartEmail.setSSL(true);
        if(port != ""){
            multiPartEmail.setSslSmtpPort(port);
        }
    }
    if(emailTLSEnabled){
        multiPartEmail.setTLS(true);
    }
    if(port != "" && !emailSSLEnabled){
        multiPartEmail.setSmtpPort(port);
    }
    multiPartEmail.addTo("zhouyan@smartbi.com.cn");//接收邮箱地址
    multiPartEmail.setCharset("GBK");//邮件内容字符集
    multiPartEmail.setSubject("测试邮件");//邮件标题
 
//    var sb = new StringBuffer();
//    sb.append("<html><body><p>这是一个系统自动发送的邮件,请勿回复。</p></body></html>");
//    sb.append("\n");
 
      report = new SSReport(connector);
      report.open("I4028812115561f6c01449562ca190067"); //报表资源ID
      //report.setParamValue(String id, String value, String displayValue);//设置报表的参数默认值
      var os = new ByteArrayOutputStream();
      report.doExport("HTML","","",os,"","","");
      var html = os.toString("utf8");
      //logger.info(html);
      report.close();
     //发送邮件
    multiPartEmail.setHtmlMsg(html);
    multiPartEmail.send();

注:设置参数默认值可参考以下方式:


  • No labels