java实现代理domino web邮件下载
【背景】
近日在研究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邮件下载的更多相关文章
- 用 Java 技术创建 RESTful Web (服务 JAX-RS:一种更为简单、可移植性更好的替代方式)
作者: Dustin Amrhein, 软件工程师, IBM Nick Gallardo, 软件工程师, IBM 出处: http://www.ibm.com/developerworks/cn/we ...
- 使用Java原生代理实现AOP
### 本文由博主柒.原创,转载请注明出处 ### 完整源码下载地址 [https://github.com/MatrixSeven/JavaAOP](https://github.com/Matri ...
- Java动态代理全面分析
代理模式 解说:给某一个对象提供一个代理,并由代理对象控制对原对象的引用: 代理模式需要以下几个角色: 1 主题:规定代理类和真实对象共同对外暴露的接口: 2 代理类:专门代理真实对象的类: 3 ...
- Java 动态代理作用是什么?
Java 动态代理作用是什么? 1 条评论 分享 默认排序按时间排序 19 个回答 133赞同反对,不会显示你的姓名 Intopass 程序员,近期沉迷于动漫ING 133 人赞同 ① 首先你 ...
- java高级---->Java动态代理的原理
Java动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程 ...
- 使用Java原生代理实现数据注入
本文由博主原创,转载请注明出处 完整源码下载地址 https://github.com/MatrixSeven/JavaAOP 上一篇,咱们说了使用Java原生代理实现AOP的简单例子,然么就不得不说 ...
- java动态缓存技术:WEB缓存应用(转)
可以实现不等待,线程自动更新缓存 Java动态缓存jar包请下载. 源代码: CacheData.java 存放缓存数据的Bean /** * */package com.cari.web.cach ...
- 【转载】Java 动态代理
Java 动态代理 本文为 Android 开源项目源码解析 公共技术点中的 动态代理 部分项目地址:Jave Proxy,分析的版本:openjdk 1.6,Demo 地址:Proxy Demo分析 ...
- 转:JMeter--使用代理录制Web性.能测试脚.本
Apache JMeter是一款纯Java的应用程序,用于对软件或系统做性.能测试,如压力测试.负载测试.最初设计是用于web应用测试,由于开源其测试组件不断被扩充,逐步扩展到其他测试领域中. 接下给 ...
随机推荐
- Linux中more命令的实现
#include <stdio.h> #include <stdlib.h> #include <string.h> #define PAGELEN 24 #def ...
- Hibernate(五)——经典解析一对一关联映射
前面两篇介绍了多对一.一对多的映射.今天分享下一对一的关联映射关系.有两种策略可以实现一对一的关联映射:主键关联.唯一外键关联. 主键关联——两个表有完全相同的主键值,来表示它们的一对一的关系.数据库 ...
- 联系人数据库设计之AbstractContactsProvider
个人见解,欢迎交流. 联系人数据库设计,源代码下载请自行去android官网下载. package com.android.providers.contacts; import android.con ...
- (四)SAX方式解析XML数据
SAX方式解析XML数据 文章来源:http://www.cnblogs.com/smyhvae/p/4044170.html 一.XML和Json数据的引入: 通常情况下,每个需要访问网络的应用程 ...
- AWS(0) - Amazon Web Services
Computer EC2 – Virtual Servers in the Cloud EC2 Container Service – Run and Manage Docker Containers ...
- poj 1872 A Dicey Problem WA的代码,望各位指教!!!
A Dicey Problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 832 Accepted: 278 Des ...
- poj-3791-An Easy Game-记忆化搜索
dp[i][j]:还有i个不同样的位置,还能走j步,一共同拥有多少种走法. 非常明显 dp[i][j]=sigm(dp[i-k][j-1]*c[i][k]*c[n-i][m-k]); 用记忆化搜索记忆 ...
- hdu1532(最大流)
传送门:Drainage Ditches 题意:给出n个河流,m个点,以及每个河流的流量,求从1到m点的最大流量. 分析:网络流入门题,第一次写按照白书上毫无优化的Ford_fulkerson算法,先 ...
- unix解释器文件详解
exec执行普通文件和解释器文件的区别 2014-11-15 23:52:45 分类: LINUX exec执行普通文件和解释器文件的区别 ——lvyilong316 1. 从一个问题开始 首先要从项 ...
- hdu1506(dp求最大子矩阵)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506 分析: 对于每个单位矩阵,我们先求出连续比它高的最左边的下标假设为l,然后求出比它高的最右边的下 ...