当前位置: 代码网 > it编程>编程语言>Java > Java读取Hbase数据,使用POI操作Excel模板,并定时发送带有Excel附件的邮件_java定时发送excel邮件(3)

Java读取Hbase数据,使用POI操作Excel模板,并定时发送带有Excel附件的邮件_java定时发送excel邮件(3)

2024年08月06日 Java 我要评论
/ 需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)// 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使。// 设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)// 用(你可以在控制台(console)上看到发送邮件的过程)Date date = new Date();// 用刚刚设置好的props对象构建一个session。// 用session为参数定义消息对象。//读取excel模板。// 加载发件人地址。// 加载收件人地址。

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

        table inbndhtable = null;
        table transhtable = null;

        conn = hbasedatasource.getconnection();
        inbndhtable = htableutil.gettable(conn, hbasename1);
        transhtable = htableutil.gettable(conn, hbasename2);

        scan inbndscan = new scan();
        inbndscan.setcaching(conn.getconfiguration().getint(hconstants.hbase_client_scanner_caching, 10000));
        inbndscan.setcacheblocks(true);
        inbndscan.setrowprefixfilter(bytes.tobytes(rowkey));

        scan transscan = new scan();
        transscan.setcaching(conn.getconfiguration().getint(hconstants.hbase_client_scanner_caching, 10000));
        transscan.setcacheblocks(true);
        transscan.setrowprefixfilter(bytes.tobytes(rowkey));        

### 2.获取数据


代码如下(示例):



map<string, map<string, byte[]>> inbndckiresults = htableutil.scan(inbndhtable, inbndscan);
map<string, map<string, byte[]>> transckiresults = htableutil.scan(transhtable, transscan);




---


## 三、向excel模板写入相关数据,并生成本地文件



public void exporttemplatesendemail(list platinumforecastlists, list platinumteansforecastlists) throws exception {
date date = new date();//取时间
string todaystr = sdf1.format(date);
//读取excel模板
classpathresource resource = new classpathresource(template);
inputstream in = resource.getinputstream();
xssfworkbook wb = new xssfworkbook(in);
xssfsheet indndsheet = wb.getsheetat(0);
xssfsheet transsheet = wb.getsheetat(1);

    xssfcellstyle style = wb.createcellstyle();
    //单元格边框属性设置
    style.setborderbottom(borderstyle.thin);
    style.setborderleft(borderstyle.thin);
    style.setborderright(borderstyle.thin);
    style.setbordertop(borderstyle.thin);

    indndsheet.createrow(1).createcell(0).setcellvalue("日期:" + todaystr);
    transsheet.createrow(1).createcell(0).setcellvalue("日期:" + todaystr);
    indndsheet.getrow(1).getcell(0).setcellstyle(style);
    transsheet.getrow(1).getcell(0).setcellstyle(style);
    indndsheet.getrow(1).createcell(7).setcellstyle(style);
    transsheet.getrow(1).createcell(10).setcellstyle(style);

    style.setverticalalignment(verticalalignment.center);
    style.setalignment(horizontalalignment.center);

    for (int i = 0; i < platinumforecastlists.size(); i++) {
        platinuminbndforecastbean platinumforecastbean = (platinuminbndforecastbean) platinumforecastlists.get(i);
        // row从0开始  cell 从0开始的
        indndsheet.createrow(i + 3).createcell(0).setcellvalue(i + 1);
        indndsheet.getrow(i + 3).createcell(1).setcellvalue(platinumforecastbean.getfullname());
        indndsheet.getrow(i + 3).createcell(2).setcellvalue(platinumforecastbean.getdeparturetime());
        indndsheet.getrow(i + 3).createcell(3).setcellvalue(platinumforecastbean.getflightnum());
        indndsheet.getrow(i + 3).createcell(4).setcellvalue(platinumforecastbean.getfqtvnumber());
        indndsheet.getrow(i + 3).createcell(6).setcellvalue(platinumforecastbean.getcheckininfostatus());
        indndsheet.getrow(i + 3).createcell(7).setcellvalue(platinumforecastbean.getterminal());
        indndsheet.getrow(i + 3).getcell(0).setcellstyle(style);
        indndsheet.getrow(i + 3).getcell(1).setcellstyle(style);
        indndsheet.getrow(i + 3).getcell(2).setcellstyle(style);
        indndsheet.getrow(i + 3).getcell(3).setcellstyle(style);
        indndsheet.getrow(i + 3).getcell(4).setcellstyle(style);
        indndsheet.getrow(i + 3).createcell(5).setcellstyle(style);
        indndsheet.getrow(i + 3).getcell(6).setcellstyle(style);
        indndsheet.getrow(i + 3).getcell(7).setcellstyle(style);
    }

    for (int i = 0; i < platinumteansforecastlists.size(); i++) {
        platinumtransforecastbean platinumforecastbean = (platinumtransforecastbean) platinumteansforecastlists.get(i);
        // row从0开始  cell 从0开始的
        transsheet.createrow(i + 3).createcell(0).setcellvalue(i + 1);
        transsheet.getrow(i + 3).createcell(1).setcellvalue(platinumforecastbean.getinbndfltnum());
        transsheet.getrow(i + 3).createcell(2).setcellvalue(platinumforecastbean.getarrtime());
        transsheet.getrow(i + 3).createcell(3).setcellvalue(platinumforecastbean.getlastseg());
        transsheet.getrow(i + 3).createcell(4).setcellvalue(platinumforecastbean.getfullname());
        transsheet.getrow(i + 3).createcell(5).setcellvalue(platinumforecastbean.gettransfltnum());
        transsheet.getrow(i + 3).createcell(6).setcellvalue(platinumforecastbean.getdeptime());
        transsheet.getrow(i + 3).createcell(7).setcellvalue(platinumforecastbean.getnextseg());
        transsheet.getrow(i + 3).createcell(9).setcellvalue(platinumforecastbean.getfqtvnumber());
        transsheet.getrow(i + 3).createcell(10).setcellvalue(platinumforecastbean.gettelnum());


        transsheet.getrow(i + 3).getcell(0).setcellstyle(style);
        transsheet.getrow(i + 3).getcell(1).setcellstyle(style);
        transsheet.getrow(i + 3).getcell(2).setcellstyle(style);
        transsheet.getrow(i + 3).getcell(3).setcellstyle(style);
        transsheet.getrow(i + 3).getcell(4).setcellstyle(style);
        transsheet.getrow(i + 3).getcell(5).setcellstyle(style);
        transsheet.getrow(i + 3).getcell(6).setcellstyle(style);
        transsheet.getrow(i + 3).getcell(7).setcellstyle(style);
        transsheet.getrow(i + 3).createcell(8).setcellstyle(style);
        transsheet.getrow(i + 3).getcell(9).setcellstyle(style);
        transsheet.getrow(i + 3).getcell(10).setcellstyle(style);
    }
    indndsheet.createfreezepane(0, 3, 0, 3);
    transsheet.createfreezepane(0, 3, 0, 3);

    //写入磁盘保存文件
    fileoutputstream output = new fileoutputstream(patinumfilename);
    wb.write(output);
    output.close();

    //作为输出流发邮件
    bytearrayoutputstream bytearrayoutputstream = new bytearrayoutputstream();
    wb.write(bytearrayoutputstream);
    list<string> emaillist = new arraylist<>();
    emaillist.add("自定义邮箱");


    for (string email : emaillist) {
        boolean rst = sendmail(new bytearrayinputstream(bytearrayoutputstream.tobytearray()), "白金卡预报", email);
        if (rst) {
            logger.info("向" + email + "邮件发送成功!");
        } else {
            logger.info("向" + email + "邮件发送失败!");
        }
    }


}

## 四、将新生成的excel以流的方式,进行邮件发送



public boolean sendmail(inputstream is, string filename, string tomail) {
transport transport = null;
try {
system.setproperty(“mail.mime.splitlongparameters”, “false”);
properties props = new properties();
// 设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
props.put(“mail.smtp.host”, host);
props.put(“mail.smtp.port”, port);
props.put(“mail.smtp.socketfactory.class”, “javax.net.ssl.sslsocketfactory”);
props.put(“mail.smtp.ssl.trust”, “*”);
// 需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
props.put(“mail.smtp.auth”, “true”);
// 用刚刚设置好的props对象构建一个session
session session = session.getdefaultinstance(props);
// 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
// 用(你可以在控制台(console)上看到发送邮件的过程)
session.setdebug(false);
// 用session为参数定义消息对象
mimemessage message = new mimemessage(session);
// 加载发件人地址
message.setfrom(new internetaddress(username));
// 加载收件人地址
message.addrecipient(message.recipienttype.to, new internetaddress(tomail));
// 加载标题
message.setsubject(filename);

        // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
        multipart multipart = new mimemultipart();

        // 设置邮件的文本内容
        bodypart contentpart = new mimebodypart();
        contentpart.settext("自定义邮件内容");
        multipart.addbodypart(contentpart);
        // 添加附件
        bodypart messagebodypart = new mimebodypart();
        datasource source = new bytearraydatasource(is, "application/msexcel");
        // 添加附件的内容
        messagebodypart.setdatahandler(new datahandler(source));
        // 添加附件的标题
        // 这里很重要,通过下面的base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
        messagebodypart.setfilename(mimeutility.encodetext(filename + ".xlsx"));
        multipart.addbodypart(messagebodypart);

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com