package com.prase.email.four;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
public class PraseMimeMessage{
private MimeMessage mimeMessage=null;
private String saveAttachPath="";//附件下载后的存放目录
private StringBuffer bodytext=new StringBuffer();
//存放邮件内容的StringBuffer对象
private String dateformat="yy-MM-dd HH:mm";//默认的日前显示格式
/**
* 构造函数,初始化一个MimeMessage对象
*/
public PraseMimeMessage() {
}
public PraseMimeMessage(MimeMessage mimeMessage) {
this.mimeMessage=mimeMessage;
}
public void setMimeMessage(MimeMessage mimeMessage){
this.mimeMessage=mimeMessage;
}
/**
* 获得发件人的地址和姓名
*/
public String getFrom1()throws Exception{
InternetAddress address[]=(InternetAddress[])mimeMessage.getFrom();
String from=address[0].getAddress();
if(from==null){
from="";
}
String personal=address[0].getPersonal();
if(personal==null){
personal="";
}
String fromaddr=personal+"<"+from+">";
return fromaddr;
}
/**
* 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同
* "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址
* @throws Exception */
public String getMailAddress(String type){
String mailaddr="";
try {
String addtype=type.toUpperCase();
InternetAddress []address=null;
if(addtype.equals("TO")||addtype.equals("CC")||addtype.equals("BBC")){
if(addtype.equals("TO")){
address=(InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.TO);
}
else if(addtype.equals("CC")){
address=(InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.CC);
}
else{
address=(InternetAddress[])mimeMessage.getRecipients(Message.RecipientType.BCC);
}
if(address!=null){
for (int i = 0; i < address.length; i++) {
String email=address[i].getAddress();
if(email==null)email="";
else{
email=MimeUtility.decodeText(email);
}
String personal=address[i].getPersonal();
if(personal==null)personal="";
else{
personal=MimeUtility.decodeText(personal);
}
String compositeto=personal+"<"+email+">";
mailaddr+=","+compositeto;
}
mailaddr=mailaddr.substring(1);
}
}
else{
}
} catch (Exception e) {
// TODO: handle exception
}
return mailaddr;
}
/**
* 获得邮件主题
*/
public String getSubject()
{
String subject="";
try {
subject=MimeUtility.decodeText(mimeMessage.getSubject());
if(subject==null)subject="";
} catch (Exception e) {
// TODO: handle exception
}
return subject;
}
/**
* 获得邮件发送日期
*/
public String getSendDate()throws Exception{
Date senddate=mimeMessage.getSentDate();
SimpleDateFormat format=new SimpleDateFormat(dateformat);
return format.format(senddate);
}
/**
* 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件
* 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析
*/
public void getMailContent(Part part)throws Exception{
String contenttype=part.getContentType();
int nameindex=contenttype.indexOf("name");
boolean conname=false;
if(nameindex!=-1)conname=true;
if(part.isMimeType("text/plain")&&!conname){
bodytext.append((String)part.getContent());
}else if(part.isMimeType("text/html")&&!conname){
bodytext.append((String)part.getContent());
}
else if(part.isMimeType("multipart/*")){
Multipart multipart=(Multipart)part.getContent();
int counts=multipart.getCount();
for(int i=0;i<counts;i++){
getMailContent(multipart.getBodyPart(i));
}
}else if(part.isMimeType("message/rfc822")){
getMailContent((Part)part.getContent());
}
else{}
}
/**
* 获得邮件正文内容
*/
public String getBodyText(){
return bodytext.toString();
}
/**
* 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"
* @throws MessagingException */
public boolean getReplySign() throws MessagingException{
boolean replysign=false;
String needreply[]=mimeMessage.getHeader("Disposition-Notification-To");
if(needreply!=null){
replysign=true;
}
return replysign;
}
/**
* 获得此邮件的Message-ID
* @throws MessagingException */
public String getMessageId() throws MessagingException{
return mimeMessage.getMessageID();
}
/**
* 【判断此邮件是否已读,如果未读返回返回false,反之返回true】
* @throws MessagingException */
public boolean isNew() throws MessagingException{
boolean isnew =false;
Flags flags=((Message)mimeMessage).getFlags();
Flags.Flag[]flag=flags.getSystemFlags();
for (int i = 0; i < flag.length; i++) {
if(flag[i]==Flags.Flag.SEEN){
isnew=true;
break;
}
}
return isnew;
}
/**
* 判断此邮件是否包含附件
* @throws MessagingException */
public boolean isContainAttach(Part part) throws Exception{
boolean attachflag=false;
String contentType=part.getContentType();
if(part.isMimeType("multipart/*")){
Multipart mp=(Multipart)part.getContent();
//获取附件名称可能包含多个附件
for(int j=0;j<mp.getCount();j++){
BodyPart mpart=mp.getBodyPart(j);
String disposition=mpart.getDescription();
if((disposition!=null)&&((disposition.equals(Part.ATTACHMENT))||(disposition.equals(Part.INLINE)))){
attachflag=true;
}else if(mpart.isMimeType("multipart/*")){
attachflag=isContainAttach((Part)mpart);
}else{
String contype=mpart.getContentType();
if(contype.toLowerCase().indexOf("application")!=-1) attachflag=true;
if(contype.toLowerCase().indexOf("name")!=-1) attachflag=true;
}
}
}else if(part.isMimeType("message/rfc822")){
attachflag=isContainAttach((Part)part.getContent());
}
return attachflag;
}
/**
* 【保存附件】
* @throws Exception
* @throws IOException
* @throws MessagingException
* @throws Exception */
public void saveAttachMent(Part part) throws Exception {
String fileName="";
if(part.isMimeType("multipart/*")){
Multipart mp=(Multipart)part.getContent();
for(int j=0;j<mp.getCount();j++){
BodyPart mpart=mp.getBodyPart(j);
String disposition=mpart.getDescription();
if((disposition!=null)&&((disposition.equals(Part.ATTACHMENT))||(disposition.equals(Part.INLINE)))){
fileName=mpart.getFileName();
if(fileName.toLowerCase().indexOf("GBK")!=-1){
fileName=MimeUtility.decodeText(fileName);
}
saveFile(fileName,mpart.getInputStream());
}
else if(mpart.isMimeType("multipart/*")){
fileName=mpart.getFileName();
}
else{
fileName=mpart.getFileName();
if((fileName!=null)){
fileName=MimeUtility.decodeText(fileName);
saveFile(fileName,mpart.getInputStream());
}
}
}
}
else if(part.isMimeType("message/rfc822")){
saveAttachMent((Part)part.getContent());
}
}
/**
* 【设置附件存放路径】
*/
public void setAttachPath(String attachpath){
this.saveAttachPath=attachpath;
}
/**
* 【设置日期显示格式】
*/
public void setDateFormat(String format){
this.dateformat=format;
}
/**
* 【获得附件存放路径】
*/
public String getAttachPath()
{
return saveAttachPath;
}
/**
* 【真正的保存附件到指定目录里】
*/
private void saveFile(String fileName,InputStream in)throws Exception{
String osName=System.getProperty("os.name");
String storedir=getAttachPath();
String separator="";
if(osName==null)osName="";
if(osName.toLowerCase().indexOf("win")!=-1){
//如果是window 操作系统
separator="/";
if(storedir==null||storedir.equals(""))storedir="c:\tmp";
}
else{
//如果是其他的系统
separator="/";
storedir="/tmp";
}
File strorefile=new File(storedir+separator+fileName);
BufferedOutputStream bos=null;
BufferedInputStream bis=null;
try {
bos=new BufferedOutputStream(new FileOutputStream(strorefile));
bis=new BufferedInputStream(in);
int c;
while((c=bis.read())!=-1){
bos.write(c);
bos.flush();
}
} catch (Exception e) {
// TODO: handle exception
}finally{
bos.close();
bis.close();
}
}
/**
* PraseMimeMessage类测试
* @throws Exception */
public static void main(String[] args) throws Exception {
// String host="mail.21gmail.com";
// String username="fjj0@21gmail.com";
// String password="123456789";
Properties props=new Properties();
//使用网络代理
props.setProperty("proxySet","true");
props.setProperty("ProxyHost","10.24.5.105");
props.setProperty("ProxyPort","39002");
Session session=Session.getDefaultInstance(props,null);
Store store=session.getStore("pop3");
store.connect(host,username,password);
Folder folder=store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[]=folder.getMessages();
PraseMimeMessage pmm=null;
for (int i = 0; i < message.length; i++) {
System.out.println("****************************************第"+(i+1)+"封邮件**********************************");
pmm=new PraseMimeMessage((MimeMessage)message[i]);
System.out.println("主题 :"+pmm.getSubject());
pmm.setDateFormat("yy年MM月dd日 HH:mm");
System.out.println("发送时间 :"+pmm.getSendDate());
System.out.println("是否回执 :"+pmm.getReplySign());
System.out.println("是否包含附件 :"+pmm.isContainAttach((Part)message[i]));
System.out.println("发件人 :"+pmm.getFrom1());
System.out.println("收件人 :"+pmm.getMailAddress("TO"));
System.out.println("抄送地址 :"+pmm.getMailAddress("CC"));
System.out.println("密送地址 :"+pmm.getMailAddress("BCC"));
System.out.println("邮件ID :"+i+":"+pmm.getMessageId());
pmm.getMailContent((Part)message[i]); //根据内容的不同解析邮件
pmm.setAttachPath("d:/temp"); //设置邮件附件的保存路径
pmm.saveAttachMent((Part)message[i]); //保存附件
System.out.println("邮件正文 :"+pmm.getBodyText());
System.out.println("*********************************第"+(i+1)+"封邮件结束*************************************");
}
}
}
分享到:
相关推荐
它包括了 javax.mail 和 javax.mail.internet 包,这两个包提供了发送、接收邮件以及解析邮件内容的类和接口。例如,`Session` 类用于设置邮件服务器的配置,`Store` 类用于连接邮箱并获取邮件,`Folder` 类用于操作...
这个"java收发邮件完整版"项目提供了一个完整的Java邮件发送和接收的解决方案,确保用户可以顺利地通过编程方式处理电子邮件。在这个压缩包中,可能包含了一个或多个Java源代码文件,例如"71112303梁洁"和"71112418...
以上就是关于"JAVA100例之实例48 使用JavaMail接收邮件"的主要内容,通过学习和实践这个实例,开发者将能够熟练地使用JavaMail API来实现邮件的接收功能,这对于构建自动化邮件系统或者处理邮件相关的业务需求非常有...
### Java使用SOAP获取WebService实例解析 #### WebService简介 WebService是一种跨编程语言和操作系统平台的、在网络上进行数据交换的一种方式。它使用标准的Internet协议,如HTTP、XML、SOAP等来实现不同系统间的...
本文将深入探讨如何在Java环境中解析银联ISO8583报文,以及如何通过提供的代码示例`Iso8583Util.java`和`Helloworld.java`进行实践。 ISO8583协议定义了一个固定长度的报文结构,包含了多个字段,每个字段都有其...
实例46中可能具体展示了如何将上述步骤整合到一个完整的Java程序中,包括异常处理和更复杂的情况,如解析邮件附件、处理HTML内容等。这个实例对于学习和理解Java邮件处理是非常有价值的,可以加深对SMTP协议及...
Java ModBus 操作实例主要涉及了使用Java进行ModBus通信以及串口通信的过程。ModBus是一种广泛应用的工业通信协议,常用于PLC、数采仪等设备之间进行数据交换。在Java环境中,开发者需要实现相应的功能来与这些设备...
### Java邮件开发实例知识点 #### 一、Java邮件发送机制概览 在Java开发中,邮件功能是非常实用的一项技术,可以用于用户注册验证、找回密码等场景。本篇将通过一个具体的实例——“Java邮件开发实例”,来详细...
JavaMail API是一个开源库,它允许开发者通过Java程序发送和接收电子邮件。在本实例中,我们需要两个关键的库:`mail.jar`和`activation.jar`,这两个JAR文件提供了JavaMail所需的功能。 首先,确保你的项目已经...
在本实例中,我们使用了三个主要的类:DB.java、Test.java和CRC16.java。DB.java用于获取实时数据并将其保存到数据库中,Test.java用于接收数采仪数据并将其发送到ModBus,CRC16.java用于计算CRC16校验码。 2. Test...
本文将基于提供的“java发送邮件_实例.doc”文件,深入探讨Java发送邮件的核心技术和实践方法。 #### Mail.jar包的重要性 首先,成功发送邮件的关键之一是下载并正确配置`Mail.jar`包。`Mail.jar`是JavaMail API的...
本文主要介绍了Java实现解析dcm医学影像文件并提取文件信息的方法,结合实例形式分析了Java基于第三方库文件针对dcm医学影像文件的解析操作相关实现技巧。下面将详细介绍该方法的实现步骤和相关知识点。 一、安装...
总结来说,Java UDP收发结构体实例和Socket编程涉及创建`DatagramSocket`,构造`DatagramPacket`,进行数据的发送和接收。了解这些基本概念和操作对于进行Java UDP通信至关重要。在实际应用中,我们需要考虑数据的分...
在Java中,HL7解析通常涉及使用HAPI(HL7 Application Programming Interface)库。HAPI是Java平台上的一个开源框架,它提供了对HL7 v2.x消息的强大支持,包括解析、创建和验证HL7消息。HAPI不仅简化了HL7消息处理,...
Java邮件收发系统是一种利用Java编程语言实现的软件,它能够模拟类似微软Outlook的邮件管理功能,包括发送、接收邮件以及执行其他辅助任务。在Java中,这通常通过使用JavaMail API来实现,该API提供了处理SMTP(简单...
JavaMail 是一个开源的 Java 库,用于在 Java 应用程序中发送和接收电子邮件。它提供了丰富的 API,使得开发者可以方便地与各种邮件服务器进行交互,支持 SMTP、POP3 和 IMAP 协议。本篇文章将深入探讨 JavaMail 的...
1. **监听与响应**:服务端需要监听客户端的连接请求,并根据MMS协议解析接收到的报文。 2. **数据提供**:当接收到读请求时,服务端应返回对应数据对象的值;对于写请求,更新数据并确认操作。 3. **数据发布**:...
在Java编程环境中,电子邮件的发送、接收以及处理Excel文件(XLS格式)是常见的任务,尤其是在数据处理和自动化流程中。下面将详细讲解这两个主要功能的实现。 首先,让我们来看看如何使用Java发送电子邮件。...
总结来说,这个Java Web二维码生成与解析实例涵盖了Java编程、Web开发、二维码编码解码以及HTTP服务处理等多个技术领域。通过实践这个实例,开发者不仅可以掌握基础的二维码操作,还能深入理解Java Web应用的开发...