在SSL下使用java mail接收郵件,以簡化外網審批工作

       在業務流程系統中爲提升企業用戶的工單處理效率常會使用郵件提醒,在郵件中審批怎較爲常用。常規性審批操作往往是簡單的同意和拒絕的操作,而無需在系統中做其他相關操作。通過域單點雖然能夠提升用戶進行系統的效率,但頁面的跳轉以及工單的查找仍舊會帶來一些操作的不便,故而在郵件中直接審批則很方便。

   局域網中域單點環境下通過發送帶有不同標示連接的郵件給處理人,處理人即可通過點擊郵件連接來完成對工單的審批操作。但局域網之外的審批則產生了問題,當然可以採用類似VPN等方式解決,本文采用的郵件回覆自動審批的方式。此方式延續前文局域網的處理方式,不過由連接連接單點進入系統改爲了用戶回覆郵件,系統解析郵件內容分析用戶的審批意向來達到審批工單的目的。

   郵件服務器exchange採用ssl imap形式,使用javamail收取郵件時,需要先導入證書,將其存儲在磁盤目錄,當然也可以導入到java se security目錄下。之後進行認證收取郵件。導入證書可以使用工具類InstallCert.java(下載地址見附錄1)進行。導入證書方式爲編譯後執行命令:java InstallCert mail.cnooc.com.cn: 993  (注:993爲imap ssl下的默認端口,非ssl爲143)。下文爲javamail收取郵件,解析郵件內容的示例代碼。

       Properties props = System.getProperties();   
    	
    	props.setProperty("javax.net.ssl.trustStore", "E:\\certs\\jssecacerts");
    	Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
    	final  String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory" ;
    	//  IMAP provider 
    	props.setProperty("mail.imap.socketFactory.class" , SSL_FACTORY);
    	props.setProperty("mail.imap.socketFactory.fallback","false");
    	
    	props.setProperty("mail.imap.port","993" );
    	props.setProperty("mail.imap.socketFactory.port","993");
    	Session session = Session.getDefaultInstance(props, null);   
    	URLName urln = new URLName("imap", "mail.cnooc.com.cn", 993, null,   
    			"email address", "email password");   
    	Store store = session.getStore(urln);
    	store.connect();   
    	Folder folder = store.getFolder("INBOX");   
    	folder.open(Folder.READ_WRITE);   
    	int messageCount = folder.getMessageCount();
    	Message message2 = folder.getMessage(messageCount);
    	ReciveOneMail pmm = null;   
    	pmm = new ReciveOneMail((MimeMessage) message2);   
		
		System.out.println(" subject: " + pmm.getSubject());   
		System.out.println(" sentdate: "+ pmm.getSentDate());   
		System.out.println(" replysign: "+ pmm.getReplySign());   
		System.out.println(" hasRead: " + pmm.isNew());   
		System.out.println("  containAttachment: "+ pmm.isContainAttach((Part)message2));   
		System.out.println(" form: " + pmm.getFrom());   
		System.out.println(" to: "+ pmm.getMailAddress("to"));   
		System.out.println(" cc: "+ pmm.getMailAddress("cc"));   
		System.out.println(" bcc: "+ pmm.getMailAddress("bcc"));   
   
		System.out.println(" Message-ID: "+ pmm.getMessageId());   
		   
		pmm.getMailContent((Part) message2);   
		System.out.println(" bodycontent: \r\n"   + pmm.getBodyText());   
		pmm.setAttachPath("c:\\");    
		pmm.saveAttachMent((Part) message2);  
    	
	    try{
          if(folder!=null){
        	  //退出收件箱時,刪除做了刪除標識的郵件
        	  folder.close(true); 
          }
          if (store != null){
        	  store.close();
          }
        }catch(Exception bs){
          bs.printStackTrace();
        }             

由於javamail的標準化我們可以任意收取指定索引位置的郵件,而後在解析郵件內容,根據用戶回饋的郵件信息來完成外網到局域網的審批。進而簡化外網審批工作的複雜度。

 

附錄

1. InstallCert.java下載地址

http://www.oschina.net/code/snippet_12_4092


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章