`
zyn010101
  • 浏览: 325700 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jmail接收邮件(转)

    博客分类:
  • java
阅读更多
package com.chinahrt.zyn;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

public class ReciveMailUtil {
	private MimeMessage msg = null;
	private String saveAttchPath="";
	private StringBuffer bodytext = new StringBuffer();
	private String dateformate = "yy-MM-dd HH:mm:ss";
	
	public ReciveMailUtil (MimeMessage msg){
		this.msg = msg;
	}
	
	public void setMsg(MimeMessage msg){
		this.msg = msg;
	}
	//获取邮件发送者信息
	public String getFrom() throws MessagingException{
		InternetAddress[] address = (InternetAddress[]) msg.getFrom();
		String from = address[0].getAddress();
		if(from == null){
			from = "";
		}
		String personal = address[0].getPersonal();
		if(personal == null){
			personal = "";
		}
		String fromaddr = personal +"<"+from+">";
		return fromaddr;
	}
	
	//获取邮件收件人,抄送,密送的地址和信息,"to"-->收件人,"cc"-->抄送人,"bcc"-->密送地址
	public String getMailAddress(String type) throws MessagingException,UnsupportedEncodingException{
		String mailaddr = "";
		String addrType = type.toUpperCase();
		InternetAddress[] address = null;
		if(addrType.equals("TO")||addrType.equals("CC")||addrType.equals("BCC")){
			if(addrType.equals("TO")){
				address = (InternetAddress[])msg.getRecipients(Message.RecipientType.TO);
			}
			if(addrType.equals("CC")){
				address = (InternetAddress[])msg.getRecipients(Message.RecipientType.CC);
			}
			if(addrType.equals("BCC")){
				address = (InternetAddress[])msg.getRecipients(Message.RecipientType.BCC);
			}
			if(address!=null){
				for(int i=0;i<address.length;i++){
					String mail = address[i].getAddress();
					if(mail == null){
						mail = "";
					}else{
						mail = MimeUtility.decodeText(mail);
					}
					String personal = address[i].getPersonal();
					if(personal == null){
						personal = "";
					}else{
						personal = MimeUtility.decodeText(personal);
					}
					String compositeto = personal +"<"+mail+">";
					mailaddr += "," + compositeto;
				}
				mailaddr = mailaddr.substring(1);
			}
		}else{
			throw new RuntimeException("Error email Type!");
		}
		return mailaddr;
	}
	
	//获取邮件主题
	public String getSubject() throws UnsupportedEncodingException,MessagingException{
		String subject = "";
		subject = MimeUtility.decodeText(msg.getSubject());
		if(subject == null){
			subject = "";
		}
		return subject;
	}
	//获取邮件发送日期
	public String getSendDate() throws MessagingException{
		Date sendDate = msg.getSentDate();
		SimpleDateFormat sdf = new SimpleDateFormat(dateformate);
		return sdf.format(sendDate);
	}
	//获取邮件正文
	public String getBodyText(){
		return bodytext.toString();
	}
	//解析邮件
	public void getMailContent(Part part) throws MessagingException,IOException{
		String contentType = part.getContentType();
		int nameindex = contentType.indexOf("name");
		boolean conname = false;
		if(nameindex !=-1){
			conname = true;
		}
		System.out.println("CONTENTTYPE:"+contentType);
		if(part.isMimeType("text/plain")&&!conname){
			bodytext.append((String)part.getContent());
		}else if(part.isMimeType("text/html")&&!conname){
			bodytext.append((String)part.getContent());
		}else if(part.isMimeType("multipart/*")){
			Multipart multipart = (Multipart)part.getContent();
			int count = multipart.getCount();
			for(int i=0;i<count;i++){
				getMailContent(multipart.getBodyPart(i));
			}
		}else if(part.isMimeType("message/rfc822")){
			getMailContent((Part)part.getContent());
		}
	}
	
	//判断邮件是否需要回执,如需返回true,否则返回false
	public boolean getReplySign()throws MessagingException{
		boolean replySign = false;
		String needreplay[] =  msg.getHeader("Disposition-Notification-TO");
		if(needreplay != null){
			replySign = true;
		}
		return replySign;
	}
	//获取该邮件的message-id
	public String getMessageId()throws MessagingException{
		return msg.getMessageID();
	}
	//判断该邮件是否已读,如未读返回false,已读返回true
	public boolean isNew() throws MessagingException{
		boolean isnew = false;
		Flags flags = ((Message)msg).getFlags();
		Flags.Flag[] flag = flags.getSystemFlags();
		System.out.println("flags's legth:"+flag.length);
		for(int i=0;i<flag.length;i++){
			if(flag[i] == Flags.Flag.SEEN){
				isnew = true;
				System.out.println("seen message ......");
				break;
			}
		}
		return isnew;
	}
	//判断邮件是否包含附件
	public boolean isContainAttch(Part part) throws MessagingException,IOException{
		boolean flag = false;
		String contentType = part.getContentType();
		if(part.isMimeType("multipart/*")){
			Multipart multipart = (Multipart)part.getContent();
			int count = multipart.getCount();
			for(int i=0;i<count;i++){
				BodyPart bodypart = multipart.getBodyPart(i);
				String dispostion = bodypart.getDisposition();
				if((dispostion != null) && (dispostion.equals(Part.ATTACHMENT)||dispostion.equals(Part.INLINE))){
					flag = true;
				}else if(bodypart.isMimeType("multipart/*")){
					flag = isContainAttch(bodypart);
				}else{
					String conType = bodypart.getContentType();
					if(conType.toLowerCase().indexOf("appliaction")!=-1){
						flag = true;
					}
					if(conType.toLowerCase().indexOf("name")!=-1){
						flag = true;
					}
				}
			}
		}else if(part.isMimeType("message/rfc822")){
			flag = isContainAttch((Part)part.getContent());
		}
		return flag;
	}
	//保存附件
	public void saveAttchMent(Part part) throws MessagingException,IOException{
		String filename = "";
		if(part.isMimeType("multipart/*")){
			Multipart mp = (Multipart)part.getContent();
			for(int i=0;i<mp.getCount();i++){
				BodyPart mpart = mp.getBodyPart(i);
				String dispostion = mpart.getDisposition();
				if((dispostion!=null) && (dispostion.equals(Part.ATTACHMENT)|| dispostion.equals(Part.INLINE))){
					filename = mpart.getFileName();
					if(filename.toLowerCase().indexOf("gb2312")!=-1){
						filename = MimeUtility.decodeText(filename);
					}
					saveFile(filename,mpart.getInputStream());
				}else if(mpart.isMimeType("multipart/*")){
					saveAttchMent(mpart);
				}else{
					filename = mpart.getFileName();
					if(filename != null && (filename.toLowerCase().indexOf("gb2312")!=-1)){
						filename = MimeUtility.decodeText(filename);
					}
					saveFile(filename,mpart.getInputStream());
				}
			}
		}else if(part.isMimeType("message/rfc822")){
			saveAttchMent((Part)part.getContent());
		}
	}
	//获取保存附件的地址
	public String getSaveAttchPath(){
		return saveAttchPath;
	}
	
	//设置保存附件地址
	public void setSaveAttchPath(String savaAttchPath){
		this.saveAttchPath = saveAttchPath;
	}
	
	//设置日期格式
	public void setDateformate(String dateformate){
		this.dateformate = dateformate;
	}
	
	private void saveFile(String filename,InputStream inputStream) throws IOException{
		String osname = System.getProperty("os.name");
		String storedir = getSaveAttchPath();
		String sepatror = "";
		if(osname == null){
			osname = "";
		}
		if(osname.toLowerCase().indexOf("win")!=-1){
			sepatror = "//";
			if(storedir == null ||"".equals(storedir)){
				storedir = "d://temp";
			}
		}else{
			sepatror = "/";
			storedir = "/temp";
		}
		File storefile = new File(storedir+sepatror+filename);
		System.out.println("storefile's path:"+storefile.toString());
		BufferedOutputStream bos = null;
		BufferedInputStream bis = null;
		try{
			bos = new BufferedOutputStream(new FileOutputStream(storefile));
			bis = new BufferedInputStream(inputStream);
			int c;
			while((c=bis.read())!=-1){
				bos.write(c);
				bos.flush();
			}
		}catch(FileNotFoundException e){
			e.printStackTrace();
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			bos.close();
			bis.close();
		}
		
	}
	public void recive(Part part,int i) throws MessagingException,IOException{
		System.out.println("@@@start@@@");
		System.out.println("Message"+i+" subject:"+getSubject());
		System.out.println("Message"+i+" from"+getFrom());
		System.out.println("Message"+i+" isNew:"+isNew());
		boolean flag = isContainAttch(part);
		System.out.println("Message"+i+" iscontainAttch:"+flag);
		System.out.println("Message"+i+" replySign:"+getReplySign());
		getMailContent(part);
		System.out.println("Message"+i+" content:"+getBodyText());
		setSaveAttchPath("c://temp//"+i);
		if(flag){
			saveAttchMent(part);
		}
		System.out.println("@@@end@@@");
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) throws MessagingException,IOException{
		Properties props = new Properties();
		props.setProperty("mail.smtp.host", "smtp.163.com");
		props.setProperty("mail.smtp.auth", "true");
		Session session = Session.getDefaultInstance(props, null);
		URLName urlname = new URLName("pop3","pop3.163.com",110,null,"账号","密码");
		Store store  = session.getStore(urlname);
		store.connect();
		Folder folder = store.getFolder("INBOX");
		folder.open(Folder.READ_ONLY);
		Message msgs[] = folder.getMessages();
		int count = msgs.length;
		System.out.println(count);
		ReciveMailUtil rm = null;
		for(int i=0;i<count;i++){
			rm = new ReciveMailUtil((MimeMessage)msgs[i]);
			rm.recive(msgs[i], i);
		}
	}

}

 

分享到:
评论
1 楼 xuehanxin 2016-06-01  
qq邮箱您弄了么,腾讯真是和别人不一样啊,按照你的方式整了半天没结果,求帮助

相关推荐

    jmail接收邮件代码

    在VC++编程环境中,利用JMail库来接收邮件是一个常见的任务。JMail是一个功能丰富的电子邮件组件,它提供了在各种编程语言中发送和接收邮件的能力,包括VC++。本篇文章将详细探讨如何在VC++中使用JMail来实现邮件的...

    jmail接收邮件,通过网页浏览邮箱的邮件

    标题中的“jmail接收邮件,通过网页浏览邮箱的邮件”涉及到的是使用JMail组件在Web应用程序中实现邮件的接收和查看功能。JMail是一款由AspDotNetStorefront开发的.NET组件,它允许开发者在ASP.NET环境中发送和接收...

    非常好的Jmail接收邮件和发送邮件源码

    本资源提供的"非常好的Jmail接收邮件和发送邮件源码"是一个宝贵的参考资料,可以帮助程序员理解如何利用Jmail进行邮件处理。 Jmail的核心功能包括: 1. **发送邮件**:Jmail提供了方便的API,使得通过SMTP(Simple...

    JMail接收邮件小实例(c#)

    这个文件可能是另一个接收邮件的示例代码或者另一种邮件接收策略,比如使用IMAP4协议,或者包含更复杂的邮件过滤和处理逻辑。 总之,通过使用JMail库,开发者可以在C#项目中轻松地实现邮件接收和附件处理。结合`...

    jmail邮件接收

    首先,要使用JMail接收邮件,你需要创建一个JMail实例,并配置相应的服务器设置。这包括POP3服务器地址、端口号(通常是110,SSL加密时为995)、用户名和密码。这些信息通常可以从你的邮件服务提供商那里获取。 ```...

    vb6(JMail)接收邮件源代码

    通过JAMIL收取邮件代码,需要支持POP3的服务器,收取的邮件有列表显示,点击列表可显示邮件内容

    asp.net 实现jmail 接收和发送邮件程序.zip

    接收邮件则主要涉及到POP3或IMAP4协议的使用: 1. 创建邮件接收器:使用`new JPop3()`或`new JImap4()`,根据选择的协议初始化邮件接收器。 2. 连接到邮件服务器:设置服务器地址、端口、用户名和密码,如`pop3....

    asp.net利用Jmail发送邮件和接收全部代码

    1. **Jmail库介绍**:Jmail是专门为.NET Framework设计的一个邮件处理组件,它允许开发者在ASP.NET应用程序中方便地发送和接收邮件。它支持SMTP(Simple Mail Transfer Protocol)协议发送邮件,以及POP3(Post ...

    基于Jmail的邮件收发系统

    在使用Jmail接收邮件时,程序会连接到POP服务器,验证身份后下载指定邮箱的邮件。 在构建邮件收发系统时,开发者需要考虑以下几个关键点: 1. **配置邮件服务器参数**:包括SMTP服务器地址、端口号、用户名、密码...

    使用Jmail组件发送和接收邮件(含附件)

    在提供的压缩包文件中,"SendEmail"可能是发送邮件的示例代码,而"GetEmail"则可能是接收邮件的示例代码。你可以参考这两个文件来实现具体的功能。需要注意的是,实际应用中,为了提高代码的可维护性和安全性,建议...

    利用jmail组件实现邮件的发送和接收

    这工程的主要功能是用两个窗口实现邮件的发送和接受,主要用到了MailMessage,...接收邮件时需要使用jmail组件连接pop服务器,然后获取邮件接收者所接受的邮件,并将接受到的邮件信息显示到DataGridView控件中

    jmail邮件接收发送程序

    它可能包含了如何初始化邮件会话、设置邮件属性、构建邮件对象、连接SMTP服务器发送邮件以及使用POP3服务器接收邮件的步骤。通过运行和分析这个示例,开发者可以快速理解JMail的使用方法。 5. **使用JMail的步骤**...

    VC 利用Jmail收发邮件

    在"利用Jmail接收邮件"中,主要涉及到`jmail.POP3Class`对象的使用: 1. **连接POP3服务器**: - `popMail.Connect()`方法用于连接到POP3服务器,参数分别为用户名、密码、服务器地址和端口号。 2. **获取邮件...

    利用Jmail发送邮件:

    ### 使用Jmail发送与接收邮件的关键技术点 #### 发送邮件 在提供的代码片段中,主要涉及了如何使用Jmail库来实现邮件的发送功能。Jmail是一个强大的.NET类库,用于开发支持SMTP、POP3协议的应用程序。下面将详细...

    vb(JMail)接收邮件(可下载附件)

    1. **初始化JMail对象**:在VB代码中,你需要先创建一个JMail对象实例,然后设置必要的属性,如SMTP服务器(用于发送邮件)和POP3服务器(用于接收邮件)的地址,以及用户名和密码等认证信息。 2. **连接到POP3...

    jmail收发邮件控件

    4. **收邮件.txt**:可能是一份关于如何使用Jmail接收邮件的文本说明。 5. **jmail说明.txt**:可能涵盖Jmail控件的基本概念和使用注意事项。 6. **mailaddress.txt**:可能涉及到邮件地址的处理和验证,对于批量...

    JMail插件用于邮件接收和发送

    3. **身份验证与安全**:JMail支持SSL(安全套接层)和TLS(传输层安全)加密,确保在不安全的网络环境下发送和接收邮件时数据的安全性。此外,它还支持SMTP的身份验证,如PLAIN、LOGIN和CRAM-MD5等认证方式。 4. *...

    C#接收邮件实例(含jmail.dll)

    1. **初始化Jmail对象**:首先,在代码中创建一个JMail对象,并设置必要的配置,如SMTP服务器(用于发送邮件)和POP3服务器(用于接收邮件)的信息,还包括用户名和密码等认证信息。 ```csharp JMail jmail = new ...

    jmail发送邮件

    JMail是一款广泛使用的.NET组件,它允许开发者通过SMTP(Simple Mail Transfer Protocol)服务来发送邮件,同时也支持POP3(Post Office Protocol version 3)用于接收邮件。下面将详细阐述JMail的使用、SMTP服务器...

    asp.net中使用Jmail发送邮件

    首先,Jmail是一个由DimiSoft公司开发的组件,它支持SMTP、POP3、IMAP等协议,使得在.NET应用程序中发送和接收邮件变得简单。Jmail提供了丰富的功能,包括HTML邮件、附件、多语言支持、邮件模板等,非常适合企业级...

Global site tag (gtag.js) - Google Analytics