第1章 概述
在使用报表产品时,有时会有这样的需求:将每一报表导出后通过邮件发送给相关人员。UniEAP Report自带了一个用来发送邮件的API,本文就来介绍它的具体用法。
第2章 实现步骤
2.1 邮件服务配置
首先要提供用于发送邮件的通用配置,包括邮件服务器、发件人、用户名、密码等。这此信息需要在\WEB-INF\conf\unieap\report\mail.properties中配置好。
文件参数说明如下:
参数名 | 说明 |
---|---|
host | 邮件服务器 |
from | 邮箱名 |
userName | 用户名 |
password | 密码 |
senderShowName | 邮件显示发件人名称 |
useDefault | 是否使用默认配置: true:不需要配置用户名、密码(对于不需要指定用户名、密码的邮件服务器,此项配置为true); false:需要配置用户名、密码; |
security | 连接安全设置: None:无安全配置 SSL/TLS:使用SSL/TLS安全 STARTTLS:使用STARTTLS安全 |
port | 发送邮件服务器端口 |
protocols | SSL协议名称,如果存在多个协议,中间使用空格间隔如:SSLv3 TLSv1 |
isDebug | 是否使用调试模式(该配置用于二次开发中问题的诊断,通常情况下无需配置): True:使用调试模式 False:关闭调试模式 如果使用调试模式,则控制台可以查看发送邮件的详细信息。 |
如果邮件服务器为SSL加密传输,则需要配置数字签名证书,证书的配置方法如下:
将服务器提供的数字签名证书SomeCA.cer复制到%JAVA_HOME%\jre\lib\security目录下。使用命令行进入目录:cd %JAVA_HOME%\jre\lib\security,执行如下命令:
keytool -import -alias cacerts -keystore .\cacerts -file SomeCA.cer –trustcacerts
提示输入密码,SUN_JDK默认的密码为changeit;会弹出提示,‘是否信任这个认证?’确认后,即可使用SSL密文邮件服务器发送邮件。
2.2 发送邮件选项
在发送邮件时,需要设置收件人、邮件主题、正文、附件类型等信息,此时要用到com.neusoft.report.server.api.MailOptions类,定义如下,已列出所有可设置项:
public class MailOptions {
// 附件类型常量
public static String ATTACHMENT_TYPE_XLS = "XLS";
public static String ATTACHMENT_TYPE_PDF = "PDF";
public static String ATTACHMENT_TYPE_DOC = "DOC";
// 收件人
private String[] to;
// 抄送
private String[] cc;
// 暗送
private String[] bcc;
// 邮件主题
private String subject;
// 邮件正文
private String content;
// 是否带附件
private boolean hasAttachment;
// 附件类型,可以是XLS/PDF/DOC三者之一
private String attachmentType;
// setters and getters
…
2.3 调用发送邮件API
调用com.neusoft.report.server.api.MailUtil类的两个sendReportMail方法之一发送邮件,方法签名如下:
public static void sendReportMail(String reportId, MailOptions mailOptions) throws UnsupportedEncodingException, MessagingException;
public static void sendReportMail(String reportId, Map reportParams,Map reportContext, MailOptions mailOptions) throws MessagingException, UnsupportedEncodingException;
参数说明:
reportParams,包含所有报表参数的名值对。
reportContext,生成报表时使用的上下文对象。
reportId,要发送的报表的id。
mailOptions,邮件选项对象。
两个方法的区别在于,当报表无参数且不需要设置上下文时,可以直接调用参数较少的方法,此时会将reportParams和reportContext设为空Map并调用第二个方法。
下面给出一个发送邮件的简单示例:
String reportId = "dbcc7350-a3a5-4c9d-9dc0-4dc0e029b786";
MailOptions options = new MailOptions();
options.setTo(new String[] { "zhan.j@neusoft.com" });
options.setBcc(new String[] { "fuyw@neusoft.com" });
options.setSubject("test");
options.setHasAttachment(true);
options.setAttachmentType(MailOptions.ATTACHMENT_TYPE_XLS);
MailUtil.sendReportMail(reportId, options);
第3章 约束条件
使用发送邮件API存在以下约束条件:
(1) 报表引擎必须已经启动,并且初始化成功。
(2) 暂不支持通过邮件发送分段报表。
(3) 报表正文和邮件正文只能选择一个,即如果使用报表作为正文,正文中不允许再有其他内容。如果还需要发送其他内容,则只能将报表作为附件。