java: imap Receive Email

java: imap Receive Email,第1张

java: imap Receive Email
 





import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import com.sun.mail.pop3.*;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.*;

import javax.mail.Flags.Flag;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import  com.sun.mail.imap.*;
//.IMAPFolder
import com.sun.mail.imap.IMAPMessage;

import com.sun.mail.imap.IMAPFolder;
import com.sun.mail.imap.protocol.IMAPProtocol;
import org.apache.tomcat.util.http.fileupload.IOUtils;
//import org.apache.tomcat.util.*;
import org.springframework.util.ObjectUtils;



  
	    public static  void DuReceiveEmailImap(String pop3Host,String port,String storeType, String user, String password)throws MessagingException, IOException 
	    {
	    	
	    	  // 准备连接服务器的会话信息
			Properties props = new Properties();
			props.put("mail.store.protocol", storeType); //imap
			props.put("mail.pop3.starttls.enable", "false");
			props.put("mail.imap.host",pop3Host );//"imap.163.com"
			props.put("mail.imap.port", port); //"143"  imap.163.com
		
			// 创建Session实例对象
			//Session session = Session.getInstance(props);
			Session session =Session.getDefaultInstance(props,null);//
			// 创建IMAP协议的Store对象
			Store store = session.getStore("imap");
			
			// 连接邮件服务器
			store.connect(pop3Host,user, password); //"[email protected]"
			
			
			Folder folder = store.getFolder("Inbox");
           // folder.open(Folder.READ_ONLY);
            //Message messages[] = folder.getMessages();
           // FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
           // Message messages[] = folder.search(ft);
            
			if (folder instanceof IMAPFolder) {
				            IMAPFolder imapFolder = (IMAPFolder)folder;
				            //javamail中使用id命令有校验checkOpened, 所以要去掉id方法中的checkOpened();
				            imapFolder.doCommand(new IMAPFolder.ProtocolCommand()
                            {
				                public Object doCommand(IMAPProtocol p) throws com.sun.mail.iap.ProtocolException {
				                     p.id("FUTONG");
				                     return null;
				                 }
				             });
			}
			// 获得收件箱
			//Folder folder = store.getFolder("whatever");//INBOX
			 //Folder folder = store.getFolder("whatever");
		    // IMAPFolder ifolder = (IMAPFolder)folder;
		   //  List events = ifolder.open(Folder.READ_WRITE,
	                   // new ResyncData(prevUidValidity, prevModSeq));
			// 以读写模式打开收件箱
			//folder.open(Folder.READ_ONLY);
		     //ifolder.open(ifolder.READ_WRITE);
		     
			
			
			
		     
		     if(folder != null) {
		    	 folder.open(Folder.READ_WRITE);
		     }
			// 获得收件箱的邮件列表
			//Message[] messages = folder.getMessages();
			Message[] messages =getWEMessage(pop3Host,user,password,storeType);// folder.getMessages();
			// 打印不同状态的邮件数量
			
			String str = new String(("收件箱中共" + Integer.toString(messages.length) + "封邮件!").getBytes(),"utf-8");
			System.out.println("收件箱中共" + Integer.toString(messages.length) + "封邮件!");
			String str1="收件箱中共" +  Integer.toString(folder.getUnreadMessageCount()) + "封未读邮件!";
			System.out.println(str1);
			System.out.println("收件箱中共" +  Integer.toString(folder.getNewMessageCount()) + "封新邮件!");
			System.out.println("收件箱中共" +  Integer.toString(folder.getDeletedMessageCount()) + "封已删除邮件!");
			
			System.out.println("------------------------开始解析邮件----------------------------------");
			DuMailHelper helper=new DuMailHelper();
			
			
			// 解析邮件
			for (Message message : messages) {
				IMAPMessage msg = (IMAPMessage) message;
				String subject = MimeUtility.decodeText(msg.getSubject());
				System.out.println("[" + subject + "]未读,是否需要阅读此邮件(yes/no)?");
				BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
				String answer = reader.readLine();
				if ("yes".equalsIgnoreCase(answer)) {
					parseImapMessage(msg);	// 解析邮件
					// 第二个参数如果设置为true,则将修改反馈给服务器。false则不反馈给服务器
					msg.setFlag(Flag.SEEN, true);	//设置已读标志
				}
			}
			
			// 关闭资源
			folder.close(false);
			store.close();
	    	
	    	
	    }
	    
	    public static Message[] getWEMessage(String host, String username, String password, String protocol) throws MessagingException {
	        Properties props = System.getProperties();
	        props.setProperty("mail.store.protocol", protocol);
	        Session session = Session.getDefaultInstance(props, null);
	        Store store = session.getStore(protocol);
	        store.connect(host, username, password);
	        Folder folder = store.getFolder("INBOX");

	        if (folder instanceof IMAPFolder) {
	            IMAPFolder imapFolder = (IMAPFolder)folder;
	            //javamail中使用id命令有校验checkOpened, 所以要去掉id方法中的checkOpened();
	            imapFolder.doCommand(new IMAPFolder.ProtocolCommand() {
	                public Object doCommand(IMAPProtocol p) throws com.sun.mail.iap.ProtocolException {
	                    p.id("FUTONG");
	                    return null;
	                }
	            });
	        }

	        if(folder != null) {
	            folder.open(Folder.READ_WRITE);
	        }

	        return folder.getMessages();
	    }    
	    
	    public static  void  parseImapMessage(IMAPMessage... messages) throws MessagingException, IOException {
	        //判断邮件是否为空
	        if (messages == null || messages.length < 1) {
	            throw new MessagingException("未找到要解析的邮件!");
	        }

	        // 解析所有邮件
	        for (int i = 0, count = messages.length; i < count; i++) {
	            MimeMessage msg = (MimeMessage) messages[i];
	            System.out.println("-----------解析第" + msg.getMessageNumber() + "封邮件---------------");
	            System.out.println("主题: " + DuMailHelper.getSubject(msg));
	            System.out.println("发件人: " + DuMailHelper.getFrom(msg));
	            System.out.println("收件人:" + DuMailHelper.getReceiveAddress(msg, Message.RecipientType.TO));
	            System.out.println("发送时间:" + DuMailHelper.getSentDate(msg, null));
	            System.out.println("是否已读:" + DuMailHelper.isSeen(msg));
	            System.out.println("邮件优先级:" + DuMailHelper.getPriority(msg));
	            System.out.println("是否需要回执:" + DuMailHelper.isReplySign(msg));
	            System.out.println("邮件大小:" + msg.getSize() * 1024 + "kb");
	            boolean isContainerAttachment = DuMailHelper.isContainAttachment(msg);
	            System.out.println("是否包含附件:" + isContainerAttachment);
	            if (isContainerAttachment) {
	                //获取文件的存储目录
	                String path = JavaxJavaMailClient.class.getClassLoader().getResource("").getPath();
	                //获取文件的前缀
	                String strFile = UUID.randomUUID().toString().replace("-", "").substring(0, 8);
	                DuMailHelper.saveAttachment(msg, path + strFile + "_"); //保存附件
	            }
	            //用来存储正文的对象
	            StringBuffer content = new StringBuffer();
	            //处理邮件正文
	            DuMailHelper.getMailTextContent(msg, content);
	            System.out.println("邮件正文:" + content);
	            System.out.println("-----------第" + msg.getMessageNumber() + "封邮件解析结束------------");
	            System.out.println();
	        }
	    }  
	    
	    
	    public static void DuReceiveEmail(String pop3Host,String storeType, String user, String password){
	    	Properties props = new Properties();
	    	props.put("mail.pop3.host", pop3Host);
	    	props.put("mail.pop3.port", "110");
	    	props.put("mail.pop3.starttls.enable", "false");
	    	props.put("mail.store.protocol", "pop3");
	     
	    Session session = Session.getInstance(props);	
	    try {  
	    	Store mailStore = session.getStore(storeType);
	    	mailStore.connect(pop3Host, user, password);
	     
	    	Folder folder = mailStore.getFolder("INBOX");
	    	folder.open(Folder.READ_ONLY);
	     
	    	Message[] emailMessages = folder.getMessages();
	    	System.out.println("Total Message - " 
	    			+ emailMessages.length);
	     
	       //Iterate the messages
	      for (int i = 0; i < emailMessages.length; i++) {
	       Message message = emailMessages[i];
	       Address[] toAddress = 
	       message.getRecipients(Message.RecipientType.TO);
	       System.out.println();  
	       System.out.println("Email " + (i+1) + "-");  
	       System.out.println("Subject - " + message.getSubject());  
	       System.out.println("From - " + message.getFrom()[0]); 
	     
	       System.out.println("To - "); 
	       for(int j = 0; j < toAddress.length; j++){
	    	   System.out.println(toAddress[j].toString());
	       }
	       System.out.println("Text - " + 
	    		   message.getContent().toString());  
	      }
	     
	       folder.close(false);
	       mailStore.close();
	    } catch (Exception e) {
	        e.printStackTrace();
	        System.err.println("Error in receiving email.");
	        }        
	    }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5722564.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存