读书人

Java 接收邮件的有关问题

发布时间: 2012-10-30 16:13:36 作者: rapoo

Java 接收邮件的问题
package com.helian;



public class ReciveMail {

private MimeMessage msg = null;
private String saveAttchPath = "";
private StringBuffer bodytext = new StringBuffer();
private String dateformate = "yy-MM-dd HH:mm";

public ReciveMail(MimeMessage msg){
this.msg = msg;
}

public void setMsg(MimeMessage msg){
this.msg = msg;
}

/**
* 获取发送邮件者信息
* @return
* @throws MessagingException
*/
public String getForm() throws MessagingException{
InternetAddress[] address = (InternetAddress[]) msg.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" -->密送地址
* @param type
* @return
* @throws MessagingException
* @throws UnsupportedEncodingException
*/



/**
* 获取邮件主题
* @return
* @throws UnsupportedEncodingException
* @throws MessagingException
*/
public String getSubject() throws UnsupportedEncodingException,MessagingException{
String subject = "";
subject = MimeUtility.decodeText(msg.getSubject());
if(subject == null){
subject = "";
}
return subject;
}

/**
* 获取邮件发送日期
* @return
* @throws MessagingException
*/
public String getSendDate() throws MessagingException{
Date senDate = msg.getSentDate();
SimpleDateFormat smd = new SimpleDateFormat(dateformate);
return smd.format(senDate);
}

/**
* 获取邮件正文内容
* @return
*/
public String getBodyText(){
return bodytext.toString();
}

/**
* 解析邮件,将得到的邮件内容保存到一个stringBuffer对象中,解析邮件 主要根据MimeType的不同执行不同的操作,一步一步的解析
* @param part
* @throws MessagingException
* @throws IOException
*/
public void getMailContent(Part part) throws MessagingException,IOException{
String contentType = part.getContentType();
int nameindex = contentType.indexOf("name");
boolean conname = false;
if(nameindex != -1){
conname = true;
}
System.out.println("CONTENTTYPE:" +contentType);
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 count = multipart.getCount();
for (int i = 0; i < count; i++) {
getMailContent(multipart.getBodyPart(i));
}
}else if(part.isMimeType("message/rfc822")){
getMailContent((Part) part.getContent());
}
}

/**
* 判断邮件是否需要回执,如需要回执返回true,否则返回false;
* @return
* @throws MessagingException
*/
public boolean getReplySign() throws MessagingException{
boolean replySign = false;
String needreply[] = msg.getHeader("Disposition-Notification-TO");
if(needreply != null){
replySign = true;
}
return replySign;
}

/**
* 获取此邮件的Message-id
* @return
* @throws MessagingException
*/
public String getMessageId() throws MessagingException{
return msg.getMessageID();
}

/**
* 判断此邮件是否已读,如果未读则返回false,已读返回true;
* @return
* @throws MessagingException


*/
public boolean isNew() throws MessagingException{
boolean isnew = false;
Flags flags = ((Message)msg).getFlags();
Flags.Flag[] flag = flags.getSystemFlags();
System.out.println("flags's length : " + flag.length);
for (int i = 0; i < flag.length; i++) {
if(flag[i] == Flags.Flag.SEEN){
isnew = true;
System.out.println("seen message ......");
break;
}
}
return isnew;
}


/**
* 判断是否包涵附件
* @param part
* @return
* @throws MessagingException
* @throws IOException
*/
public boolean isContainAttch(Part part) throws MessagingException,IOException{
boolean flag = false;

String contentType = part.getContentType();
if(part.isMimeType("multipart/*")){
Multipart multipart = (Multipart) part.getContent();
int count = multipart.getCount();
for (int i = 0; i < count; i++) {
BodyPart bodypart = multipart.getBodyPart(i);
String dispostion = bodypart.getDisposition();
if((dispostion != null) && (dispostion.equals(Part.ATTACHMENT) || dispostion.equals(Part.INLINE))){
flag = true;
}else if(bodypart.isMimeType("multipart/*")){
flag = isContainAttch(bodypart);
}else{
String conType = bodypart.getContentType();
if(conType.toLowerCase().indexOf("appliaction") != -1){
flag = true;
}
if(conType.toLowerCase().indexOf("name") != -1){
flag = true;
}
}
}
}else if(part.isMimeType("message/rfc822")){
flag = isContainAttch((Part) part.getContent());
}
return flag;
}

/**
* 保存附件
* @param part
* @throws MessagingException
* @throws IOException
*/
public void saveAttchMent(Part part) throws MessagingException,IOException{
String filename = "";
if(part.isMimeType("multipart/*")){
Multipart mp = (Multipart) part.getContent();
for (int i = 0; i < mp.getCount(); i++) {
BodyPart mpart = mp.getBodyPart(i);
String dispostion = mpart.getDisposition();
if((dispostion != null) && (dispostion.equals(Part.ATTACHMENT) || dispostion.equals(Part.INLINE))){
filename = mpart.getFileName();
if(filename.toLowerCase().indexOf("gb2312") != -1){
filename = MimeUtility.decodeText(filename);
}
saveFile(filename,mpart.getInputStream());
}else if(mpart.isMimeType("multipart/*")){
saveAttchMent(mpart);
}else {
filename = mpart.getFileName();
if(filename != null &&(filename.toLowerCase().indexOf("gb2312") != -1)){
filename = MimeUtility.decodeText(filename);
}
saveFile(filename,mpart.getInputStream());
}
}
}else if(part.isMimeType("message/rfc822")){
saveAttchMent((Part) part.getContent());
}
}

/**
* 获得保存附件的地址
* @return
*/
public String getSaveAttchPath(){
return saveAttchPath;
}


public void setSaveAttchPath(String saveAttchPath){
this.saveAttchPath = saveAttchPath;
}

/**
* 设置日期格式
* @param dateformate
*/
public void setDateformath(String dateformate){
this.dateformate = dateformate;
}

/**
* 保存文件内容
* @param filename
* @param inputStream
* @throws IOException
*/
public void saveFile(String filename,InputStream inputStream) throws IOException{
String osname = System.getProperty("os.name");
String storedir = getSaveAttchPath();
String sepatror = "";
if(osname == null){
osname = "";
}



if(osname.toLowerCase().indexOf("win") != -1){
sepatror = "//";
if(storedir == null || "".equals(storedir)){
storedir = "d://temp";
}
}else{
sepatror = "/";
storedir = "/temp";
}

File storefile = new File(storedir + sepatror + filename);
System.out.println("storefile's path : " + storefile.toString());

BufferedOutputStream bos = null;
BufferedInputStream bis = null;

try {
bos = new BufferedOutputStream(new FileOutputStream(storefile));
bis = new BufferedInputStream(inputStream);
int c;
while((c = bis.read())!= -1){
bos.write(c);
bos.flush();
}
} catch (FileNotFoundException e) {
// TODO: handle exception
e.printStackTrace();
}catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}finally{
bos.close();
bis.close();
}
}


public void recive(Part part,int i) throws MessagingException,IOException{
System.out.println("-----------------------START------------------");
System.out.println("Message" + i + "subject:" + getSubject());
System.out.println("Message" + i + "from:" + getForm());
System.out.println("Message" + i + "isNew:" + isNew());
boolean flag = isContainAttch(part);
System.out.println("Message" + i + "isContainAttch:" + flag);
System.out.println("Message" + i + "replySign:" + getReplySign());
getMailContent(part);
System.out.println("Message" + i + "content:" + getBodyText());
setSaveAttchPath("c://temp//" + i);
if(flag){
saveAttchMent(part);
}
System.out.println("------------------------END---------------------");
}




public static void main(String[] args) throws MessagingException,IOException{
Properties props = new Properties();
props.setProperty("mail.smtp.host", "smtp.126.com");
props.setProperty("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, null);
URLName urlname = new URLName("pop3","pop.qq.com",110,null,"870206364","kingsoft");

Store store = session.getStore(urlname);
store.connect();
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message msgs[] = folder.getMessages();
int count = msgs.length;
System.out.println("Message Count:" + count);
ReciveMail rm = null;
for (int i = 0; i < count; i++) {
rm = new ReciveMail((MimeMessage)msgs[i]);
rm.recive(msgs[i], i);
}
}

}

在Main方法中测试报错下面是错误信息 ,还有就是我红色标出来的部分不是太理解,都是在网上上的代码 希望懂的人帮忙解决一下:
Exception in thread "main" javax.mail.AuthenticationFailedException: µÇ¼ʧ°Ü£¬ÃÜÂë´íÎó£¬login failed
at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:146)
at javax.mail.Service.connect(Service.java:275)
at javax.mail.Service.connect(Service.java:156)
at javax.mail.Service.connect(Service.java:105)
at com.helian.ReciveMail.main(ReciveMail.java:389)


[解决办法]
帐号用870206364@qq.com试试

读书人网 >J2EE开发

热点推荐