运用 JavaMail 技术实现云打印

882 阅读6分钟

在我们最近所做的M3项目里面有个算价单的功能,在算价完毕后是算价结果的展示页,页面右上角提供的有“打印”按钮,点击“打印”按钮后云打印机会将算价结果打印到A4纸上。快捷高效,取代了传统的手写方便客户留存。这里面用到了JavaMail技术来实现云打印过程。下面整理下处理过程。

1、前端部分

在js里面定义个变量,值为打印机E-mail地址。在js里面请求后台方法,将打印机的打印邮箱地址传到后台,后台会用到。
例如 var email = "iorr111111111111@hpeprint.com";(这里只是举例,后面会讲到这个地址的获取方法)。

2、后台部分

在后台,需要将打印的内容用拼接字符串的方式给拼接出来,内容中如果有变量的,使用java代码拼接起来。建议所有的变量用一个VO封装起来传入,在方法里面拼接内容的时候挨个get就行了。

public void sendMail(CalPriceRecordViewVO resultvo, String useFor) throws Exception {
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.163.com");
props.put("mail.smtp.auth", "true");
Session session = Session.getInstance(props);
Message message = new MimeMessage(session);
message.addHeader("X-priority", String.valueOf(1));
InternetAddress mailFrom = null;
mailFrom = new InternetAddress("zhao111111@163.com");
message.setFrom(mailFrom);
InternetAddress[] mailTo = new InternetAddress[1];
mailTo[0] = new InternetAddress(email);
message.setRecipients(Message.RecipientType.TO, mailTo);
message.setSubject("购房信息");
Multipart multipart = new MimeMultipart();
BodyPart mimeBodyPart = new MimeBodyPart();
StringBuffer html3 = new StringBuffer();
HttpServletRequest request=ServletActionContext.getRequest();
html3.append("<%@page language='java' contentType='text/html; charset=utf-8' pageEncoding='utf-8'%>");
html3.append("< html>");
html3.append("< head>");
html3.append("< meta charset='utf-8'>");
html3.append("< /head>");
html3.append("< body>");
html3.append("< div style='padding-left:30px;'>");
html3.append("< p>< h2>1、置业方案:< /h2>< /p>");
html3.append("< div>< span>客户姓名:< /span>");
html3.append("< span>" + resultvo.getClient_name()
+ "< /span>< br>");
html3.append("< span>意向房源:< /span>");
html3.append("< span>" + resultvo.getIntent_house() + "< /span>< br>");
html3.append("< span>销售面积:< /span>");
html3.append("< span>" + resultvo.getSale_area() + "㎡< /span>< br>");
html3.append("< span>单位总价:< /span>");
html3.append("< span>" + resultvo.getTotal_price() + "元< /span>< div>");
html3.append("< p>< h2>2、购房优惠:< /h2>< /p>");
html3.append("< div>< span>购房优惠:< /span>");
html3.append("< span>" + (("".equals(resultvo.getBuy_fav())||resultvo.getBuy_fav()==null)?"":resultvo.getBuy_fav())
+ "< /span>< br>");
html3.append("< span>成交总价:< /span>");
html3.append("< span>" + resultvo.getDealPrice() + "元< /span>< br>");
html3.append("< span>成交单价:< /span>");
html3.append("< span>" + resultvo.getSinglePrice() + "元< /span>< /div>");
html3.append("< p>< h2>3、付款方案:< /h2>< /p>");
if(DateUtil.isEmptyString(resultvo.getTag())){
html3.append("< div>< span>贷款类别:< /span>");
String loanType="";
if ("1".equals(resultvo.getLoan_type())) {
loanType="商业贷款";
}else if ("2".equals(resultvo.getLoan_type())) {
loanType="公积金贷款";
}else if ("3".equals(resultvo.getLoan_type())) {
loanType="组合贷款";
}
html3.append("< span>" + loanType
+ "< /span>< br>");
html3.append("< span>还款方式:< /span>");
if ("1".equals(resultvo.getRefund_type())) {
html3.append("< span>等额本息< /span>< br>");
}else if("2".equals(resultvo.getRefund_type())){
html3.append("< span>等额本金< /span>< br>");
}
html3.append("< span>贷款年限:< /span>");
int qishu =0;
if (resultvo!=null && resultvo.getLoan_months()!=null) {
qishu=Integer.parseInt(resultvo.getLoan_months())*12;
}
html3.append("< span>" + resultvo.getLoan_months() + "年("+qishu+"期)< /span>< br>");
html3.append("< span>首付成数:< /span>");
html3.append("< span>" + resultvo.getFirst_percent() + "成< /span>< br>");
if ("1".equals(resultvo.getLoan_type()) || "2".equals(resultvo.getLoan_type())) {
html3.append("< span>银行利率:< /span>");
html3.append("< span>" + resultvo.getLoan_rate_name() + "< /span>< br>");
} else if ("3".equals(resultvo.getLoan_type())) {
html3.append("< span>公积金利率:< /span>");
html3.append("< span>" + resultvo.getAcc_rate_name() + "< /span>< br>");
html3.append("< span>商业利率:< /span>");
html3.append("< span>" + resultvo.getCom_rate_name() + "< /span>< br>");
}
html3.append("< span>首付金额:< /span>");
html3.append("< span>" + resultvo.getFirst_pay() + "元< /span>< br>");
html3.append("< span>贷款总额:< /span>");
html3.append("< span>" + resultvo.getLoan_total() + "元< /span>< br>");
html3.append("< span>还款总额:< /span>");
html3.append("< span>" + resultvo.getBackTotalPrice() + "元< /span>< br>");
if ("3".equals(resultvo.getLoan_type())) {
html3.append("< span>公积金贷款额:< /span>");
html3.append("< span>" + resultvo.getAcc_loan() + "元< /span>< br>");
html3.append("< span>商业贷款额:< /span>");
html3.append("< span>" + resultvo.getCom_loan() + "元< /span>< br>");
}
html3.append("< span>支付利息:< /span>");
html3.append("< span>" + resultvo.getInterestPrice() + "元< /span>< br>");
if ("1".equals(resultvo.getRefund_type())) {
html3.append("< span>月均还款:< /span>");
html3.append("< span>" + resultvo.getBackFirstPrice() + "元< /span>< /div>< br>");
} else if ("2".equals(resultvo.getRefund_type())) {
html3.append("< span>首月还款:< /span>");
html3.append("< span>" + resultvo.getBackFirstPrice() + "元< /span>< br>");
html3.append("< span>末月还款:< /span>");
html3.append("< span>" + resultvo.getBackLastPrice() + "元< /span>< /div>< br>");    
}
}else{
html3.append("< div>< span>一次性付款< /span>< /div>< br>");  
}
html3.append("< span>  本计划书仅为参考,最终以银行政策、政府规定及双方签订的相关合同为准,如有变动,恕不另行通知。< /span>");
html3.append("< p>< /p> 再次感谢您的光临!如有任何疑问请致电您的置业顾问。 < /div>< br/>< br/>");
OperatorVO operatorVO = (OperatorVO) ServletActionContext.getContext().getSession().get("operator");
html3.append("< div style='font-size:12px'>< span>置业顾问:< /span>< span>"
+ operatorVO.getOperName() + "< /span>   < span >置业顾问手机:< /span>< span>"
+ operatorVO.getTelno() + "< /span>   ");
html3.append("< span >销售连线:< /span>   < span >020-88888888 < /span>");
html3.append("< br>< span >打印日期:< /span>   < span >"+DateUtil.getDateChangeStringFormat(resultvo.getCal_time())+" < /span>");
html3.append("< /div>");
html3.append("< /body>");
html3.append("< /html>");
mimeBodyPart.setContent(html3.toString(), "text/html;charset=utf-8");
multipart.addBodyPart(mimeBodyPart);
message.setContent(multipart);
message.setSentDate(new Date());
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect("smtp.163.com", "zhao1111111@163.com", "wwwwmmmmm11111");
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}

在这段核心代码里面使用了JavaMail相关的技术的,因此需要导入JavaMail相关的jar文件
dsn.jar imap.jar mail.jar mailapi.jar pop3.jar smtp.jar。
props.put("mail.smtp.host", "");这里是指需要输入邮箱对应的smtp服务器地址,163邮箱的是smtp.163.com.
props.put("mail.smtp.auth", "true");这里是指获取smtp服务授权,默认为true,而且必须为true。
mailFrom = new InternetAddress("zhao111111@163.com");这里是指从哪里发出,在云打印的时候是要提供一个代发邮箱发送到云打印机的邮箱的。网上免费好用的邮箱一大堆,自己去申请一个即可。
mailTo[0] = new InternetAddress(email);这里是指发到哪里去,我这里的email参数就是接收前端传过来的云打印机的E-mail地址.
transport.connect("smtp.163.com", "zhao111111@163.com", "wwwwmmmm");这里的三个参数是代发邮箱smtp服务器地址、代发邮箱地址、代发邮箱的密码或者授权码。(其中smtp服务器地址每个邮箱服务提供商的各自都是不同的,密码或者授权码请在自己申请的邮箱里面获取)。

3、配置部分

当代码写好,项目部署好之后,还需要在云打印机这边做下设置才能开始工作。云打印机品牌也是有很多的,我用过的是HP云打印机,所以这里我以HP云打印机为例整理下步骤。其他品牌的云打印机的操作也大致一样。

  • ①将云打印机接入互联网(在输入密码的时候如果遇到英文可以多按几下数字键盘,这样就可以在数字和字母之间进行切换,类似手机功能机时代的T9键盘用法)。
  • ②开启web打印服务,在打印机的设置里面有云打印或者web打印相关的选项的,在打印机外面也会有云打印相关的按钮的。点击之后首先检查更新,更新到最新。这里建议把自动检查并更新功能打开。
  • ③启用E-Print。
  • ④找到打印机信息菜单,点击打印按钮,会将打印机信息打印到一张纸上。这个信息里面会给出打印机对应的打印邮箱地址。例如HP打印机的云打印邮箱都是以@hpeprint.com结尾的。将这个地址配置到项目中。(这时候可以你可以试着向这个电子邮箱里面发送一封任意内容的邮件,打印机那边就会将你发送的邮件内容打印出来的)。

最后就是反复调试和功能优化了。


本文对你有帮助?欢迎扫码加入后端学习小组微信群: