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();
}
}
}