in plugins/misc/mail/src/main/java/org/apache/hop/mail/workflow/actions/getpop/ActionGetPOP.java [738:1137]
void fetchOneFolder(
boolean usePOP3,
String realIMAPFolder,
String realOutputFolder,
String targetAttachmentFolder,
String realMoveToIMAPFolder,
String realFilenamePattern,
int nbrmailtoretrieve,
SimpleDateFormat df)
throws HopException {
try {
// if it is not pop3 and we have non-default imap folder...
if (!usePOP3 && !Utils.isEmpty(realIMAPFolder)) {
if (connection != null) {
connection.openFolder(realIMAPFolder, true);
} else {
mailConn.openFolder(realIMAPFolder, true);
}
} else {
if (connection != null) {
connection.openFolder(true);
} else {
mailConn.openFolder(true);
}
}
if (connection != null) {
connection.retrieveMessages();
} else {
mailConn.retrieveMessages();
}
int messagesCount;
if (connection != null) {
messagesCount = connection.getMessagesCount();
} else {
messagesCount = mailConn.getMessagesCount();
}
if (isDetailed()) {
logDetailed(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.TotalMessagesFolder.Label",
"" + messagesCount,
(connection != null)
? Const.NVL(connection.getFolderName(), MailServerConnection.INBOX_FOLDER)
: Const.NVL(mailConn.getFolderName(), MailConnectionMeta.INBOX_FOLDER)));
}
messagesCount =
nbrmailtoretrieve > 0
? (nbrmailtoretrieve > messagesCount ? messagesCount : nbrmailtoretrieve)
: messagesCount;
if (messagesCount > 0) {
if (connection != null) {
switch (getActionType()) {
case MailServerConnection.ACTION_TYPE_DELETE:
if (nbrmailtoretrieve > 0) {
// We need to fetch all messages in order to retrieve
// only the first nbrmailtoretrieve ...
for (int i = 0; i < messagesCount && !parentWorkflow.isStopped(); i++) {
// Get next message
connection.fetchNext();
// Delete this message
connection.deleteMessage();
if (isDebug()) {
logDebug(BaseMessages.getString(PKG, CONST_MESSAGE_DELETED, "" + i));
}
}
} else {
// Delete messages
connection.deleteMessages(true);
if (isDebug()) {
logDebug(
BaseMessages.getString(
PKG, "ActionGetMailsFromPOP.MessagesDeleted", "" + messagesCount));
}
}
break;
case MailServerConnection.ACTION_TYPE_MOVE:
if (nbrmailtoretrieve > 0) {
// We need to fetch all messages in order to retrieve
// only the first nbrmailtoretrieve ...
for (int i = 0; i < messagesCount && !parentWorkflow.isStopped(); i++) {
// Get next message
connection.fetchNext();
// Move this message
connection.moveMessage();
if (isDebug()) {
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.MessageMoved",
"" + i,
realMoveToIMAPFolder));
}
}
} else {
// Move all messages
connection.moveMessages();
if (isDebug()) {
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.MessagesMoved",
"" + messagesCount,
realMoveToIMAPFolder));
}
}
break;
default:
// Get messages and save it in a local file
// also save attached files if needed
for (int i = 0; i < messagesCount && !parentWorkflow.isStopped(); i++) {
// Get next message
connection.fetchNext();
int messagenumber = connection.getMessage().getMessageNumber();
boolean okPOP3 = usePOP3 ? true : false;
boolean okIMAP = !usePOP3;
if (okPOP3 || okIMAP) {
// display some infos on the current message
//
if (isDebug() && connection.getMessage() != null) {
logDebug("--------------------------------------------------");
logDebug(
BaseMessages.getString(
PKG, "ActionGetMailsFromPOP.MessageNumber.Label", "" + messagenumber));
if (connection.getMessage().getReceivedDate() != null) {
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.ReceivedDate.Label",
df.format(connection.getMessage().getReceivedDate())));
}
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.ContentType.Label",
connection.getMessage().getContentType()));
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.EmailFrom.Label",
Const.NVL(connection.getMessage().getFrom()[0].toString(), "")));
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.EmailSubject.Label",
Const.NVL(connection.getMessage().getSubject(), "")));
}
if (isSaveMessage()) {
// get local message filename
String localfilenameMessage = replaceTokens(realFilenamePattern, i);
if (isDebug()) {
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.LocalFilename.Label",
localfilenameMessage));
}
// save message content in the file
connection.saveMessageContentToFile(localfilenameMessage, realOutputFolder);
// explicitly set message as read
connection.getMessage().setFlag(Flag.SEEN, true);
if (isDetailed()) {
logDetailed(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.MessageSaved.Label",
"" + messagenumber,
localfilenameMessage,
realOutputFolder));
}
}
// Do we need to save attached file?
if (isSaveAttachment()) {
connection.saveAttachedFiles(targetAttachmentFolder, attachementPattern);
}
// We successfully retrieved message
// do we need to make another action (delete, move)?
if (usePOP3) {
if (isDelete()) {
connection.deleteMessage();
if (isDebug()) {
logDebug(
BaseMessages.getString(PKG, CONST_MESSAGE_DELETED, "" + messagenumber));
}
}
} else {
switch (getAfterGetIMAP()) {
case MailServerConnection.AFTER_GET_IMAP_DELETE:
// Delete messages
connection.deleteMessage();
if (isDebug()) {
logDebug(
BaseMessages.getString(
PKG, CONST_MESSAGE_DELETED, "" + messagenumber));
}
break;
case MailServerConnection.AFTER_GET_IMAP_MOVE:
// Move messages
connection.moveMessage();
if (isDebug()) {
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.MessageMoved",
"" + messagenumber,
realMoveToIMAPFolder));
}
break;
default:
}
}
}
}
break;
}
} else {
switch (getActionType()) {
case MailConnectionMeta.ACTION_TYPE_DELETE:
if (nbrmailtoretrieve > 0) {
// We need to fetch all messages in order to retrieve
// only the first nbrmailtoretrieve ...
for (int i = 0; i < messagesCount && !parentWorkflow.isStopped(); i++) {
// Get next message
mailConn.fetchNext();
// Delete this message
mailConn.deleteMessage();
if (isDebug()) {
logDebug(BaseMessages.getString(PKG, CONST_MESSAGE_DELETED, "" + i));
}
}
} else {
// Delete messages
mailConn.deleteMessages(true);
if (isDebug()) {
logDebug(
BaseMessages.getString(
PKG, "ActionGetMailsFromPOP.MessagesDeleted", "" + messagesCount));
}
}
break;
case MailConnectionMeta.ACTION_TYPE_MOVE:
if (nbrmailtoretrieve > 0) {
// We need to fetch all messages in order to retrieve
// only the first nbrmailtoretrieve ...
for (int i = 0; i < messagesCount && !parentWorkflow.isStopped(); i++) {
// Get next message
mailConn.fetchNext();
// Move this message
mailConn.moveMessage();
if (isDebug()) {
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.MessageMoved",
"" + i,
realMoveToIMAPFolder));
}
}
} else {
// Move all messages
mailConn.moveMessages();
if (isDebug()) {
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.MessagesMoved",
"" + messagesCount,
realMoveToIMAPFolder));
}
}
break;
default:
// Get messages and save it in a local file
// also save attached files if needed
for (int i = 0; i < messagesCount && !parentWorkflow.isStopped(); i++) {
// Get next message
mailConn.fetchNext();
int messagenumber = mailConn.getMessage().getMessageNumber();
boolean okPOP3 = usePOP3 ? true : false;
boolean okIMAP = !usePOP3;
if (okPOP3 || okIMAP) {
// display some infos on the current message
//
if (isDebug() && mailConn.getMessage() != null) {
logDebug("--------------------------------------------------");
logDebug(
BaseMessages.getString(
PKG, "ActionGetMailsFromPOP.MessageNumber.Label", "" + messagenumber));
if (mailConn.getMessage().getReceivedDate() != null) {
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.ReceivedDate.Label",
df.format(mailConn.getMessage().getReceivedDate())));
}
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.ContentType.Label",
mailConn.getMessage().getContentType()));
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.EmailFrom.Label",
Const.NVL(mailConn.getMessage().getFrom()[0].toString(), "")));
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.EmailSubject.Label",
Const.NVL(mailConn.getMessage().getSubject(), "")));
}
if (isSaveMessage()) {
// get local message filename
String localfilenameMessage = replaceTokens(realFilenamePattern, i);
if (isDebug()) {
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.LocalFilename.Label",
localfilenameMessage));
}
// save message content in the file
mailConn.saveMessageContentToFile(localfilenameMessage, realOutputFolder);
// explicitly set message as read
mailConn.getMessage().setFlag(Flag.SEEN, true);
if (isDetailed()) {
logDetailed(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.MessageSaved.Label",
"" + messagenumber,
localfilenameMessage,
realOutputFolder));
}
}
// Do we need to save attached file?
if (isSaveAttachment()) {
mailConn.saveAttachedFiles(targetAttachmentFolder, attachementPattern);
}
// We successfully retrieved message
// do we need to make another action (delete, move)?
if (usePOP3) {
if (isDelete()) {
mailConn.deleteMessage();
if (isDebug()) {
logDebug(
BaseMessages.getString(PKG, CONST_MESSAGE_DELETED, "" + messagenumber));
}
}
} else {
switch (getAfterGetIMAP()) {
case MailConnectionMeta.AFTER_GET_IMAP_DELETE:
// Delete messages
mailConn.deleteMessage();
if (isDebug()) {
logDebug(
BaseMessages.getString(
PKG, CONST_MESSAGE_DELETED, "" + messagenumber));
}
break;
case MailConnectionMeta.AFTER_GET_IMAP_MOVE:
// Move messages
mailConn.moveMessage();
if (isDebug()) {
logDebug(
BaseMessages.getString(
PKG,
"ActionGetMailsFromPOP.MessageMoved",
"" + messagenumber,
realMoveToIMAPFolder));
}
break;
default:
}
}
}
}
break;
}
}
}
} catch (Exception e) {
throw new HopException(e);
}
}