package bottom;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import mailPara.mailpara;
/**
* 使用POP3协议接收邮件
*/
public class newRecmail extends mailpara{
/*public static void main(String[] args) throws Exception {
receive();
}*/
/**
* 接收邮件
*/
public static void receive() throws Exception {
// 准备连接服务器的会话信息
Properties props = new Properties();
props.setProperty("mail.store.protocol", "pop3"); // 协议
props.setProperty("mail.pop3.port", "110"); // 端口
//props.setProperty("mail.pop3.host", "pop3.sina.com"); // pop3服务器
props.setProperty("mail.pop3.host", mailaccountinfo.getPop3());
// 创建Session实例对象
Session session = Session.getInstance(props);
Store store = session.getStore("pop3");
//store.connect("pop3.sina.com","lzy_mail_test@sina.com", "lzy123456");
store.connect(mailaccountinfo.getPop3(),mailaccountinfo.getAccount(), mailaccountinfo.getPassword());
// 获得收件箱
Folder folder = store.getFolder("INBOX");
/* Folder.READ_ONLY:只读权限
* Folder.READ_WRITE:可读可写(可以修改邮件的状态)
*/
folder.open(Folder.READ_WRITE); //打开收件箱
// 由于POP3协议无法获知邮件的状态,所以getUnreadMessageCount得到的是收件箱的邮件总数
System.out.println("未读邮件数: " + folder.getUnreadMessageCount());
// 由于POP3协议无法获知邮件的状态,所以下面得到的结果始终都是为0
System.out.println("删除邮件数: " + folder.getDeletedMessageCount());
System.out.println("新邮件: " + folder.getNewMessageCount());
// 获得收件箱中的邮件总数
System.out.println("邮件总数: " + folder.getMessageCount());
//设置邮件总数
mailaccountinfo.setMsgcount(folder.getMessageCount());
// 得到收件箱中的所有邮件,并解析
Message[] messages = folder.getMessages();
parseMessage(messages);
//释放资源
folder.close(true);
store.close();
}
/**
* 解析邮件
* @param messages 要解析的邮件列表
*/
public static void parseMessage(Message ...messages) throws MessagingException, IOException {
if (messages == null || messages.length < 1)
throw new MessagingException("未找到要解析的邮件!");
// 解析所有邮件
for (int i = 0, count = messages.length; i < count; i++) {
MimeMessage msg = (MimeMessage) messages[i];
System.out.println("------------------解析第" + msg.getMessageNumber() + "封邮件-------------------- ");
System.out.println("主题: " + getSubject(msg));
//设置邮件主题
mailaccountinfo.setSubject(getSubject(msg), i);
System.out.println("发件人: " + getFrom(msg));
//设置收件人地址
mailaccountinfo.setAddress(getFrom(msg), i);
System.out.println("收件人:" + getReceiveAddress(msg, null));
//设置发送时间
mailaccountinfo.setSentDate(getSentDate(msg, null), i);
System.out.println("发送时间:" + getSentDate(msg, null));
System.out.println("是否已读:" + isSeen(msg));
System.out.println("邮件优先级:" + getPriority(msg));
System.out.println("是否需要回执:" + isReplySign(msg));
System.out.println("邮件大小:" + msg.getSize() * 1024 + "kb");
boolean isContainerAttachment = isContainAttachment(msg);
System.out.println("是否包含附件:" + isContainerAttachment);
if (isContainerAttachment) {
saveAttachment(msg, System.getProperty("user.dir")+"/bin/"+msg.getSubject() + "_"); //保存附件
}
StringBuffer content = new StringBuffer(30);
getMailTextContent(msg, content);
System.out.println("邮件正文:" + (content.length() > 100 ? content.substring(0,100) + "..." : content));
System.out.println("------------------第" + msg.getMessageNumber() + "封邮件解析结束-------------------- ");
System.out.println();
//mailaccountinfo.setText((String) messages[i].getContent(), i);
Object o = msg.getContent();
if(o instanceof Multipart) {
Multipart multipart = (Multipart) o ;
for (int j = 0, n = multipart.getCount(); j < n; j++) {
//System.out.println("处理第" + j + "部分");
Part part = multipart.getBodyPart(j);
if (part.getDisposition() != null) {
String strFileNmae = MimeUtility.decodeText(part.getFileName()); //MimeUtility.decodeText解决附件名乱码问题
System.out.println("发现附件: " + MimeUtility.decodeText(part.getFileName()));
System.out.println("内容类型: " + MimeUtility.decodeText(part.getContentType()));
System.out.println("附件内容:" + part.getContent());
InputStream in = part.getInputStream();// 打开附件的输入流
// 读取附件字节并存储到文件中
java.io.FileOutputStream out = new FileOutputStream(strFileNmae);
int data;
while((data = in.read()) != -1) {
out.write(data);
}
in.close();
out.close();
}else {
System.out.println(part.getContentType());
/*if(part.getContentType().startsWith("text/plain")) {
System.out.println("文本内容:" + part.getContent());
account1.setText((String) part.getContent(), i);
} else {*/
//System.out.println("HTML内容:" + part.getContent());
if(part.getContentType().startsWith("text/html")) {
mailaccountinfo.setText((String) part.getContent(), i);
String PATH_html=System.getProperty("user.dir")+"/bin/";
String imagname=MimeUtility.decodeText(part.getContent().toString());
imagname=imagname.replace("cid:", System.getProperty("user.dir")+"/bin/");
imagname=imagname.replace("\" modifysize", ".jpg\" modifysize");
//imagname=imagname.replace("png", "png.jpg");
String name=mailaccountinfo.getSentDate()[i]+".html";
String fname=PATH_html+name;
File pathhtml = new File(fname);
OutputStreamWriter rdf = new OutputStreamWriter(new FileOutputStream(pathhtml),"UTF-8");
BufferedWriter writer=new BufferedWriter(rdf);
//Writer rdf=new FileWriter(pathhtml);
rdf.write(imagname);
rdf.close();
}
}
}//解包, 取出 MultiPart的各个部分, 每部分可能是邮件内容,
/*reMultipart(multipart);
if(part.getContentType().startsWith("text/plain")) {
//System.out.println("文本内容:" + part.getContent());
} else {
//System.out.println("HTML内容:" + part.getContent());
} */
} else if (o instanceof Part){
Part part = (Part) o;
评论0
最新资源