实现javaEmail邮件发送功能并带有生成的pdf附件
来源:互联网 发布:淘宝会员名怎么取不了 编辑:程序博客网 时间:2024/06/05 10:37
上一篇博文是生成pdf文档, 这篇文档跟大家分享一下怎么发送邮件,并且实现pdf作为附件的功能。
javaEmail的maven形式的jar包:
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version></dependency>
首先是实现邮件发送功能的代码:
public void sendEmailAndPDF(SendEmailAndPDFReuqest sendEmailAndPDFReuqest, String fileLocalName) throws Exception {logger.error("sendEmailAndPDF is keep on.....and fileLocalName is "+fileLocalName+"request is "+JsonUtils.objectToJson(sendEmailAndPDFReuqest));EmailMessage emailMessage = new EmailMessage();StringBuffer sb = new StringBuffer();String orderNo = sendEmailAndPDFReuqest.getResp().getMainOrderNo();sb.append(orderNo);emailMessage.setSubject(String.format("订单号:%s预订确认", sb)); //邮箱标题emailMessage.setContext(sendOrderDeatilAndPDFContext.buildContext(sendEmailAndPDFReuqest));//邮箱正文,我这个正文很简单,就不上代码了,就是一些html标签+文字描述emailMessage.setBodyHtml(true);Vector<String> file = new Vector<String>();//保存多个需上传附件的文件名file.add(fileLocalName);emailMessage.setFile(file);emailProvider.sendEmailAndPDF(emailMessage, sendEmailAndPDFReuqest.getResp().getSupplier(),sendEmailAndPDFReuqest.getProviderEmail());}email.setEmailReceiver(); //设置邮箱接收者sendEmail(email); //下面是主要的发送代码:private String host = "smtp.****.com.cn"; //这是smtp协议的邮箱服务器主机,每个公司都不一样 private int port = 27; private String auth = "true";private String userName = "frank.***@****.com"; //公司哟向服务器主机的账号private String password = ""; //密码private String sendMailAddress = "****"; //发送的邮件名,一般的用公司名义去申请的邮箱 Logger logger = LoggerFactory.getLogger(this.getClass());public void sendEmail(EmailMessage email) throws Exception{logger.error("createSendEmail is starting........email is "+JsonUtils.objectToJson(email));System.setProperty("mail.mime.charset","UTF-8");Properties props = new Properties(); props.put("mail.smtp.host", host); props.put("mail.smtp.port", port); props.put("mail.smtp.auth", auth); Session s = Session.getInstance(props); MimeMessage message = new MimeMessage(s); InternetAddress from = new InternetAddress(sendMailAddress); message.setFrom(from); message.addRecipients(Message.RecipientType.TO, email.getAddress());//邮箱接收者 message.setSubject(email.getSubject()); message.setSentDate(new Date()); Multipart mp = new MimeMultipart(); if(!email.getFile().isEmpty()){//有附件 Enumeration<String> efile=email.getFile().elements(); while(efile.hasMoreElements()){ MimeBodyPart mbp=new MimeBodyPart(); String filename=efile.nextElement(); //选择出每一个附件名 FileDataSource fds= new FileDataSource(filename); //得到数据源 mbp.setDataHandler(new DataHandler(fds)); //得到附件本身并至入BodyPart mbp.setFileName(MimeUtility.encodeText(fds.getName())); //得到文件名同样至入BodyPart mp.addBodyPart(mbp); } email.getFile().removeAllElements(); } if (email.isBodyHtml()) { MimeBodyPart mbp = new MimeBodyPart(); mbp.setContent(email.getContext(), "text/html;charset=utf-8"); mp.addBodyPart(mbp); message.setContent(mp); } else{ MimeBodyPart mbp = new MimeBodyPart(); mbp.setContent(email.getContext(), "text/plain;charset=utf-8"); mp.addBodyPart(mbp); message.setContent(mp); } message.saveChanges(); Transport transport = s.getTransport("smtp");//创建邮箱服务器通道的协议 transport.connect(host, port, userName, password);//设置连接的主机号端口号账号和密码 logger.error(" and message.getAllRecipients is "+ message.getAllRecipients() != null ? JsonUtils.objectToJson(message.getAllRecipients()):""); transport.sendMessage(message, message.getAllRecipients()); transport.close(); logger.info("email send tips: email from " + userName + " to " + email.getEmailReceiver());}
这样就能完成一个邮箱发送的基础功能,下面就来看看怎么讲在代码中生成的pdf发到附件中?
其实上面的代码已经实现了。
因为之前已经生成了pdf文档,但是并没有在没有返回页面之前,还是在response中的输出流中,但是Email的的实体类只接受文件名的形式,
之前想过将response中的输出流转换成输入流或者字节流来做, 转换成字节流的byteinputstream只能从高速缓存中读取, 而httpservletReponse中读取不到,
这边用的办法是将response先写到默认的文件路中 System.getProperty("java.io.tmpdir");
就是在系统的C:\Users\mars\AppData\Local\Temp,这个地址是jvm默认的临时文件存放地址,
上一篇文章有这一步,如下: 将pdfWrite写入文件输入流中输出到系统临时文件地址下,
FileOutputStream fos = new FileOutputStream(file); if(type.equals(DOWNLOAD_PDF)){ PdfWriter.getInstance(document, response.getOutputStream());//用于返回页面下载 }else if(type.equals(SEND_PDF)){ PdfWriter.getInstance(document, fos);//用于邮件附件获取 }Vector<String> file = new Vector<String>();//保存多个需上传附件的文件名file.add(fileLocalName);emailMessage.setFile(file); 通过方法去获取对应文件名和地址的文件作为附件,实现了附件上传 if(!email.getFile().isEmpty()){//有附件 Enumeration<String> efile=email.getFile().elements(); while(efile.hasMoreElements()){ MimeBodyPart mbp=new MimeBodyPart(); String filename=efile.nextElement(); //选择出每一个附件名 FileDataSource fds= new FileDataSource(filename); //得到数据源 mbp.setDataHandler(new DataHandler(fds)); //得到附件本身并至入BodyPart mbp.setFileName(MimeUtility.encodeText(fds.getName())); mp.addBodyPart(mbp); } email.getFile().removeAllElements(); }
阅读全文
0 0
- 实现javaEmail邮件发送功能并带有生成的pdf附件
- javaemail功能齐全的发送邮件类【能上传附件哦】
- JSP实现发送带有附件的邮件代码
- springMail的发送带有附件的邮件
- sendEmail发送带有附件的邮件
- Python 发送带有中文附件的邮件
- python发送带有附件的邮件
- python 发送带有附件的邮件
- MailBee.NET Objects发送电子邮件(SMTP)教程六:创建并发送带有附件的邮件
- android使用javaemail实现发送邮件
- JavaMail发送邮件带有附件
- JavaMail实现带附件和图片的邮件发送功能
- SendEmail javaEmail发送邮件
- JAVAEMAIL发送邮件
- php发送带有图片和附件的邮件
- Python模块探秘 Smtplib发送带有各种附件的邮件
- 【python 数据报表】发送带有样式和附件的邮件
- unity3d实现发送带附件的邮件
- PHP跨域获取session
- python问题:IndentationError:expected an indented block错误解决
- U盘文件系统损坏恢复
- 【数据结构实验六】图
- JAVA基础-面向对象思想
- 实现javaEmail邮件发送功能并带有生成的pdf附件
- 图片的三级缓存
- 科学计数法
- 为oracle数据库新增表空间及用户
- 多线程基础
- 利用MATLAB 2016a进行BP神经网络的预测(含有神经网络工具箱)
- 【Linux】Linux中常用操作命令
- Java——0/1背包
- Exception in thread "main" java.lang.NoClassDefFoundError解决