JavaMail指定アカウントメール受信

72182 ワード

JavaMailメールアドレス指定メールアドレス受信

  
    
/**
*
*
@author archie
*
*/
public class ReceiveMail {

/**
* Message Part , , 。
* , ( ),
* DataHandler 。 (folder) ,
* 。
*/
private MimeMessage msg = null ;

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

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

/**
*
*
@return
*
@throws MessagingException
*/
public String getFrom() 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
*/
public String getMailAddress(String type) throws MessagingException, UnsupportedEncodingException{
String mailaddr
= "" ;
String addrType
= type.toUpperCase();
InternetAddress[] address
= null ;

if (addrType.equals( " TO " ) || addrType.equals( " CC " ) || addrType.equals( " BCC " )){
if (addrType.equals( " TO " )){
address
= (InternetAddress[]) msg.getRecipients(Message.RecipientType.TO);
}
if (addrType.equals( " CC " )){
address
= (InternetAddress[]) msg.getRecipients(Message.RecipientType.CC);
}
if (addrType.equals( " BCC " )){
address
= (InternetAddress[]) msg.getRecipients(Message.RecipientType.BCC);
}

if (address != null ){
for ( int i = 0 ;i < address.length;i ++ ){
String mail
= address[i].getAddress();
if (mail == null ){
mail
= "" ;
}
else {
mail
= MimeUtility.decodeText(mail);
}
String personal
= address[i].getPersonal();
if (personal == null ){
personal
= "" ;
}
else {
personal
= MimeUtility.decodeText(personal);
}
String compositeto
= personal + " < " + mail + " > " ;
mailaddr
+= " , " + compositeto;
}
mailaddr
= mailaddr.substring( 1 );
}
}
else {
throw new RuntimeException( " Error email Type! " );
}
return mailaddr;
}

/**
*
*
@return
*
@throws UnsupportedEncodingException
*
@throws MessagingException
*/
public String getSubject() throws UnsupportedEncodingException, MessagingException{
String subject
= "" ;
/**
* subject javamail
*
*/
subject
= MimeUtility.decodeText(msg.getSubject());
if (subject == null ){
subject
= "" ;
}
return subject;
}

/**
*
*
@return
*
@throws MessagingException
*/
public String getSendDate() throws MessagingException{
Date sendDate
= msg.getSentDate(); //
SimpleDateFormat smd = new SimpleDateFormat(dateformate);
return smd.format(sendDate);
}

/**
*
*
@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 ;

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;
}
/**
*
*
@param saveAttchPath
*/
public void setSaveAttchPath(String saveAttchPath) {
this .saveAttchPath = saveAttchPath;
}
/**
*
*
@param dateformate
*/
public void setDateformate(String dateformate) {
this .dateformate = dateformate;
}
/**
*
*
@param filename
*
@param inputStream
*
@throws IOException
*/
private 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) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally {
bos.close();
bis.close();
}

}
/**
*
*
@param part
*
@param i
*
@throws MessagingException
*
@throws IOException
*/
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: " + getFrom());
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());


//
try {
if ( ! ( new File( " f://temp// " + i).isDirectory())) {
new File( " f://temp// " + i).mkdir();
}
}
catch (SecurityException e) {
// e.printStackTrace();
}
//
setSaveAttchPath( " f://temp// " + i);

if (flag){
saveAttchMent(part);
}
System.out.println(
" ------------------END----------------------- " + i);
}


/**
*
*
@param args
*
@throws MessagingException
*
@throws IOException
*/
public static void main(String[] args) throws MessagingException, IOException {

/**
*
* session
* 。
*/
Properties props
= new Properties();
props.setProperty(
" mail.smtp.host " , " smtp.163.com " );
props.setProperty(
" mail.smtp.auth " , " true " );
Session session
= Session.getDefaultInstance(props, null );
/**
* 1 , 2 ,
* pop3 ,
*/
URLName urlname
= new URLName( " pop3 " , " pop.163.com " , 110 , null , " [email protected]******* " , " 13938 " );

/**
* java.mail.Store , , ,
*/
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);
ReceiveMail rm
= null ;

System.out.println(
" " + count);

for ( int i = 0 ;i < count;i ++ ){
rm
= new ReceiveMail((MimeMessage) msgs[i]);
rm.recive(msgs[i],i);;
System.out.println(
" ============================= ======================== " );
}
//
try {
if (folder != null )
folder.close(
false );
if (store != null )
store.close();
}
catch (Exception ex) {
ex.printStackTrace();
}

}

}