当前位置: 首页 > news >正文

网站策划编辑招聘上海建设厅焊工证查询网站

网站策划编辑招聘,上海建设厅焊工证查询网站,cms二次开发网站建设,校园门户网站 建设目录 1.生成Excel表格 1.依赖设置 2.代码#xff1a; 2.邮件发送 1.邮件发送功能实现-带附件 2.踩过的坑 1.附件名中文乱码问题 3.参考文章#xff1a; 需求描述#xff1a;项目审批完毕后#xff0c;需要发送邮件通知相关人员#xff0c;并且要附带数据库表生成的…目录 1.生成Excel表格 1.依赖设置 2.代码 2.邮件发送 1.邮件发送功能实现-带附件 2.踩过的坑 1.附件名中文乱码问题 3.参考文章 需求描述项目审批完毕后需要发送邮件通知相关人员并且要附带数据库表生成的Excel表格这就要求不光是邮件发送功能还要临时生成Excel表格做为附件 1.生成Excel表格 使用huTool工具包的Excel表格生成功能 1.依赖设置 dependency     groupIdcn.hutool/groupId     artifactIdhutool-all/artifactId     version5.7.22/version /dependency dependency     groupIdorg.apache.poi/groupId     artifactIdpoi-ooxml/artifactId     version5.2.2/version /dependency Hutool-all中包含了Hutool的所有工具类由于需要生成Excel文件需要依赖poi 2.代码 Overridepublic void publish(xxxxxxPublishVo publishVo) {..................................................../*** 生成Excel表格*///在内存操作写到输出流中ExcelWriter writer ExcelUtil.getWriter(true);//自定义标题别名writer.addHeaderAlias(projectCode, xx编号);writer.addHeaderAlias(projectName, xx名称);writer.addHeaderAlias(targetType, xx类型);writer.addHeaderAlias(targetName, xx名称);writer.addHeaderAlias(targetForMp, xxxx目标);writer.addHeaderAlias(symbols, xx限制符);//获取数据QpmxxxxTargetMg query new QpmxxxxTargetMg();query.setProjectCode(publishVo.getProjectCode());ListxxxxxxListDTO data selectxxxxxxByCondition(query);//整理数据以便于生成Excel表格ListObject dataNew new ArrayList();SetString stageCollectSet new HashSet();for (xxxxxxListDTO target: data){ListxxxxxxTargetMgStage stageList target.getxxxxxxStageList();MapString, Object addProperties new HashMap();for (xxxxxxMgStage stage: stageList){if (!stageCollectSet.contains(stage)){stageCollectSet.add(stage.getStage());//给Excel增加列writer.addHeaderAlias(stage.getStage(), stage.getStage() 目标);}//为对象动态增加属性addProperties.put(stage.getStage(), stage.getStageTarget());}//生成新的包含了新增字段的对象Object targetNew ReflectUtil.getTarget(target, addProperties);dataNew.add(targetNew);}//只保留别名的数据writer.setOnlyAlias(true);writer.write(dataNew,true);ByteArrayOutputStream outputStream new ByteArrayOutputStream();// excel写入到输出流writer.flush(outputStream,true);........................................................................... 上述代码中调用了工具类ReflectUtil给对象动态增加属性。由于数据中有子类需要获取到子类中的某个字段并生成Excel表格所以Excel表格构造就需要对数据对象进行改造简单来说就是需要给对象动态增加新的属性(成员对象的属性)如下所示示例 把studentList里面的关键属性数据新增给Test类 示例不是很合适凑合着用吧 class Test {     private String class;     .............................................     private ListStudent studentList; } 工具类ReflectUtil用于给对象动态增加新的属性 import com.google.common.collect.Maps; import net.sf.cglib.beans.BeanGenerator; import net.sf.cglib.beans.BeanMap; import org.apache.commons.beanutils.PropertyUtilsBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map;/*** 为实体类动态增加属性用于生成Excel表格时的特殊情况例如表格中的列需要动态增加*/ public class ReflectUtil {static Logger logger LoggerFactory.getLogger(ReflectUtil.class);public static Object getTarget(Object dest, MapString, Object addProperties) {// get property mapPropertyUtilsBean propertyUtilsBean new PropertyUtilsBean();PropertyDescriptor[] descriptors propertyUtilsBean.getPropertyDescriptors(dest);MapString, Class propertyMap Maps.newHashMap();for (PropertyDescriptor d : descriptors) {if (!class.equalsIgnoreCase(d.getName())) {propertyMap.put(d.getName(), d.getPropertyType());}}// add extra propertiesfor (Map.EntryString, Object entry : addProperties.entrySet()) {propertyMap.put(entry.getKey(), entry.getValue().getClass());} // addProperties.forEach((k, v) - propertyMap.put(k, v.getClass()));// new dynamic beanDynamicBean dynamicBean new DynamicBean(dest.getClass(), propertyMap);// add old valuefor (Map.EntryString, Class entry : propertyMap.entrySet()) {try {// filter extra propertiesif (!addProperties.containsKey(entry.getKey())) {dynamicBean.setValue(entry.getKey(), propertyUtilsBean.getNestedProperty(dest, entry.getKey()));}} catch (Exception e) {logger.error(e.getMessage(), e);}};// add extra valuefor (Map.EntryString, Object entry : addProperties.entrySet()) {try {dynamicBean.setValue(entry.getKey(), entry.getValue());} catch (Exception e) {logger.error(e.getMessage(), e);}};Object target dynamicBean.beanMap;return target;}public static class DynamicBean {/*** 目标对象*/private Object target;/*** 属性集合*/private BeanMap beanMap;public DynamicBean(Class superclass, MapString, Class propertyMap) {this.target generateBean(superclass, propertyMap);this.beanMap BeanMap.create(this.target);}/*** bean 添加属性和值** param property* param value*/public void setValue(String property, Object value) {beanMap.put(property, value);}/*** 获取属性值** param property* return*/public Object getValue(String property) {return beanMap.get(property);}/*** 获取对象** return*/public Object getTarget() {return this.target;}/*** 根据属性生成对象** param superclass* param propertyMap* return*/private Object generateBean(Class superclass, MapString, Class propertyMap) {BeanGenerator generator new BeanGenerator();if (null ! superclass) {generator.setSuperclass(superclass);}BeanGenerator.addProperties(generator, propertyMap);return generator.create();}} } 至此我们就生成了Excel表格并且把数据写入到了输出流中。 下面我们需要从输出流中拿到Excel表格数据并做为邮件的附件发送出去。 2.邮件发送 1.邮件发送功能实现-带附件 Spring Email 抽象的核心是 JavaMailSender接口通过实现JavaMailSender接口把 Email 发送给邮件服务器由邮件服务器实现邮件发送的功能。 Spring 自带了一个 JavaMailSender的实现 JavaMailSenderImpl。SpringBoot 应用在发送 Email 之前我们需要在配置文件中对JavaMailSender进行属性配置这样就可以利用Springboot的自动装配机制将 JavaMailSenderImpl 装配为 Spring容器的一个 bean。 spring.mail.host: xxxxxxx.com # 设置端口 spring.mail.port: 25 # 设置用户名 spring.mail.username: xxxxxxxxxx # 设置密码该处的密码是QQ邮箱开启SMTP的授权码而非QQ密码 spring.mail.password: xxxxxxxxx # 设置是否需要认证如果为true,那么用户名和密码就必须的 # 如果设置false可以不设置用户名和密码当然也得看你的对接的平台是否支持无密码进行访问的。 spring.mail.properties.mail.smtp.auth: false # STARTTLS[1]  是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接TLS或SSL而不是另外使用一个端口作加密通信。 spring.mail.properties.mail.smtp.starttls.enable: true spring.mail.properties.mail.smtp.starttls.required: fasle spring.mail.properties.mail.imap.starttls.socketFactory.fallback: false spring.mail.properties.mail.smtp.starttls.socketFactory.class: com.ey.model.MailCommand 继上面完整的Excel生成代码现在继续写邮件发送代码 Autowiredprivate JavaMailSender springMailSender; Overridepublic void publish(xxxxxxPublishVo publishVo) {//........这里不再复制上面的代码只从Excel表格写入输出流开始.........// excel写入输出流writer.flush(outputStream,true);//邮件附件名称String fileName String.format(制定xx目标-%s.xlsx,UUID.randomUUID());//这个地方无需再配置springboot自动装配配置信息在nacos配置中心 // springMailSender.setDefaultEncoding(UTF-8); // springMailSender.setHost(mx.goertek.com); // springMailSender.setPort(25); // springMailSender.setProtocol(JavaMailSenderImpl.DEFAULT_PROTOCOL); // springMailSender.setUsername(tims.sysgoertek.com); // springMailSender.setPassword(Khkd0804); // Properties p new Properties(); // p.setProperty(mail.smtp.timeout, 25000); // p.setProperty(mail.smtp.auth, true); // p.setProperty(mail.smtp.socketFactory.class, javax.net.ssl.SSLSocketFactory); // springMailSender.setJavaMailProperties(p);MimeMessage mimeMessage springMailSender.createMimeMessage();System.getProperties().setProperty(mail.mime.splitlongparameters, false);MimeMessageHelper messageHelper null;try {messageHelper new MimeMessageHelper(mimeMessage, true, UTF-8);} catch (MessagingException e) {throw new RuntimeException(e);}try {LoginUser userInfo UserUtil.getCurrentUser(); // String currentUserEmail userInfo.getEmaila(); // messageHelper.setFrom(currentUserEmail);messageHelper.setFrom(mailUserName);//设置收件人String[] emailArr publishVo.getEmails().replaceAll(\\s, ).split(,);messageHelper.setTo(emailArr);//设置抄送人if (!StringUtils.isBlank(publishVo.getCcEmails())){String[] ccEmailArr publishVo.getCcEmails().replaceAll(\\s, ).split(,);messageHelper.setCc(ccEmailArr);}messageHelper.setSubject(项目- publishVo.getProjectName().concat(: 制定品质目标完毕));messageHelper.setText(项目- publishVo.getProjectName().concat(: 制定品质目标完毕));try {//messageHelper.addInline(doge.gif, new File(xx/xx/doge.gif));messageHelper.addAttachment(MimeUtility.encodeWord(fileName,utf-8,B), new ByteArrayResource(outputStream.toByteArray()));} catch (UnsupportedEncodingException e) {throw new RuntimeException(e);}springMailSender.send(mimeMessage);} catch (MessagingException e) {throw new RuntimeException(e);} 2.踩过的坑 上述邮件发送功能实现过程中踩过的坑 1.附件名中文乱码问题 附件的名字是中文发送成功后在邮件中的附件名字中文乱码怎样解决这个问题 1. 设置系统值 System.setProperty(mail.mime.splitlongparameters, false); 2. 这里在创建对象的时候定义编码格式(utf-8) MimeMessageHelper messageHelper new MimeMessageHelper(mes, true, utf-8); 3. 其次在添加附件的时候附件名是需要定义编码 messageHelper.addAttachment(MimeUtility.encodeWord(附件名,utf-8,B), 附件输入流)); 3.参考文章 使用hutool工具进行导入导出excel表格_hutool excel-CSDN博客 springboot实现excel生成并且通过邮件发送 - 哔哩哔哩
http://www.hkea.cn/news/14301968/

相关文章:

  • 哪家购物网站建设好广告设计与制作烧钱吗
  • 做网站的费用如何写分录企业形象设计课程标准
  • 做家宴网站wordpress静态加速
  • 新手怎么推广自己的店铺seo工具共享网站
  • 外贸网站建设视频教程做任务什么网站
  • 网站免费模版代码网站自己做需要多少钱
  • 那里有正规网站开发培训学校深圳sem竞价托管
  • jsp网站首页那栏怎么做南皮县做网站
  • 浙江省旅游企业网站建设情况app开发制作专业吗
  • 做招聘网站用哪个cms工作组赴河南协助
  • 济南网站建设丨 首选搜点网络不会代码可以做网站维护吗
  • 对于网站建设的调查问卷wordpress 读写分离
  • 郑州做网站的外包公司禅城区网站建设
  • 做视频网站的方法什么是速成网站
  • h5响应式集团网站推荐网站做图片
  • 卧龙区网站建设哪家好网站定位有哪些
  • 网页网站设计培训建设企业网站企业网上银行
  • 增城做网站公司私人网站如何建
  • 制作网站的步骤域名无锡住房和城乡建设厅网站
  • 海外直邮购物网站网站建设人员工作要求
  • 自己可以做网站服务器wordpress 删除首页
  • 网站建设要懂哪些技术国外网站 备案吗
  • 购房网站系统建设方案网站代运营协议
  • 商务网站建设兴田德润电话多少wordpress缓存规则
  • 乔拓云建站平台不是免费的北京 网站 优化
  • 做外贸网站需要请外贸文员吗seo信息网
  • 安阳百度网站制作多少钱espresso wordpress函数
  • 广州邮局网站点开图片跳到网站怎么做的
  • 1万网站建设费入什么科目海南建设厅评审网站
  • 做网站需要审核资质吗南和企业做网站