由于把邮件收取到本地,要提取里面的信息,原来走了一些弯路。先看看邮件的格式:
Message-ID: <31164770.1121223075375.JavaMail.Administrator@zbh>
Date: Wed, 13 Jul 2005 10:51:15 +0800 (CST)
From: boss <dankes@163.com>
To: dankes@tom.com
Subject: good
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_19152757.1121223075171"
------=_Part_0_19152757.1121223075171
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable
<P>=D7=F0=BE=B4=B5=C4 :</P>
<P> =D4=DA=B4=CB=D7=AB=D0=B4=D3=CA=BC=FE=C4=DA=C8=DD</P>
<P>=A1=A1=A1=A1=CB=B3=D7=A3<BR>=C9=CC=E7=F7!<BR> </P>
<P> 2005-07-13</P>
------=_Part_0_19152757.1121223075171--
.
作者: 来自: 阅读次数:<script language="javascript" src="../inc/info.aspx?Info_SN=20400" type="text/javascript"> </script> 13 | ||
Quoted-Printable也是MIME邮件中常用的编码方式之一。同Base64一样, 它也将输入的字符串或数据编码成全是ASCII码的可打印字符串。 Quoted-Printable编码的基本方法是:输入数据在33-60、62-126范围内的, 直接输出;其它的需编码为“=”加两个字节的HEX码(大写)。为保证输出行不超过规定长度, 可在行尾加“=/r/n”序列作为软回车。 在这个上面浪费了一些时间了,老是想着怎么去解码,后来在网上找了 一个代码,大家可以参考一西啊。 其实不需要用到这个方法。看看也可以的。 public final String qpDecoding(String str) 其实用下面的方法就很方便了,不用考虑得太复杂。 if (contentType.startsWith("text/plain") || 下面是具体代码的实现。 |
package test;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.io.*;
import javax.mail.internet.MimeUtility;
import java.sql.Date;
import java.text.SimpleDateFormat;
public class testMail {
Message mimeMessage = null;
private String dateformat = "yy-MM-dd HH:mm"; //默认的日前显示格式
public testMail() {
try {
File file = new File("D://mail-log//O00268.dat");
InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeMessage = new MimeMessage(null, is);
InternetAddress address[] = (InternetAddress[]) mimeMessage.getFrom();
String from = address[0].getAddress();
String personal = address[0].getPersonal();
InternetAddress addressto[] = (InternetAddress[]) mimeMessage.
getRecipients(Message.RecipientType.TO);
String to = addressto[0].getAddress();
InternetAddress addresscc[] = (InternetAddress[]) mimeMessage.
getRecipients(Message.RecipientType.CC);
String cc = addresscc[0].getAddress();
InternetAddress addressBcc[] = (InternetAddress[]) mimeMessage.
getRecipients(Message.RecipientType.BCC);
String bcc = addressBcc[0].getAddress();
Part messagePart = mimeMessage;
Object content = messagePart.getContent();
if (content instanceof Multipart) {
messagePart = ( (Multipart) content).getBodyPart(0);
}
String contentType = messagePart.getContentType();
StringBuffer bf = null;
if (contentType.startsWith("text/plain") ||
contentType.startsWith("text/html")) {
InputStream ism = messagePart.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(ism));
String thisLine = reader.readLine();
bf = new StringBuffer();
bf.append(thisLine);
int i = 0;
while (thisLine != null) {
thisLine = reader.readLine();
if (thisLine != null) {
bf.append(thisLine);
}
}
}
setDateFormat("yy年MM月dd日 HH:mm");
System.out.println("发件人:" + personal + "<" + from + ">");
System.out.println("日期:" + mimeMessage.getSentDate().toLocaleString());
System.out.println("发送日期是:" + getSentDate());
System.out.println("收件人是:" + to);
System.out.println("主题是:" + mimeMessage.getSubject());
System.out.println("内容是:" + bf.toString());
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new testMail();
}
public void setDateFormat(String format) throws Exception {
this.dateformat = format;
}
public String getSentDate() throws Exception {
// Date sentdate =(Date)mimeMessage.getSentDate();
//SimpleDateFormat format = new SimpleDateFormat(dateformat);
// return format.format(sentdate);
return "";
}
public String getMailAddress(String type) throws Exception {
String mailaddr = "";
String addtype = type.toUpperCase();
InternetAddress[] address = null;
if (addtype.equals("TO") || addtype.equals("CC") || addtype.equals("BCC")) {
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[0].getAddress();
if (email == null) {
email = "";
}
else {
email = MimeUtility.decodeText(email);
}
String personal = address[0].getPersonal();
if (personal == null) {
personal = "";
}
else {
personal = MimeUtility.decodeText(personal);
}
String compositeto = personal + "<" + email + ">";
mailaddr += "," + compositeto;
}
mailaddr = mailaddr.substring(1);
}
}
else {
throw new Exception("Error emailaddr type!");
}
return mailaddr;
}
};