import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import com.sun.mail.pop3.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
import javax.mail.Flags.Flag;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import com.sun.mail.imap.*;
import com.sun.mail.imap.IMAPMessage;
import com.sun.mail.imap.IMAPFolder;
import com.sun.mail.imap.protocol.IMAPProtocol;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.util.ObjectUtils;
public static void DuReceiveEmailImap(String pop3Host,String port,String storeType, String user, String password)throws MessagingException, IOException
{
Properties props = new Properties();
props.put("mail.store.protocol", storeType);
props.put("mail.pop3.starttls.enable", "false");
props.put("mail.imap.host",pop3Host );
props.put("mail.imap.port", port);
Session session =Session.getDefaultInstance(props,null);
Store store = session.getStore("imap");
store.connect(pop3Host,user, password);
Folder folder = store.getFolder("Inbox");
if (folder instanceof IMAPFolder) {
IMAPFolder imapFolder = (IMAPFolder)folder;
imapFolder.doCommand(new IMAPFolder.ProtocolCommand()
{
public Object doCommand(IMAPProtocol p) throws com.sun.mail.iap.ProtocolException {
p.id("FUTONG");
return null;
}
});
}
if(folder != null) {
folder.open(Folder.READ_WRITE);
}
Message[] messages =getWEMessage(pop3Host,user,password,storeType);
String str = new String(("收件箱中共" + Integer.toString(messages.length) + "封邮件!").getBytes(),"utf-8");
System.out.println("收件箱中共" + Integer.toString(messages.length) + "封邮件!");
String str1="收件箱中共" + Integer.toString(folder.getUnreadMessageCount()) + "封未读邮件!";
System.out.println(str1);
System.out.println("收件箱中共" + Integer.toString(folder.getNewMessageCount()) + "封新邮件!");
System.out.println("收件箱中共" + Integer.toString(folder.getDeletedMessageCount()) + "封已删除邮件!");
System.out.println("------------------------开始解析邮件----------------------------------");
DuMailHelper helper=new DuMailHelper();
for (Message message : messages) {
IMAPMessage msg = (IMAPMessage) message;
String subject = MimeUtility.decodeText(msg.getSubject());
System.out.println("[" + subject + "]未读,是否需要阅读此邮件(yes/no)?");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String answer = reader.readLine();
if ("yes".equalsIgnoreCase(answer)) {
parseImapMessage(msg);
msg.setFlag(Flag.SEEN, true);
}
}
folder.close(false);
store.close();
}
public static Message[] getWEMessage(String host, String username, String password, String protocol) throws MessagingException {
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", protocol);
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore(protocol);
store.connect(host, username, password);
Folder folder = store.getFolder("INBOX");
if (folder instanceof IMAPFolder) {
IMAPFolder imapFolder = (IMAPFolder)folder;
imapFolder.doCommand(new IMAPFolder.ProtocolCommand() {
public Object doCommand(IMAPProtocol p) throws com.sun.mail.iap.ProtocolException {
p.id("FUTONG");
return null;
}
});
}
if(folder != null) {
folder.open(Folder.READ_WRITE);
}
return folder.getMessages();
}
public static void parseImapMessage(IMAPMessage... 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("主题: " + DuMailHelper.getSubject(msg));
System.out.println("发件人: " + DuMailHelper.getFrom(msg));
System.out.println("收件人:" + DuMailHelper.getReceiveAddress(msg, Message.RecipientType.TO));
System.out.println("发送时间:" + DuMailHelper.getSentDate(msg, null));
System.out.println("是否已读:" + DuMailHelper.isSeen(msg));
System.out.println("邮件优先级:" + DuMailHelper.getPriority(msg));
System.out.println("是否需要回执:" + DuMailHelper.isReplySign(msg));
System.out.println("邮件大小:" + msg.getSize() * 1024 + "kb");
boolean isContainerAttachment = DuMailHelper.isContainAttachment(msg);
System.out.println("是否包含附件:" + isContainerAttachment);
if (isContainerAttachment) {
String path = JavaxJavaMailClient.class.getClassLoader().getResource("").getPath();
String strFile = UUID.randomUUID().toString().replace("-", "").substring(0, 8);
DuMailHelper.saveAttachment(msg, path + strFile + "_");
}
StringBuffer content = new StringBuffer();
DuMailHelper.getMailTextContent(msg, content);
System.out.println("邮件正文:" + content);
System.out.println("-----------第" + msg.getMessageNumber() + "封邮件解析结束------------");
System.out.println();
}
}
public static void DuReceiveEmail(String pop3Host,String storeType, String user, String password){
Properties props = new Properties();
props.put("mail.pop3.host", pop3Host);
props.put("mail.pop3.port", "110");
props.put("mail.pop3.starttls.enable", "false");
props.put("mail.store.protocol", "pop3");
Session session = Session.getInstance(props);
try {
Store mailStore = session.getStore(storeType);
mailStore.connect(pop3Host, user, password);
Folder folder = mailStore.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message[] emailMessages = folder.getMessages();
System.out.println("Total Message - "
+ emailMessages.length);
for (int i = 0; i < emailMessages.length; i++) {
Message message = emailMessages[i];
Address[] toAddress =
message.getRecipients(Message.RecipientType.TO);
System.out.println();
System.out.println("Email " + (i+1) + "-");
System.out.println("Subject - " + message.getSubject());
System.out.println("From - " + message.getFrom()[0]);
System.out.println("To - ");
for(int j = 0; j < toAddress.length; j++){
System.out.println(toAddress[j].toString());
}
System.out.println("Text - " +
message.getContent().toString());
}
folder.close(false);
mailStore.close();
} catch (Exception e) {
e.printStackTrace();
System.err.println("Error in receiving email.");
}
}

