一、需求背景
1,需要在某个操作后发送邮件,比如在列表上点击按钮给指定某个人发送邮件。并且还要发送指定文件附件。
二、实现方案
1,需要在消息渠道配置邮件服务,然后在单据列表通过插件监听按钮,然后调用EmailHandler.sendEmail方法去发送邮件。
三、具体实现
1,找到系统管理->消息平台->消息渠道,一般默认有一个叫email的电子邮件,可以直接使用
2,点击修改,进行相关参数的配置
其中实现类,默认是kd.bos.workflow.engine.msg.handler.EmailServiceHandler,也可以根据需要自己重写,然后注册进来
邮箱配置,这里以QQ邮箱为例,在账户的设置中去开启服务,会得到授权码,就是上图中的密码,QQ邮箱邮件服务器地址是一样的,用户名和发送人账号,填写你的邮箱账号,发送人名称可以随意填写。
3,在消息模板中去增加消息模板(也可以不加,在代码中去给消息设置title,正文等等)
4,在单据列表插件中,需要创建消息,然后调用邮件发送接口
if (key.equals("kdec_baritemap2")) { EmailInfo emailInfo = new EmailInfo(); emailInfo.setTitle("title"); emailInfo.setContent("正文"); List<String> receiver = new ArrayList<>(); receiver.add("xxxxxx@qq.com"); emailInfo.setReceiver(receiver); MessageAttachment attachment = new MessageAttachment(); List<byte[]> datas = this.getBytesByFile("F:\\log\\demo.txt"); attachment.setAttachments(datas); List<String> attachmentNames = new ArrayList<>(); attachmentNames.add("xxxx.txt"); emailInfo.setAttachments(datas); emailInfo.setAttachmentNames(attachmentNames); EmailHandler.sendEmail(emailInfo) }
其中,邮件中添加附件是需要setAttachments,可以查看它的类型是List<byte[]>。
public static List<byte[]> getBytesByFile(String pathStr) { File file = new File(pathStr); try { FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream bos = new ByteArrayOutputStream(1000); byte[] b = new byte[1000]; int n; while ((n = fis.read(b)) != -1) { bos.write(b, 0, n); } fis.close(); byte[] data = bos.toByteArray(); List<byte[]> datas = new ArrayList<>(); datas.add(data); bos.close();; return datas; } catch (Exception e) { e.printStackTrace(); } return null; }
5,效果演示
四、踩坑
如果消息渠道,没用系统默认的email那个电子邮件,而是自己新建的一个,则需要重写kd.bos.message.service.handler.EmailHandler,以及消息渠道的注册类kd.bos.workflow.engine.msg.handler.EmailServiceHandler(因为这里默认的是调用的上面这个EmailHandler),因为这里的sendemail是直接get的标识为email的,可以重写,修改下。可以自己断点走一下。
public static Map<String, Object> sendEmail(EmailInfo emailInfo) { logger.info("sendEmail... title" + emailInfo.getTitle()); MsgChannelInfo msgChannelInfo = MsgServiceCache.getMsgChannel("email"); if (msgChannelInfo == null) { return MessageUtils.wrapResult(ResManager.loadKDString("未配置消息服务,无法发送邮件...")); } else { //todo ... } }
五、平台版本
BOS_V3.0.009.0
大家如有任何建议和意见,欢迎在评论区留言,我将努力改进。创作不易,如能帮到大家,请动动您的金手指点赞鼓励一下,非常感谢~【emoji】【emoji】【emoji】
email.zip(1.20KB)
推荐阅读