jmail接收邮件(转)

1 篇文章 0 订阅
1 篇文章 0 订阅
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);
		}
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pb调用jmail接收邮件是一种通过编程方式实现的方法,可以实现自动接收邮件的功能。jmail是一个邮件组件,提供了一系列接口和方法,可以和pb语言无缝集成。 首先,我们需要在pb程序中引入jmail组件,然后创建一个jmail对象。接着,我们可以设置jmail的相关属性,比如邮件服务器地址、端口号、登录账号和密码等。通过调用jmail的方法,我们可以实现接收邮件的功能。 首先,我们需要创建一个邮件接收对象,使用CreateObj创建或者使用已经存在的对象。然后,设置接收邮件服务器的相关属性,比如设置pop3服务器地址、端口号等。接着,我们可以调用接收邮件的方法,比如使用ReceiveAll方法可以接收所有的邮件,Receive方法可以接收指定的邮件。 在接收邮件后,我们可以通过遍历接收到的邮件来获取每封邮件的相关信息,比如邮件的发送人、收件人、主题、正文内容等。通过处理这些信息,我们可以根据自己的需求来进行后续操作,比如将邮件内容保存到本地、自动回复邮件等。 总之,pb调用jmail接收邮件是一种方便、快捷的方法,可以节省人力和时间成本,实现自动接收邮件的功能。但是在使用过程中,需要注意配置相关属性和处理异常情况,以确保邮件的安全性和稳定性。同时,还需要根据实际需求灵活运用jmail的其他接口和方法,满足个性化的邮件处理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值