Rev 165 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
package pt.estgp.estgweb.services.email;
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.web.utils.DatesUtils;
import pt.estgp.estgweb.services.email.impl.DefaultPopEmail;
import pt.estgp.estgweb.services.email.impl.DefaultAddress;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import java.util.List;
import java.util.Properties;
import java.util.ArrayList;
import java.util.Date;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import org.apache.log4j.Logger;
import jomm.utils.DesUtils;
import jomm.utils.StringsUtils;
/**
* @author Jorge Machado
* @date 20/Mar/2008
* @time 18:31:00
* @see pt.estgp.estgweb.services.email
*/
public class ReadEmailService
implements IService
{
private static final 1.5.0/docs/api/java/lang/String.html">String POP_MAIL_DATE_KEY =
"POP_MAIL_DATE_KEY";
private static final 1.5.0/docs/api/java/lang/String.html">String POP_MAIL_MESSAGES_KEY =
"POP_MAIL_MESSAGES_KEY";
private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(ReadEmailService.
class);
public List
<IPopEmail
> run
(UserSession userSession
)
{
if(!((UserImpl
)userSession.
getUser()).
hasPopConfigured())
return null;
1.5.0/docs/api/java/util/Properties.html">Properties props =
new 1.5.0/docs/api/java/util/Properties.html">Properties();
5+0%2Fdocs%2Fapi+Date">Date d =
(5+0%2Fdocs%2Fapi+Date">Date) ((UserSessionImpl
)userSession
).
get(POP_MAIL_DATE_KEY
);
ArrayList
<IPopEmail
> oldMessages =
(ArrayList
<IPopEmail
>) ((UserSessionImpl
)userSession
).
get(POP_MAIL_MESSAGES_KEY
);
if(d
!=
null && oldMessages
!=
null)
{
if(1.5.0/docs/api/java/lang/System.html">System.
currentTimeMillis() - d.
getTime() < Globals.
POP_REFRESH_TIMEOUT_MILISECONDS)
{
return oldMessages
;
}
}
1.5.0/docs/api/java/lang/String.html">String host = userSession.
getUser().
getPop3server();
1.5.0/docs/api/java/lang/String.html">String username = userSession.
getUser().
getPop3username();
1.5.0/docs/api/java/lang/String.html">String password = DesUtils.
getInstance().
decrypt(userSession.
getUser().
getPop3password());
1.5.0/docs/api/java/lang/String.html">String provider =
"pop3";
if (host ==
null || username ==
null || password ==
null || host.
trim().
length() == 0 || password.
trim().
length() == 0 || username.
trim().
length() == 0
)
{
return null;
}
try
{
Session session = Session.
getDefaultInstance(props,
null);
Store store = session.
getStore(provider
);
store.
connect(host, username, password
);
Folder inbox = store.
getFolder("INBOX");
if (inbox ==
null)
{
logger.
warn("No INBOX for user:" + userSession.
getUser().
getId());
1.5.0/docs/api/java/lang/System.html">System.
exit(1
);
}
inbox.
open(Folder.
READ_ONLY);
List
<IPopEmail
> popMessages =
new ArrayList
<IPopEmail
>();
int count = inbox.
getMessageCount();
for (int i = count
; i
> count - Globals.
POP_MAX_MESSAGES && i
> 0; i--
)
{
Message message = inbox.
getMessage(i
);
DefaultPopEmail popEmail =
new DefaultPopEmail
();
1.5.0/docs/api/java/lang/String.html">String date = DatesUtils.
getStringFromDate(message.
getSentDate());
popEmail.
setDate(date
);
popEmail.
setSubject(message.
getSubject());
popEmail.
setSubjectFragment(StringsUtils.
getFragment(message.
getSubject(),Globals.
POP_FRAGMENT_TEXT_SIZE));
List
<IAddress
> addressLst =
new ArrayList
<IAddress
>();
for (Address a : message.
getFrom())
{
InternetAddress internetAddress =
(InternetAddress
) a
;
DefaultAddress address =
new DefaultAddress
();
address.
setEmail(internetAddress.
getAddress());
address.
setName(internetAddress.
getPersonal());
addressLst.
add(address
);
}
popEmail.
setFrom(addressLst
);
Part messagePart = message
;
5+0%2Fdocs%2Fapi+Object">Object content = messagePart.
getContent();
if (content
instanceof Multipart
)
{
messagePart =
((Multipart
) content
).
getBodyPart(0
);
}
1.5.0/docs/api/java/lang/String.html">String contentType = messagePart.
getContentType();
if (contentType.
startsWith("text/plain") || contentType.
startsWith("text/html"))
{
5+0%2Fdocs%2Fapi+InputStream">InputStream is = messagePart.
getInputStream();
1.5.0/docs/api/java/io/BufferedReader.html">BufferedReader reader =
new 1.5.0/docs/api/java/io/BufferedReader.html">BufferedReader(new 1.5.0/docs/api/java/io/InputStreamReader.html">InputStreamReader(is,
"ISO-8859-1"));
1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder text =
new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();
1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder textClean =
new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();
1.5.0/docs/api/java/lang/String.html">String thisLine = reader.
readLine();
while (thisLine
!=
null)
{
1.5.0/docs/api/java/lang/String.html">String thisLineTrim = thisLine.
trim();
if(thisLineTrim.
length() > 0
)
{
textClean.
append(thisLineTrim
);
}
text.
append("<br>").
append(thisLine.
trim());
thisLine = reader.
readLine();
}
popEmail.
setText(text.
toString());
popEmail.
setFragment(StringsUtils.
getFragment(textClean.
toString(),Globals.
POP_FRAGMENT_TEXT_SIZE));
}
popMessages.
add(popEmail
);
}
inbox.
close(false);
store.
close();
((UserSessionImpl
)userSession
).
put(POP_MAIL_DATE_KEY,
new 5+0%2Fdocs%2Fapi+Date">Date());
((UserSessionImpl
)userSession
).
put(POP_MAIL_MESSAGES_KEY,
((1.5.0/docs/api/java/util/ArrayList.html">ArrayList)popMessages
));
return popMessages
;
}
catch (MessagingException e
)
{
logger.
error(e, e
);
}
catch (1.5.0/docs/api/java/io/IOException.html">IOException e
)
{
logger.
error(e, e
);
}
return null;
}
}