【背景】

近日在研究domino web邮件下载功能,下载的邮件能够导入foxmail、outlook邮件client,下载的邮件格式为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包下载



java实现代理domino web邮件下载的更多相关文章

  1. 用 Java 技术创建 RESTful Web (服务 JAX-RS:一种更为简单、可移植性更好的替代方式)

    作者: Dustin Amrhein, 软件工程师, IBM Nick Gallardo, 软件工程师, IBM 出处: http://www.ibm.com/developerworks/cn/we ...

  2. 使用Java原生代理实现AOP

    ### 本文由博主柒.原创,转载请注明出处 ### 完整源码下载地址 [https://github.com/MatrixSeven/JavaAOP](https://github.com/Matri ...

  3. Java动态代理全面分析

    代理模式 解说:给某一个对象提供一个代理,并由代理对象控制对原对象的引用: 代理模式需要以下几个角色: 1  主题:规定代理类和真实对象共同对外暴露的接口: 2  代理类:专门代理真实对象的类: 3 ...

  4. Java 动态代理作用是什么?

    Java 动态代理作用是什么?   1 条评论 分享   默认排序按时间排序 19 个回答 133赞同反对,不会显示你的姓名 Intopass 程序员,近期沉迷于动漫ING 133 人赞同 ① 首先你 ...

  5. java高级---->Java动态代理的原理

    Java动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程 ...

  6. 使用Java原生代理实现数据注入

    本文由博主原创,转载请注明出处 完整源码下载地址 https://github.com/MatrixSeven/JavaAOP 上一篇,咱们说了使用Java原生代理实现AOP的简单例子,然么就不得不说 ...

  7. java动态缓存技术:WEB缓存应用(转)

    可以实现不等待,线程自动更新缓存 Java动态缓存jar包请下载. 源代码: CacheData.java 存放缓存数据的Bean /** *  */package com.cari.web.cach ...

  8. 【转载】Java 动态代理

    Java 动态代理 本文为 Android 开源项目源码解析 公共技术点中的 动态代理 部分项目地址:Jave Proxy,分析的版本:openjdk 1.6,Demo 地址:Proxy Demo分析 ...

  9. 转:JMeter--使用代理录制Web性.能测试脚.本

    Apache JMeter是一款纯Java的应用程序,用于对软件或系统做性.能测试,如压力测试.负载测试.最初设计是用于web应用测试,由于开源其测试组件不断被扩充,逐步扩展到其他测试领域中. 接下给 ...

随机推荐

  1. C++ Primer 学习笔记_76_模板和泛型编程 --模板定义[继续]

    模板和泛型编程 --模板定义[续] 四.模板类型形參 类型形參由keywordclass或 typename后接说明符构成.在模板形參表中,这两个keyword具有同样的含义,都指出后面所接的名字表示 ...

  2. 推动Common Lisp的实际应用

    推动Common Lisp的实际应用 推动Common Lisp的实际应用

  3. linux 下opensplice的简易安装

    http://www.prismtech.com/opensplice/opensplice-dds-community/software-downloads 下载对应我选择的是: OpenSplic ...

  4. VC6迁移到VS2008几个问题——良好的代码,从我做起,从现在开始。

    最近.有一个项目开发,需要使用一次项目的代码.只有当项目VC6下编译通过的,在VS2008下不一定编译通过,能编译通过也不一定能链接成功.以下总结一下我在一个VC6项目移植到VS2008中遇到的一些问 ...

  5. How-To: add EPEL repository to Centos 6.x is Easy!

    How-To: add EPEL repository to Centos 6.x is Easy! | ITek Blog How-To: add EPEL repository to Centos ...

  6. linux下安装QT过程

    说QT是linux下主要的图形开发工具一点都不过分,虽然诺基亚公司放弃Meego.遣散了Qt开发团队,但是它的各种商业.企业版本还是的到了很好的保护,linux下的开发工具集里还是经常看到它的身影,毕 ...

  7. 给一个非常长的字符串str 另一个字符集比方{a,b,c} 找出str 里包括{a,b,c}的最短子串。要求O(n)

    给一个非常长的字符串str 另一个字符集比方{a,b,c} 找出str 里包括{a,b,c}的最短子串.要求O(n). 比方,字符集是a,b,c,字符串是abdcaabcx,则最短子串为abc. 设置 ...

  8. 关于在ios7之后改变状态栏颜色

    看到网上都说 在ios7之后要这样设置 首先,须要在Info.plist配置文件里,添加键:UIViewControllerBasedStatusBarAppearance,并设置为YES: 然后,在 ...

  9. SocketAsyncEventArgs使用解说

    原文:SocketAsyncEventArgs使用解说 如果在.NET下写过网络通讯的同学应该感觉不陌生了,有很多刚入门的同学很多都认为这东西可以大大提高处理效能还有就是使用上很不适应.其实使用之前最 ...

  10. poj3237(树链剖分)

    题目链接:http://poj.org/problem?id=3237 题目大意:指定一颗树上有3个操作: 1)询问操作,询问a点和b点之间的路径上最长的那条边的长度(即最大值): 2)取反操作,将a ...