使用mail.jar包,直接网上找资源下载。
代码:
public String receiveMail() throws MessagingException, IOException{
//定义连接POP3服务器的属性信息
String pop3Server = "imap.exmail.qq.com";//这里写的是腾讯企业邮箱的
String protocol = "pop3";
String username = "邮箱地址";
String password = "邮箱密码"; //QQ邮箱的SMTP的授权码,什么是授权码,它又是如何设置?
Properties props = new Properties();
props.setProperty("mail.transport.protocol", protocol); //使用的协议(JavaMail规范要求)
props.setProperty("mail.smtp.host", pop3Server); //发件人的邮箱的 SMTP服务器地址
//获取连接
Session session = Session.getDefaultInstance(props);
session.setDebug(false);
//获取Store对象
Store store = session.getStore(protocol);
store.connect(pop3Server, username, password); //POP3服务器的登陆认证
//通过POP3协议获得Store对象调用这个方法时,邮件夹名称只能指定为"INBOX"
Folder folder = store.getFolder("INBOX");//获得用户的邮件帐户
folder.open(Folder.READ_WRITE); //设置对邮件帐户的访问权限
Message[] messages = folder.getMessages();//得到邮箱帐户中的所有邮件
System.out.println("收件箱邮件数量:" + messages.length );
String xx="";
//邮件按从新到旧
for (int j = messages.length-1; j>=0; j--) {
MimeMessage mimeMessage = (MimeMessage) messages[j];
String from=(mimeMessage.getFrom()[0])+"";
String subject=mimeMessage.getSubject();
//String messageid=mimeMessage.getMessageID();
Date sentdate=mimeMessage.getSentDate();
String contentid=mimeMessage.getContentID();
Object content=mimeMessage.getContent();
long mail_time=sentdate.getTime();
//可以直接写入到文件中
//OutputStream os = new FileOutputStream(new File("E:/mail-2021.eml"));
//mimeMessage.writeTo(os);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mail_datetime=sdf.format(sentdate);
//eg: =?gb180dfd5456bnl1?= <xxx@mail.com>
from=from.replaceAll("[^<>]+<", "");
from=from.replaceAll(">", "");
System.out.println("发件人:" + from);
System.out.println("邮件标题:" + subject);
//System.out.println("*" + messageid);
System.out.println("邮件时间:" + sentdate +",毫秒数:" + sentdate.getTime() );
//System.out.println("*" + contentid);
System.out.println("内容:" + content);
//60*60*24*2*1000
//new Date().getTime()- sentdate.getTime() > 60*60*29*1000
//最近5小时的
if(new Date().getTime() - sentdate.getTime() > 60*60*5*1000 ){
System.out.println("后面的邮件不看了");
break;
}
//System.out.println("=====" + content.getClass() );
String content_html="";
if(content.getClass().toString().indexOf("MimeMultipart") == -1){
content_html=content+"";
}
//得到邮件的Multipart(内容总部件)
try {
Multipart multipart = (Multipart) mimeMessage.getContent();
int count = multipart.getCount();//部件个数
System.out.println("个数:" + count);
for(int i=0; i<count; i++) {
//单个部件 注意:单个部件有可能又为一个Multipart,层层嵌套
BodyPart part = multipart.getBodyPart(i);
//单个部件类型
String type = part.getContentType().split(";")[0];
System.out.println("type:" + type);
/**
* 类型众多,逐一判断,其中TEXT、HTML类型可以直接用字符串接收,其余接收为内存地址
* 可能不全,如有没判断住的,请自己打印查看类型,在新增判断
*/
if(type.equals("multipart/alternative")) { //HTML(文本和超文本组合)
System.out.println("超文本:" + part.getContent().toString());
content_html=part.getContent().toString();
}else if(type.equals("text/plain")) { //纯文本
System.out.println("纯文本:" + part.getContent().toString());
content_html=part.getContent().toString();
}else if(type.equals("text/html")){ //HTML标签元素
System.out.println("HTML元素:" + part.getContent().toString());
content_html=part.getContent().toString();
}else if(type.equals("multipart/related")){ //内嵌资源 (包涵文本和超文本组合)
System.out.println("内嵌资源:" + part.getContent().toString());
content_html=part.getContent().toString();
}else if(type.contains("application/")) { //应用附件 (zip、xls、docx等)
System.out.println("应用文件:" + part.getContent().toString());
}else if(type.contains("image/")) { //图片附件 (jpg、gpeg、gif等)
System.out.println("图片文件:" + part.getContent().toString());
}
/**
* 获取超文本复合内容
* 他本是又是一个Multipart容器
* 此时邮件会分为TEXT(纯文本)正文和HTML正文(HTML标签元素)
*/
if(type.equals("multipart/alternative")) {
Multipart m = (Multipart) part.getContent();
for (int k=0; k<m.getCount(); k++) {
if(m.getBodyPart(k).getContentType().startsWith("text/plain")) {
//处理文本正文
//System.out.println("TEXT文本内容:"+"\n" + m.getBodyPart(k).getContent().toString().trim()+"\n");
content_html +=m.getBodyPart(k).getContent().toString().trim() + "";
} else {
//处理 HTML 正文
//System.out.println("HTML文本内容:"+"\n" + m.getBodyPart(k).getContent()+"\n");
content_html +=m.getBodyPart(k).getContent() + "";
}
}
}
}
} catch (Exception e1) {
// TODO Auto-generated catch block
//e1.printStackTrace();
System.out.println("异常:" + e1.toString());
}
System.out.println("邮件内容:" + content_html);
System.out.println("********************************");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
for (Message message : messages) {
String subject = message.getSubject();// 获得邮件主题
Address from = (Address) message.getFrom()[0];// 获得发送者地址
System.out.println("邮件的主题为: " + subject + "\t发件人地址为: " + from);
System.out.println("邮件的内容为:");
message.writeTo(System.out);// 输出邮件内容到控制台
}
*/
folder.close(false);// 关闭邮件夹对象
store.close(); // 关闭连接对象
return xx;
}</code></pre>