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 "";
}
}