【背景】
近日在研究domino web邮件下载功能,下载的邮件可以导入foxmail、outlook邮件客户端,下载的邮件格式为eml。
【参考代码】(需要下载jmail.jar包)
private void makeEml(String unid) { Document memo=null; RichTextItem body=null; try { memo = maildb.getDocumentByUNID(unid); String mailtime=((String) memo.getCreated().getLocalTime()); String d_email = memo.getItemValueString("From"); Vector v_to = memo.getItemValue("SendTo"); Vector v_cc = memo.getItemValue("CopyTo"); Vector v_bcc = memo.getItemValue("BlindCopyTo"); String m_subject = memo.getItemValueString("Subject"); String m_text = memo.getItemValueString("Body"); Properties props = new Properties(); Session session = Session.getInstance(props, null); //System.out.println("-----00000000------"); try { MimeMessage msg = new MimeMessage(session); msg.setSubject(m_subject); //msg.setFrom(new InternetAddress(javax.mail.internet.MimeUtility.encodeText(d_email,"UTF-8", "B").replaceAll(" ", ""))); msg.setFrom(new InternetAddress(javax.mail.internet.MimeUtility.encodeText((String)d_email,"UTF-8", "B").replaceAll(" ", ""))); //System.out.println("-----111111------"); for (int i=0; i<v_to.size(); i++){ System.out.println("-----111111---0000---="+javax.mail.internet.MimeUtility.encodeText((String) v_to.elementAt(i),"UTF-8", "B").replaceAll(" ", "")); InternetAddress[] toaddress = InternetAddress.parse(javax.mail.internet.MimeUtility.encodeText((String) v_to.elementAt(i),"UTF-8", "B").replaceAll(" ", "")); msg.addRecipients(Message.RecipientType.TO, toaddress); //msg.addRecipients(Message.RecipientType.TO, toaddress); //System.out.println("-----111111---1111--222-"); } for (int i=0; i<v_cc.size(); i++){ InternetAddress[] ccaddress = InternetAddress.parse(javax.mail.internet.MimeUtility.encodeText((String) v_cc.elementAt(i),"UTF-8", "B").replaceAll(" ", "")); msg.addRecipients(Message.RecipientType.CC, ccaddress); } //System.out.println("-----111111--333----"); for (int i=0; i<v_bcc.size(); i++){ InternetAddress[] bccaddress = InternetAddress.parse(javax.mail.internet.MimeUtility.encodeText((String) v_bcc.elementAt(i),"UTF-8", "B").replaceAll(" ", "")); msg.addRecipients(Message.RecipientType.BCC, bccaddress); } MimeBodyPart p1 = new MimeBodyPart(); p1.setText(m_text); Multipart mp = new MimeMultipart(); mp.addBodyPart(p1); String extractMimePath=extractPath+memo.getNoteID()+"/"; File extractDir2 = new File(extractMimePath); extractDir2.mkdirs(); MIMEEntity mime = memo.getMIMEEntity(); if (mime != null) { MimeBodyPart p2 = new MimeBodyPart(mime.getInputStream()); mp.addBodyPart(p2); } else { //System.out.println("Body="+m_text); //System.out.println("Body="+memo.getFirstItem("Body").getType()) body = (RichTextItem) memo.getFirstItem("Body"); Vector v = body.getEmbeddedObjects(); Enumeration e = v.elements(); while (e.hasMoreElements()) { eo = (EmbeddedObject) e.nextElement(); filename = eo.getName(); eo.extractFile(extractMimePath + filename); FileDataSource fds = new FileDataSource(extractMimePath + filename); MimeBodyPart p2 = new MimeBodyPart(); p2.setDataHandler(new DataHandler(fds)); p2.setHeader("Content-Transfer-Encoding", "Base64"); p2.setFileName(MimeUtility.encodeText(filename)); mp.addBodyPart(p2); } } msg.setContent(mp); File emlFile = new File(extractPath+StringFilter(m_subject+" "+mailtime)+".eml"); //File emlFile = new File(extractPath+memo.getNoteID()+".eml"); emlFile.createNewFile(); FileOutputStream outFile = new FileOutputStream(emlFile); msg.writeTo(outFile); outFile.close(); deleteDir(extractDir2); } catch (MessagingException mex) { deleteDir(extractDir2); mex.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); }finally{ recycleRes(eo); recycleRes(body); recycleRes(memo); } } public static boolean deleteDir(File dir) { if (dir.isDirectory()) { String[] children = dir.list(); for (int i = 0; i < children.length; i++) { boolean success = deleteDir(new File(dir, children[i])); if (!success) { return false; } } } return dir.delete(); } public static String StringFilter(String str) { String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\]\\\\.<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"; Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(str); //m=m.replaceAll("\\\\",""); return m.replaceAll("").trim(); }jar包下载地址:jar包下载