java代理实现domino web邮件下载

【背景】

近日在研究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="[`[email protected]#$%^&*()+=|{}':;',\\[\\]\\\\.<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
	    	Pattern   p   =   Pattern.compile(regEx);
	    	Matcher   m   =   p.matcher(str);
          //m=m.replaceAll("\\\\","");
	    	return   m.replaceAll("").trim();
	  } 

jar包下载地址:jar包下载



时间: 2024-10-13 01:24:54

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

java代理使用 apache ant实现文件压缩/解压缩

[背景] 近日在研究web邮件下载功能,下载的邮件可以导入foxmail邮件客户端,但是批量下载邮件还需将邮件打成一个压缩包.从网上搜索通过java实现文件压缩.解压缩有很多现成的例子. [参考代码](需要下载apache ant.jar包) import java.io.File; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.an

domino 代理发送邮件,并且邮件发件人是指定用户的实现方法

[背景] 今天一个朋友问我,domino代理发送邮件,对方收到发件人都是admin,怎么设置指定发件人呢?亲自写了段代码,发现是可行的. [参考代码] Sub Initialize On Error GoTo errhandle Dim ss As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Set db = ss.Currentdatabase Set doc = db.Createdocument() d

哪种代理适合用于Web数据采集

在Web数据采集中为了避免被服务器封锁而通过代理下载的情况很常见.但是,并非所有的代理都适合于Web数据采集.下面是鲲鹏数据的技术人员给出的说明. 根据HTTP代理的匿名性可以将其分为以下几种: 1. 透明代理(Transparent Proxies) 目标服务器能够检测到真实的源IP. 目标服务器根据HTTP请求头进行检测,判断依据: REMOTE_ADDR = 代理服务器 IP HTTP_VIA = 通常为代理服务器 IP(或代理软件名称,也可能无此头) HTTP_X_FORWARDED_F

java通过SMTP发送QQ邮件(参考自龙果学院)

java通过SMTP发送QQ邮件编辑 个人邮箱开通SMTP服务(进入个人邮箱,点击设置–>账户):  点击了账户后,往下拉可以看到SMTP服务选项,默认情况下这个选项是不开启的.点击开启腾讯会进行身份验证,身份验证通过以后,会收到一个用于使用SMTP的16位口令,验证身份的过程中把收到的口令保存下来,因为后面要使用SMTP功能必须要用到这个口令.  具体实现代码:     public static void main(String args[]) {        // 邮件内容       

java代理机制简单实现

java代理分静态代理和动态代理,动态代理有jdk代理和cglib代理两种,在运行时生成新的子类class文件.本文主要练习下动态代理,代码用于备忘.对于代理的原理和机制,网上有很多写的很好的,就不班门弄斧了. jdk代理 Java代码下载    import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class Prox

Java代理之(jdk静态代理/jdk动态代理/cglib动态代理/aop/aspectj)

一.概念 代理是什么呢?举个例子,一个公司是卖摄像头的,但公司不直接跟用户打交道,而是通过代理商跟用户打交道.如果:公司接口中有一个卖产品的方法,那么公司需要实现这个方法,而代理商也必须实现这个方法.如果公司卖多少钱,代理商也卖多少钱,那么代理商就赚不了钱.所以代理商在调用公司的卖方法后,加上自己的利润然后再把产品卖给客户.而客户部直接跟公司打交道,或者客户根本不知道公司的存在,然而客户最终却买到了产品. 专业点说:代理模式是对象的结构型模式,代码模式给某一个对象提供代理,并由代理对象控制原对象

Java代理Internet

Java代理Internet 2013年10月23日 23:14 Java HTTP Proxy Settings OVERVIEW For local networks within an organization, access to the public-domain Internet is often via a HTTP Proxy. This article talks about the HTTP proxy settings for the Java environment. I

如何禁止web邮件

通过网页登陆来收发邮件虽然不占用太多带宽和资源,但是对于企业内部信息的安全性有一定的威胁,上网行为管理建议可以禁止或者针对性禁止.第一种方法:禁止web邮件,通过封堵web邮件协议来禁止web邮箱的使用,这样所有的网页邮件都不可以在用了. 第二种方法:设置网页黑名单,禁止网页邮件登陆网址,这个可以针对性具体的网页邮件禁止

eclipse中java项目转成Web项目

在eclipse导入一个myeclipse建的web项目后,在Eclipse中显示的还是java项目,按下面的步骤可以将其转换成web项目. 1.找到项目目录下的.project文件 2.编辑.project文件,找到<natures>...</natures> 3.2中找到的结点中加下面的的代码 <nature>org.eclipse.wst.common.project.facet.core.nature</nature> <nature>o