メールのデコード

1561 ワード

標準では、Emailのヘッダとメールボディにはus-asciiの文字しか許可されていません.そのため中国語のメールクライアントは、メールを送信する前にメールのヘッダとメール体を符号化し、符号化する方法は様々である.
例えばbase 64、QP、8-bitなど.メールパケットを解析するときに、これらの復号方式を復元するには、javamailを使用するのが一番便利です.JAvamailのMimeUtilityクラスには多くの実用的な復号方法がカプセル化されており、そのdecodeシリーズ方法は多くの符号化方式をサポートしている.詳細はjavamail-api(http://javamail.kenai.com/nonav/javadocs/javax/mail/internet/MimeUtility.html)を参照
私がやっているプロジェクトは、ヘッダーがbase 64で符号化されており、メール体は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();

		}