javamail 解析正文简易算法

时间:2021-10-09 18:08:39
javamail 解析正文简易算法package lml;
javamail 解析正文简易算法
javamail 解析正文简易算法
import java.io.BufferedOutputStream;
javamail 解析正文简易算法
import java.io.File;
javamail 解析正文简易算法
import java.io.FileOutputStream;
javamail 解析正文简易算法
import java.io.InputStream;
javamail 解析正文简易算法
javamail 解析正文简易算法
import javax.mail.Message;
javamail 解析正文简易算法
import javax.mail.MessagingException;
javamail 解析正文简易算法
import javax.mail.Multipart;
javamail 解析正文简易算法
import javax.mail.Part;
javamail 解析正文简易算法
import javax.mail.internet.MimeUtility;
javamail 解析正文简易算法
javamail 解析正文简易算法
import org.apache.log4j.Logger;
javamail 解析正文简易算法
javamail 解析正文简易算法
import common.Constants;
javamail 解析正文简易算法
javamail 解析正文简易算法javamail 解析正文简易算法
/**
javamail 解析正文简易算法 * 这是一个解析邮件的工具类,不负责回显工作,与表示层无关<br>
javamail 解析正文简易算法 * 主要的方法是:
javamail 解析正文简易算法 * <ul>
javamail 解析正文简易算法 * <li>判断一个邮件体是否附件</li>
javamail 解析正文简易算法 * <li>判断一封邮件是否含有附件</li>
javamail 解析正文简易算法 * <li>解析邮件的正文</li>
javamail 解析正文简易算法 * </ul>
javamail 解析正文简易算法 * 
javamail 解析正文简易算法 * 
@author M.Liang Liu
javamail 解析正文简易算法 * @date 2007年5月25日16:08:40
javamail 解析正文简易算法 
*/

javamail 解析正文简易算法javamail 解析正文简易算法
public class LmlMessage {
javamail 解析正文简易算法
javamail 解析正文简易算法javamail 解析正文简易算法    
/**
javamail 解析正文简易算法     * 得到邮件正文内容 邮件的正文可能是多种类型:
javamail 解析正文简易算法     * <ul>
javamail 解析正文简易算法     * <li> text/plain </li>
javamail 解析正文简易算法     * <li> text/html</li>
javamail 解析正文简易算法     * <li> multipart/alternative</li>
javamail 解析正文简易算法     * <li> multipart/related:内有内嵌的文件,噢噢~</li>
javamail 解析正文简易算法     * <li> mutilpart/* </li>
javamail 解析正文简易算法     * <li> message/rfc822 </li>
javamail 解析正文简易算法     * </ul>
javamail 解析正文简易算法     * 
javamail 解析正文简易算法     * 
@param msg:待解析正文的邮件对象或邮件体(邮件的一部分)对象
javamail 解析正文简易算法     * 
@author M.Liang Liu
javamail 解析正文简易算法     * 
@version 1.0
javamail 解析正文简易算法     * 
@since 1.6
javamail 解析正文简易算法     * 
@return 根据邮件类型返回不同的邮件正文
javamail 解析正文简易算法     
*/

javamail 解析正文简易算法javamail 解析正文简易算法    
public static String getBody(Part part, String userName) {
javamail 解析正文简易算法        Logger logger 
= Logger.getLogger("LmlMessage.java");
javamail 解析正文简易算法        StringBuffer sb 
= new StringBuffer();
javamail 解析正文简易算法        sb.append(
new String(""));
javamail 解析正文简易算法javamail 解析正文简易算法        
try {
javamail 解析正文简易算法            logger.debug(
"The type of the part is:" + part.getContentType());
javamail 解析正文简易算法javamail 解析正文简易算法            
/**
javamail 解析正文简易算法             * 纯文本或者html格式的,可以直接解析掉
javamail 解析正文简易算法             
*/

javamail 解析正文简易算法javamail 解析正文简易算法            
if (part.isMimeType("text/plain"|| part.isMimeType("text/html")) {
javamail 解析正文简易算法                sb.append(part.getContent());
javamail 解析正文简易算法javamail 解析正文简易算法            }
 else if (part.isMimeType("multipart/*")) {
javamail 解析正文简易算法javamail 解析正文简易算法                
/**
javamail 解析正文简易算法                 * 可供选择的,一般情况下第一个是plain,第二个是html格式的
javamail 解析正文简易算法                 
*/

javamail 解析正文简易算法javamail 解析正文简易算法                
if (part.isMimeType("multipart/alternative")) {
javamail 解析正文简易算法                    Multipart mp 
= (Multipart) part.getContent();
javamail 解析正文简易算法                    
int index = 0;// 兼容不正确的格式,返回第一个部分
javamail 解析正文简易算法
                    if (mp.getCount() > 1)
javamail 解析正文简易算法                        index 
= 1;// 第2个部分为html格式的哦~
javamail 解析正文简易算法
                    logger.debug("Now will choose the index(start from 0):"
javamail 解析正文简易算法                            
+ index);
javamail 解析正文简易算法javamail 解析正文简易算法                    
/**
javamail 解析正文简易算法                     * 已经根据情况进行了判断,就算不符合标准格式也不怕了.
javamail 解析正文简易算法                     
*/

javamail 解析正文简易算法                    Part tmp 
= mp.getBodyPart(index);
javamail 解析正文简易算法                    sb.append(tmp.getContent());
javamail 解析正文简易算法javamail 解析正文简易算法                }
 else if (part.isMimeType("multipart/related")) {
javamail 解析正文简易算法javamail 解析正文简易算法                    
/**
javamail 解析正文简易算法                     * related格式的,那么第一个部分包含了body,里面含有内嵌的内容的链接.
javamail 解析正文简易算法                     
*/

javamail 解析正文简易算法                    Multipart mp 
= (Multipart) part.getContent();
javamail 解析正文简易算法                    Part tmp 
= mp.getBodyPart(0);
javamail 解析正文简易算法                    String body 
= LmlMessage.getBody(tmp, userName);
javamail 解析正文简易算法                    
int count = mp.getCount();
javamail 解析正文简易算法javamail 解析正文简易算法                    
/**
javamail 解析正文简易算法                     * 要把那些可能的内嵌对象都先读出来放在服务器上,然后在替换相对地址为绝对地址
javamail 解析正文简易算法                     
*/

javamail 解析正文简易算法javamail 解析正文简易算法                    
for (int k = 1; count > 1 && k < count; k++{
javamail 解析正文简易算法                        Part att 
= mp.getBodyPart(k);
javamail 解析正文简易算法                        String attname 
= att.getFileName();
javamail 解析正文简易算法                        attname 
= MimeUtility.decodeText(attname);
javamail 解析正文简易算法javamail 解析正文简易算法                        
try {
javamail 解析正文简易算法                            File attFile 
= new File(
javamail 解析正文简易算法                                    Constants.tomcat_AttHome_Key, userName
javamail 解析正文简易算法                                            .concat(attname));
javamail 解析正文简易算法                            FileOutputStream fileoutput 
= new FileOutputStream(
javamail 解析正文简易算法                                    attFile);
javamail 解析正文简易算法                            InputStream is 
= att.getInputStream();
javamail 解析正文简易算法                            BufferedOutputStream outs 
= new BufferedOutputStream(
javamail 解析正文简易算法                                    fileoutput);
javamail 解析正文简易算法                            
byte b[] = new byte[att.getSize()];
javamail 解析正文简易算法                            is.read(b);
javamail 解析正文简易算法                            outs.write(b);
javamail 解析正文简易算法                            outs.close();
javamail 解析正文简易算法javamail 解析正文简易算法                        }
 catch (Exception e) {
javamail 解析正文简易算法                            logger
javamail 解析正文简易算法                                    .error(
"Error occurred when to get the photos from server");
javamail 解析正文简易算法                        }

javamail 解析正文简易算法                        String Content_ID[] 
= att.getHeader("Content-ID");
javamail 解析正文简易算法javamail 解析正文简易算法                        
if (Content_ID != null && Content_ID.length > 0{
javamail 解析正文简易算法                            String cid_name 
= Content_ID[0].replaceAll("<""")
javamail 解析正文简易算法                                    .replaceAll(
">""");
javamail 解析正文简易算法                            body 
= body.replaceAll("cid:" + cid_name,
javamail 解析正文简易算法                                    Constants.server_attHome_Key.concat(
"/")
javamail 解析正文简易算法                                            .concat(userName.concat(attname)));
javamail 解析正文简易算法                        }

javamail 解析正文简易算法                    }

javamail 解析正文简易算法
javamail 解析正文简易算法                    sb.append(body);
javamail 解析正文简易算法                    
return sb.toString();
javamail 解析正文简易算法javamail 解析正文简易算法                }
 else {
javamail 解析正文简易算法javamail 解析正文简易算法                    
/**
javamail 解析正文简易算法                     * 其他multipart/*格式的如mixed格式,那么第一个部分包含了body,用递归解析第一个部分就可以了
javamail 解析正文简易算法                     
*/

javamail 解析正文简易算法                    Multipart mp 
= (Multipart) part.getContent();
javamail 解析正文简易算法                    Part tmp 
= mp.getBodyPart(0);
javamail 解析正文简易算法                    
return LmlMessage.getBody(tmp, userName);
javamail 解析正文简易算法                }

javamail 解析正文简易算法javamail 解析正文简易算法            }
 else if (part.isMimeType("message/rfc822")) {
javamail 解析正文简易算法                
return LmlMessage
javamail 解析正文简易算法                        .getBody((Message) part.getContent(), userName);
javamail 解析正文简易算法javamail 解析正文简易算法            }
 else {
javamail 解析正文简易算法javamail 解析正文简易算法                
/**
javamail 解析正文简易算法                 * 否则的话,死马当成活马医,直接解析第一部分,呜呜~
javamail 解析正文简易算法                 
*/

javamail 解析正文简易算法                Object obj 
= part.getContent();
javamail 解析正文简易算法javamail 解析正文简易算法                
if (obj instanceof String) {
javamail 解析正文简易算法                    sb.append(obj);
javamail 解析正文简易算法javamail 解析正文简易算法                }
 else {
javamail 解析正文简易算法                    Multipart mp 
= (Multipart) obj;
javamail 解析正文简易算法                    Part tmp 
= mp.getBodyPart(0);
javamail 解析正文简易算法                    
return LmlMessage.getBody(tmp, userName);
javamail 解析正文简易算法                }

javamail 解析正文简易算法            }

javamail 解析正文简易算法javamail 解析正文简易算法        }
 catch (Exception e) {
javamail 解析正文简易算法            
return "解析正文错误!";
javamail 解析正文简易算法        }

javamail 解析正文简易算法        
return sb.toString();
javamail 解析正文简易算法    }

javamail 解析正文简易算法
javamail 解析正文简易算法javamail 解析正文简易算法    
public static String getBody(Message msg, String userName) {
javamail 解析正文简易算法        
return LmlMessage.getBody((Part) msg, userName);
javamail 解析正文简易算法    }

javamail 解析正文简易算法
javamail 解析正文简易算法javamail 解析正文简易算法    
/**
javamail 解析正文简易算法     * 判断一封邮件是否含有附件<br>
javamail 解析正文简易算法     * 首先要满足:msg的mimetype是multipart/*类型的,然后要有某bodyPart的disposition是attachment
javamail 解析正文简易算法     * 
javamail 解析正文简易算法     * 
@param msg:要判断是否含有附件的邮件
javamail 解析正文简易算法     * 
@author M.Liang Liu
javamail 解析正文简易算法     * 
@version 1.0
javamail 解析正文简易算法     * 
@see public static boolean isAttachment(Part part)
javamail 解析正文简易算法     * 
@return true:含有附件<br>
javamail 解析正文简易算法     *         false:不含有附件
javamail 解析正文简易算法     
*/

javamail 解析正文简易算法javamail 解析正文简易算法    
public static boolean hasAttachment(Message msg) {
javamail 解析正文简易算法        Part part 
= (Part) msg;
javamail 解析正文简易算法javamail 解析正文简易算法        
try {
javamail 解析正文简易算法javamail 解析正文简易算法            
if (part.isMimeType("multipart/*")) {
javamail 解析正文简易算法                Multipart mp 
= (Multipart) part.getContent();
javamail 解析正文简易算法                
int count = mp.getCount();
javamail 解析正文简易算法javamail 解析正文简易算法                
for (int i = 0; i < count; i++{
javamail 解析正文简易算法                    Part tmp 
= mp.getBodyPart(i);
javamail 解析正文简易算法                    
if (LmlMessage.isAttachment(tmp))
javamail 解析正文简易算法                        
return true;
javamail 解析正文简易算法                }

javamail 解析正文简易算法            }

javamail 解析正文简易算法javamail 解析正文简易算法        }
 catch (Exception e) {
javamail 解析正文简易算法            
return false;
javamail 解析正文简易算法        }

javamail 解析正文简易算法        
return false;
javamail 解析正文简易算法    }

javamail 解析正文简易算法
javamail 解析正文简易算法javamail 解析正文简易算法    
/**
javamail 解析正文简易算法     * 判断一个邮件体是否是附件<br>
javamail 解析正文简易算法     * 核心代码主要是解析其头部的disposition,一般设置了是disposition是attachment的才是附件
javamail 解析正文简易算法     * 
javamail 解析正文简易算法     * 
@author M.Liang Liu
javamail 解析正文简易算法     * 
@version 1.0
javamail 解析正文简易算法     * 
@return:如果是附件的话,那么返回true;<br>
javamail 解析正文简易算法     *                           否则/异常false;
javamail 解析正文简易算法     
*/

javamail 解析正文简易算法javamail 解析正文简易算法    
public static boolean isAttachment(Part part) {
javamail 解析正文简易算法javamail 解析正文简易算法        
try {
javamail 解析正文简易算法            String disposition 
= part.getDisposition();
javamail 解析正文简易算法            
if ((disposition != null)
javamail 解析正文简易算法                    
&& ((disposition.equals(Part.ATTACHMENT)) || (disposition
javamail 解析正文简易算法                            .equals(Part.INLINE))))
javamail 解析正文简易算法                
return true;
javamail 解析正文简易算法javamail 解析正文简易算法        }
 catch (Exception e) {
javamail 解析正文简易算法javamail 解析正文简易算法            
/**
javamail 解析正文简易算法             * 上面的方法只是适合于附件不是中文,或者中文名较短的情况,<br>
javamail 解析正文简易算法             * 附件中文名过长时就不能用了,因为javamail Api中的part.getDisposition()根本就不能得到正确的数据了<br>
javamail 解析正文简易算法             * 捕获异常后,分别再详细判断处理
javamail 解析正文简易算法             
*/

javamail 解析正文简易算法            String contentType 
= "";
javamail 解析正文简易算法javamail 解析正文简易算法            
try {
javamail 解析正文简易算法                contentType 
= part.getContentType();
javamail 解析正文简易算法javamail 解析正文简易算法            }
 catch (MessagingException e1) {
javamail 解析正文简易算法                
return false;
javamail 解析正文简易算法            }

javamail 解析正文简易算法            
if (contentType.startsWith("application/octet-stream"))
javamail 解析正文简易算法                
return true;
javamail 解析正文简易算法            
return false;
javamail 解析正文简易算法        }

javamail 解析正文简易算法        
return false;
javamail 解析正文简易算法    }

javamail 解析正文简易算法}