收邮件
package com.company; import com.sun.mail.pop3.POP3SSLStore; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Properties; public class Main { public static void main(String[] args) throws MessagingException, IOException { // write your code here ktkiullzhexbhfgb /* 发邮件使用的协议:SMTP 接收邮件使用的协议:POP3(标准端口110,加密端口995) 或者IMAP(标准端口143,加密端口993) 区别是后者“权限”更多一点点 第一步:导包,mail.jar 第二步:准备登陆信息 第三步:协议相关配置 第四步:启动SSL(Secure Sockets Layer 安全套接字协议) 第五步:连接到Store(即MDA服务器) 第六步:获取收件箱INBOX,存储了所有的接收的邮件 第七步:对某个邮件对象做处理--查看信息 */ String host="pop.qq.com";//服务器地址,对不对,ping一下测试通不通 int port=995;//端口 String username="QQ号@qq.com";//登陆邮箱账号 String password="ktkiullzhexbhfff";//登陆邮箱授权码,不是密码哦 Properties props=new Properties(); props.setProperty("mail.store.protocol","pop3");//设置协议名称 props.setProperty("mail.pop3.host",host);//设置服务器主机名 props.setProperty("mail.pop3.port",String.valueOf(port)); props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.port",String.valueOf(port)); URLName url=new URLName("pop3",host,port,"",username,password); Session session=Session.getInstance(props,null); //session.setDebug(true); Store store=new POP3SSLStore(session,url); store.connect();//store对像映射邮件存储,接收邮件就是从store上拿东西到我们自己的邮箱软件(MUA) //通过store对象,获取邮件箱(本质上就是个文件夹) Folder folder=store.getFolder("INBOX"); //读写方式打开 folder.open(Folder.READ_WRITE); //查看邮件总数、新邮件数,未读数,已删除数 System.out.println("总数:"+folder.getMessageCount()); System.out.println("新邮件数:"+folder.getNewMessageCount()); System.out.println("未读数:"+folder.getUnreadMessageCount()); System.out.println("已删除数:"+folder.getDeletedMessageCount()); //遍历所有邮件 Message[] messages=folder.getMessages(); for(Message mess:messages){ //打印查看每一封邮件,额外找个小弟来做 printMessage((MimeMessage) mess); System.out.println(getBody((MimeMessage) mess));//这个嘛,获取的是网页html标签内容,以后再优化只获取邮件内容咳咳 } folder.close(true);//true:如果有删除操作会同步删除服务器上的,false的话就只删MUA上的 store.close(); } /** * 获取邮件的头信息,发件人,收件人信息等 * @param msg * @throws MessagingException * @throws UnsupportedEncodingException */ public static void printMessage(MimeMessage msg) throws MessagingException, UnsupportedEncodingException { //邮件主题 System.out.println("主题Subject:"+ MimeUtility.decodeText(msg.getSubject()));; //发件人 Address[] froms=msg.getFrom(); InternetAddress address= (InternetAddress) froms[0]; String personal=address.getPersonal(); String from=personal==null?address.getAddress():(MimeUtility.decodeText(personal)+"<"+address.getAddress()+">"); System.out.println("From:"+from); } public static String getBody(Part part) throws IOException, MessagingException { if(part.isMimeType("text/*")){ //如果part是文本 return part.getContent().toString(); } if(part.isMimeType("multipart/*")){ //如果part是一个Multipart对象 Multipart multipart= (Multipart) part.getContent(); //循环解析每个子part for(int i=0;i<multipart.getCount();i++){ BodyPart bodyPart=multipart.getBodyPart(i); String body=getBody(bodyPart); if(!body.isEmpty()){ return body; } } } return ""; } }