邮件的解码

标准规定,Email的头部和邮件体只允许有us-ascii的字符。因此中文的邮件客户端,在发送邮件之前会将邮件的头部和邮件体进行编码,编码的方式有多种,

比如base64,QP,8-bit等等。在对邮件数据包进行解析的时候,要还原这些解码方式,最方便的方式还是使用javamail。javamail的MimeUtility类封装了很多实用的解码方法,其decode系列方法更是支持很多编码方式。详见javamail-api(http://javamail.kenai.com/nonav/javadocs/javax/mail/internet/MimeUtility.html

     我在做的项目,邮件头是用base64进行编码的,邮件体使用QP编码的,很多邮件客户端是这么做的。解码的代码附上,以供复用。

public static String getFromBASE64(String s) {
		if(s == null)
			return null;
		BASE64Decoder decoder = new BASE64Decoder();
		try {
			byte[] b = decoder.decodeBuffer(s);
			return new String(b);
		} catch(Exception e) {
			System.out.println("wrong decoding.");
			return null;
		}
	}
	
	public static String getFromQP(String s) throws IOException,MessagingException {
		InputStream is = new ByteArrayInputStream(s.getBytes());
		InputStream rss= MimeUtility.decode(is, "quoted-printable");
		String rs = inputStream2String(rss);
		return rs;
	}
	
	private static String inputStream2String(InputStream is) throws IOException{
		   BufferedReader in = new BufferedReader(new InputStreamReader(is));
		   StringBuffer buffer = new StringBuffer();
		   String line = "";
		   while ((line = in.readLine()) != null){
		     buffer.append(line);
		   }
		   return buffer.toString();
		}
posted @ 2011-06-24 13:29  明之道  阅读(1810)  评论(0编辑  收藏  举报