国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

關于使用javamail pop接收郵件

2019-11-06 07:38:34
字體:
來源:轉載
供稿:網友

本人第一次寫博客   大家將就一下啊      

關于使用javamail   pop接收郵件     在網上找了很多例子     都可以用  但是在解析附件的時候會拋異常    

javax.mail.MessagingException: Missing start boundary      at javax.mail.internet.MimeMultipart.parse(MimeMultipart.java:297)      at javax.mail.internet.MimeMultipart.getCount(MimeMultipart.java:159)  ...于是只能自己編譯了   花了半個小時  終于可以運行了   接下來看代碼
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;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.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeUtility;public class PraseMimeMessage{	private MimeMessage mimeMessage=null;	private String saveAttachPath="";//附件下載后的存放目錄	private StringBuffer bodytext= new StringBuffer();			//存放郵件內容的StringBuffer對象	private String dateformat="yy-MM-dd HH:mm";//默認的日前顯示格式	/**	 * 初始化一個MimeMessage對象	 */	public PraseMimeMessage(){}	public PraseMimeMessage(MimeMessage mimeMessage){		this.mimeMessage = mimeMessage;		System.out.println("初始化一個PraseMimeMessage對象--------");	}	public void setMimeMessage(MimeMessage mimeMessage){		this.mimeMessage=mimeMessage;	}	/*	 * 獲得發件人的地址和姓名	 */	public String  getFrom()throws Exception{		InternetAddress address[] = (InternetAddress[])mimeMessage.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 Exception{		String mailaddr = "";		String addtype = type.toUpperCase();		InternetAddress []address = null;		if(addtype.equals("TO") || addtype.equals("CC") ||addtype.equals("BCC")){			if(addtype.equals("TO")){				address = (InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.TO);			}else if(addtype.equals("CC")){				address = (InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.CC);			}else{				address = (InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.BCC);			}			if(address != null){				for(int i=0;i<address.length;i++){					String email=address[i].getAddress();					if(email==null) email="";					else{						email=MimeUtility.decodeText(email);					}					String personal=address[i].getPersonal();					if(personal==null) personal="";					else{						personal=MimeUtility.decodeText(personal);					}					String compositeto=personal+"<"+email+">";					mailaddr+=","+compositeto;				}				mailaddr=mailaddr.substring(1);			}		}else{			throw new Exception("Error emailaddr type!");		}		return mailaddr;	}	/**	 * 獲得郵件主題	 */	public String getSubject() throws MessagingException{		String subject = "";		try{			subject = MimeUtility.decodeText(mimeMessage.getSubject());			if(subject == null) subject="";		}catch(Exception exce){		}		return subject;	}	/**	 * 獲得郵件發送日期	 */	public String getSentDate() throws Exception{		Date sentdate = mimeMessage.getSentDate();		SimpleDateFormat format = new SimpleDateFormat(dateformat);		return format.format(sentdate);	}	/**	 * 獲得郵件正文內容	 */	public String getBodyText(){		return bodytext.toString();	}	/**	 * 解析郵件,把得到的郵件內容保存到一個StringBuffer對象中,解析郵件	 * 主要是根據MimeType類型的不同執行不同的操作,一步一步的解析	 */	public void getMailContent(Part part)throws Exception{		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());		}	}	/**	 * 判斷此郵件是否需要回執,如果需要回執返回"true",否則返回"false"	 */	public boolean getReplySign()throws MessagingException{		boolean replysign = false;		String needreply[] = mimeMessage.getHeader("Disposition-Notification-To");		if(needreply != null){			replysign = true;		}		return replysign;	}	/**	 * ---獲得此郵件的Message-ID	 */	public String getMessageId()throws MessagingException{		return mimeMessage.getMessageID();	}	/**	 * ---判斷此郵件是否已讀,如果未讀返回返回false,反之返回true---	 */	public boolean isNew()throws MessagingException{		boolean isnew = false;		Flags flags = ((Message)mimeMessage).getFlags();		Flags.Flag []flag = flags.getSystemFlags();		System.out.println("flags's length: "+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 isContainAttach(Part part)throws Exception{		boolean attachflag = false;		if(part.isMimeType("multipart/*")){			Multipart mp = (Multipart)part.getContent();			for(int i=0;i<mp.getCount();i++){				BodyPart mpart = mp.getBodyPart(i);				String disposition = mpart.getDisposition();				if((disposition != null) &&((disposition.equals(Part.ATTACHMENT)) ||(disposition.equals(Part.INLINE))))					attachflag = true;				else if(mpart.isMimeType("multipart/*")){									}else{					String contype = mpart.getContentType();					if(contype.toLowerCase().indexOf("application") != -1) attachflag=true;					if(contype.toLowerCase().indexOf("name") != -1) attachflag=true;				}			}		}else if(part.isMimeType("message/rfc822")){			attachflag = isContainAttach((Part)part.getContent());		}		return attachflag;	}	/**	 * ----保存附件----	 */	public void saveAttachMent(Part part)throws Exception{		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 disposition = mpart.getDisposition();				if((disposition != null) &&((disposition.equals(Part.ATTACHMENT)) ||(disposition.equals(Part.INLINE)))){					fileName = mpart.getFileName();					if(fileName.toLowerCase().indexOf("gb2312") != -1){						fileName = MimeUtility.decodeText(fileName);					}					saveFile(fileName,mpart.getInputStream());				}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")){			saveAttachMent((Part)part.getContent());		}	}	/**	 * ---設置附件存放路徑---	 */	public void setAttachPath(String attachpath){		this.saveAttachPath = attachpath;	}	/**	 * ----設置日期顯示格式----	 */	public void setDateFormat(String format)throws Exception{		this.dateformat = format;	}	/**	 * 【獲得附件存放路徑】	 */	public String getAttachPath(){		return saveAttachPath;	}	/**	 * 保存附件到指定目錄里	 */	private void saveFile(String fileName,InputStream in)throws Exception{		String osName = System.getProperty("os.name");		String storedir = getAttachPath();		String separator = "";		System.out.println(osName);		if(osName == null) osName="";		if(osName.toLowerCase().indexOf("win") != -1){//判斷是不是pc端			separator="//";			if(storedir == null || storedir.equals("")) 				storedir="D:////";					}else{			separator = "/";			storedir = "/pop";		}		File storefile = new File(storedir+separator+fileName);		System.out.println("文件路徑: "+storefile.toString());		for(int i=0;storefile.exists();i++){		storefile = new File(storedir+separator+fileName+i);		}		if(!storefile.exists())    		{    		    try {    		    	storefile.createNewFile();    		    } catch (IOException e) {    		        // TODO Auto-generated catch block    		        e.printStackTrace();    		    }    		}    		BufferedOutputStream bos = null;		BufferedInputStream  bis = null;		try{			bos = new BufferedOutputStream(new FileOutputStream(storefile));			bis = new BufferedInputStream(in);			int c;			while((c=bis.read()) != -1){				bos.write(c);				bos.flush();			}		}catch(Exception exception){			exception.printStackTrace();			throw new Exception("文件保存失敗!");		}finally{			bos.close();			bis.close();		}	}	/**	 * PraseMimeMessage類測試	 */	public static void main(String args[])throws Exception{		String host = "pop.163.com";     //QQ的話  用pop.qq.com  其他自推		String username ="*****@163.com";     //例如:******@163.com		String passWord ="*******";       //如果是qq或163郵箱   得用授權碼當作密碼來驗證		Properties props = new Properties();		props.setProperty("mail.transport.protocol", "pop3"); // 使用的協議(JavaMail規范要求)		props.setProperty("mail.smtp.host", host); // 發件人的郵箱的 SMTP服務器地址				Session session = Session.getDefaultInstance(props, null);		Store store = session.getStore("pop3");		store.connect(host, username, password);		Folder folder = store.getFolder("INBOX");		folder.open(Folder.READ_ONLY);		Message message[] = folder.getMessages();		System.out.println("Messages's length: "+message.length);		PraseMimeMessage pmm = null;		for(int i=0;i<message.length;i++){			pmm = new PraseMimeMessage((MimeMessage)message[i]);			System.out.println("Message "+i+" 主題: "+pmm.getSubject());			System.out.println("Message "+i+" 時間: "+pmm.getSentDate());			System.out.println("Message "+i+" 是否需要回執: "+pmm.getReplySign());			System.out.println("Message "+i+" 是否已讀: "+pmm.isNew());			System.out.println("Message "+i+"  是否包含附件: "+pmm.isContainAttach((Part)message[i]));			System.out.println("Message "+i+" 發件人的地址和姓名: "+pmm.getFrom());			System.out.println("Message "+i+" 郵件的收件人: "+pmm.getMailAddress("to"));			System.out.println("Message "+i+" cc: "+pmm.getMailAddress("cc"));			System.out.println("Message "+i+" bcc: "+pmm.getMailAddress("bcc"));			pmm.setDateFormat("yy年MM月dd日 HH:mm");			System.out.println("Message "+i+" 時: "+pmm.getSentDate());			System.out.println("Message "+i+" 郵件的Message-ID: "+pmm.getMessageId());			pmm.getMailContent((Part)message[i]);			System.out.println("Message "+i+" 郵件正文內容: /r/n"+pmm.getBodyText());			File file=new File("");			if(!file.exists()){				file.mkdirs();			}			pmm.setAttachPath(file.toString());			pmm.saveAttachMent((Part)message[i]);		}	}}就這樣就可以跑起來了


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贡觉县| 尼勒克县| 岳阳县| 申扎县| 乌恰县| 大埔区| 云阳县| 泗阳县| 谢通门县| 永宁县| 克什克腾旗| 双流县| 台中县| 英吉沙县| 横峰县| 日土县| 武义县| 华坪县| 虞城县| 西充县| 正蓝旗| 沭阳县| 新乡县| 永靖县| 陆良县| 高要市| 宜阳县| 金寨县| 濮阳县| 绥芬河市| 宁海县| 清水河县| 鹿泉市| 龙泉市| 莫力| 济源市| 久治县| 同心县| 易门县| 长沙县| 威海市|