java 获取邮箱内容_javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)...

本文介绍如何使用Java的javamail API实现从邮箱中获取邮件内容,包括邮件的发送者、主题、正文以及附件下载。通过建立连接、打开收件箱、读取邮件并解析不同类型的邮件内容,例如纯文本、HTML和图片附件等。
摘要由CSDN通过智能技术生成

packagecom.cplatform.movie.back.javamail;importjava.io.DataInputStream;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjavax.mail.BodyPart;importjavax.mail.Folder;importjavax.mail.Message;importjavax.mail.MessagingException;importjavax.mail.Multipart;importjavax.mail.Store;importjavax.mail.internet.MimeUtility;/*** 查看|接收邮件业务类

*@authorliuyt

* @date 2014-10-24 下午2:04:48*/

public classLookEmailService {private transientEmailServiceEnity emailService;public void lookEmail() throwsMessagingException, IOException, InterruptedException {/*** 接收邮件时,邮箱的协议为POP3,SMTP为邮件传输协议,这里别搞混了

* 并且检查你的邮箱设置POP3功能是否开启*/emailService= new EmailServiceEnity("", "",EmailServiceEnity.MAIL_PROTOCOL_POP3);/*** javax.mail.Store类用于连接邮件接收服务器,并访问邮件接收服务器上的各个邮箱夹

* javax.mail.Folder类表示邮件夹

* 通过一个Session我们可以拿到一个邮箱对应的Store*/Store store=emailService.getSession().getStore(emailService.getMailProtocol());

store.connect(emailService.getHostPort(), EmailServiceEnity.username, EmailServiceEnity.password);/*** 通过Store拿到收件箱文件夹

* INBOX 标识获取到邮件夹里的收件箱 (对于POP3协议仅INBOX可用--蛋疼哦)

* 并以只读方式打开收件箱*/Folder folder= store.getFolder("INBOX");

folder.open(Folder.READ_ONLY);/*** 读取到的邮件是存在Message里面,有不同的获取方法

* 方法一:获取的是全部邮件,返回一个Message数组

* 方法二:获取指定条目的邮件(1表示邮箱里面的第一封邮件,也就是最早的一封)

* 还有很多方法,如起始位置和结束位置......不一一列举*/Message[] messages= folder.getMessages(); //方法一,得到全部邮件数组

Message message = folder.getMessage(messages.length); //方法二

System.out.println("邮件接收时间:"+message.getSentDate());

System.out.println("邮件发送者:"+message.getFrom()[0]);

System.out.println("邮件主题:"+message.getSubject());

System.out.println("邮件内容:"+message.getContent()); //内存地址

System.out.println("***********************飘逸的分割线*****************************");//得到邮件的Multipart(内容总部件--【包涵附件】)

Multipart multipart =(Multipart) message.getContent();int count = multipart.getCount(); //部件个数

for(int i=0; i

BodyPart part =multipart.getBodyPart(i);//单个部件类型

String type = part.getContentType().split(";")[0];/*** 类型众多,逐一判断,其中TEXT、HTML类型可以直接用字符串接收,其余接收为内存地址

* 可能不全,如有没判断住的,请自己打印查看类型,在新增判断*/

if(type.equals("multipart/alternative")) { //HTML (文本和超文本组合)

System.out.println("超文本:" +part.getContent().toString());

}else if(type.equals("text/plain")) { //纯文本

System.out.println("纯文本:" +part.getContent().toString());

}else if(type.equals("text/html")){ //HTML标签元素

System.out.println("HTML元素:" +part.getContent().toString());

}else if(type.equals("multipart/related")){ //内嵌资源 (包涵文本和超文本组合)

System.out.println("内嵌资源:" +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());

}/*****************************************获取邮件内容方法***************************************************/

/*** 附件下载

* 这里针对image图片类型附件做下载操作,其他类型附件同理*/

if(type.contains("image/")) {//打开附件的输入流

DataInputStream in = newDataInputStream(part.getInputStream());//一个文件输出流

FileOutputStream out = null;//获取附件名

String fileName =part.getFileName();//文件名解码

fileName =MimeUtility.decodeText(fileName);//根据附件名创建一个File文件

File file = new File("d:/data/" +fileName);//查看是否有当前文件

Boolean b =file.exists();if(!b) {

out= newFileOutputStream(file);intdata;//循环读写

while((data=in.read()) != -1) {

out.write(data);

}

System.out.println("附件:【" + fileName + "】下载完毕,保存路径为:" +file.getPath());

}//关流

if(in != null) {

in.close();

}if(out != null) {

out.close();

}

}/*** 获取超文本复合内容

* 他本是又是一个Multipart容器

* 此时邮件会分为TEXT(纯文本)正文和HTML正文(HTML标签元素)*/

if(type.equals("multipart/alternative")) {

Multipart m=(Multipart) part.getContent();for (int k=0; k

System.out.println("TEXT文本内容:"+"\n" + m.getBodyPart(k).getContent().toString().trim()+"\n");

}else{//处理 HTML 正文

System.out.println("HTML文本内容:"+"\n" + m.getBodyPart(k).getContent()+"\n");

}

}

}

}/*** 最后千万别忘记了关闭*/folder.close(false); //false为不更新邮件,true为更新,一般在删除邮件后使用

store.close();

}//main 方法简单测试

public static voidmain(String[] args) {try{newLookEmailService().lookEmail();

}catch(IOException e) {

e.printStackTrace();

}catch(MessagingException e) {

e.printStackTrace();

}catch(InterruptedException e) {

e.printStackTrace();

}

}

}

要使用JavaMail获取邮件附件内容,需要进行以下步骤: 1. 导入JavaMailJava Activation Framework库。 2. 创建Session对象,设置SMTP服务器和端口号。 ```java Properties props = new Properties(); props.setProperty("mail.smtp.host", "smtp.gmail.com"); props.setProperty("mail.smtp.port", "587"); props.setProperty("mail.smtp.auth", "true"); props.setProperty("mail.smtp.starttls.enable", "true"); Session session = Session.getDefaultInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("yourusername@gmail.com", "yourpassword"); } }); ``` 3. 创建IMAPStore对象,连接到邮箱。 ```java Store store = session.getStore("imap"); store.connect("imap.gmail.com", "yourusername@gmail.com", "yourpassword"); ``` 4. 获取邮件夹对象,打开邮件夹。 ```java Folder inbox = store.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); ``` 5. 遍历邮件夹中的邮件获取附件。 ```java Message[] messages = inbox.getMessages(); for (int i = 0; i < messages.length; i++) { Message message = messages[i]; String contentType = message.getContentType(); if (contentType.contains("multipart")) { Multipart multiPart = (Multipart) message.getContent(); for (int j = 0; j < multiPart.getCount(); j++) { MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(j); if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) { String fileName = part.getFileName(); InputStream inputStream = part.getInputStream(); // 读取附件内容 // ... } } } } ``` 6. 关闭邮件夹和IMAPStore对象。 ```java inbox.close(false); store.close(); ``` 以上就是使用JavaMail获取邮件附件内容的基本步骤。需要注意的是,不同邮件服务器的设置可能会有所不同,需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值