From baa9aa69ce071a368954daa8a9d1b66a2ea3acc5 Mon Sep 17 00:00:00 2001 From: Mathias Vandaele Date: Mon, 26 Aug 2024 11:07:34 +0200 Subject: [PATCH] feat(email connector): first checkpoint on email connector 7 --- .../connector/email/core/JakartaExecutor.java | 91 ++++++++++++------- .../connector/email/protocols/Pop3.java | 8 +- .../protocols/actions/Pop3DeleteEmail.java | 8 ++ .../email/core/JakartaExecutorTest.java | 2 - 4 files changed, 71 insertions(+), 38 deletions(-) diff --git a/connectors/email/src/main/java/io/camunda/connector/email/core/JakartaExecutor.java b/connectors/email/src/main/java/io/camunda/connector/email/core/JakartaExecutor.java index 281f1b6507..e6de917c5a 100644 --- a/connectors/email/src/main/java/io/camunda/connector/email/core/JakartaExecutor.java +++ b/connectors/email/src/main/java/io/camunda/connector/email/core/JakartaExecutor.java @@ -39,32 +39,59 @@ public Object execute(EmailRequest emailRequest) { case ImapListEmails imapListEmails -> null; case ImapDeleteEmail imapDeleteEmail -> null; case ImapReadEmail imapReadEmail -> null; - case Pop3DeleteEmail pop3DeleteEmail -> null; + case Pop3DeleteEmail pop3DeleteEmail -> + pop3DeleteEmail(pop3DeleteEmail, authentication, session); case Pop3ListEmails pop3ListEmails -> pop3ListEmails(pop3ListEmails, authentication, session); case Pop3ReadEmail pop3ReadEmail -> pop3ReadEmail(pop3ReadEmail, authentication, session); }; } + private Object pop3DeleteEmail( + Pop3DeleteEmail pop3DeleteEmail, Authentication authentication, Session session) { + try { + try (Store store = session.getStore()) { + connectStore(store, authentication); + try (POP3Folder folder = (POP3Folder) store.getFolder("INBOX")) { + folder.open(Folder.READ_WRITE); + Message[] messages = folder.getMessages(); + for (Message message : messages) { + String uid = folder.getUID(message); + if (uid.equals(pop3DeleteEmail.getUidlDelete())) { + message.setFlag(Flags.Flag.DELETED, true); + } + } + } + } + throw new RuntimeException( + "No corresponding POP3 email found for uidl %s" + .formatted(pop3DeleteEmail.getUidlDelete())); + } catch (MessagingException e) { + throw new RuntimeException(e); + } + } + private Object pop3ReadEmail( Pop3ReadEmail pop3ReadEmail, Authentication authentication, Session session) { try { - Store store = session.getStore(); - connectStore(store, authentication); - POP3Folder folder = (POP3Folder) store.getFolder("INBOX"); - folder.open(Folder.READ_WRITE); - Message[] messages = folder.getMessages(); - for (Message message : messages) { - String uid = folder.getUID(message); - if (uid.equals(pop3ReadEmail.getUidlRead())) { - Email email = Email.createEmail(message); - if (pop3ReadEmail.isDeleteOnRead()) message.setFlag(Flags.Flag.DELETED, true); - return new Pop3ReadEmailResponse( - folder.getUID(message), - email.getFrom(), - email.getSubject(), - email.getSize(), - email.getBody().getBodyAsPlainText(), - email.getBody().getBodyAsHtml()); + try (Store store = session.getStore()) { + connectStore(store, authentication); + try (POP3Folder folder = (POP3Folder) store.getFolder("INBOX")) { + folder.open(Folder.READ_WRITE); + Message[] messages = folder.getMessages(); + for (Message message : messages) { + String uid = folder.getUID(message); + if (uid.equals(pop3ReadEmail.getUidlRead())) { + Email email = Email.createEmail(message); + if (pop3ReadEmail.isDeleteOnRead()) message.setFlag(Flags.Flag.DELETED, true); + return new Pop3ReadEmailResponse( + folder.getUID(message), + email.getFrom(), + email.getSubject(), + email.getSize(), + email.getBody().getBodyAsPlainText(), + email.getBody().getBodyAsHtml()); + } + } } } throw new RuntimeException( @@ -77,20 +104,22 @@ private Object pop3ReadEmail( private Object pop3ListEmails( Pop3ListEmails pop3ListEmails, Authentication authentication, Session session) { try { - Store store = session.getStore(); - connectStore(store, authentication); - POP3Folder folder = (POP3Folder) store.getFolder("INBOX"); - folder.open(Folder.READ_ONLY); - Message[] messages = folder.getMessages(); - List response = new ArrayList<>(); - for (Message message : messages) { - Email email = Email.createBodylessEmail(message); - Pop3ListEmailsResponse pop3ListEmailsResponse = - new Pop3ListEmailsResponse( - folder.getUID(message), email.getFrom(), email.getSubject(), email.getSize()); - response.add(pop3ListEmailsResponse); + try (Store store = session.getStore()) { + connectStore(store, authentication); + try (POP3Folder folder = (POP3Folder) store.getFolder("INBOX")) { + folder.open(Folder.READ_ONLY); + Message[] messages = folder.getMessages(); + List response = new ArrayList<>(); + for (Message message : messages) { + Email email = Email.createBodylessEmail(message); + Pop3ListEmailsResponse pop3ListEmailsResponse = + new Pop3ListEmailsResponse( + folder.getUID(message), email.getFrom(), email.getSubject(), email.getSize()); + response.add(pop3ListEmailsResponse); + } + return response; + } } - return response; } catch (MessagingException e) { throw new RuntimeException(e); } diff --git a/connectors/email/src/main/java/io/camunda/connector/email/protocols/Pop3.java b/connectors/email/src/main/java/io/camunda/connector/email/protocols/Pop3.java index 3a9062e1c3..03ed2ab3b3 100644 --- a/connectors/email/src/main/java/io/camunda/connector/email/protocols/Pop3.java +++ b/connectors/email/src/main/java/io/camunda/connector/email/protocols/Pop3.java @@ -8,10 +8,7 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; -import io.camunda.connector.email.protocols.actions.Action; -import io.camunda.connector.email.protocols.actions.Pop3Action; -import io.camunda.connector.email.protocols.actions.Pop3ListEmails; -import io.camunda.connector.email.protocols.actions.Pop3ReadEmail; +import io.camunda.connector.email.protocols.actions.*; import io.camunda.connector.email.protocols.config.Pop3Config; import io.camunda.connector.generator.java.annotation.NestedProperties; import io.camunda.connector.generator.java.annotation.TemplateSubType; @@ -27,7 +24,8 @@ public final class Pop3 implements Protocol { @JsonSubTypes( value = { @JsonSubTypes.Type(value = Pop3ListEmails.class, name = "listEmailsPop3"), - @JsonSubTypes.Type(value = Pop3ReadEmail.class, name = "readEmailPop3") + @JsonSubTypes.Type(value = Pop3ReadEmail.class, name = "readEmailPop3"), + @JsonSubTypes.Type(value = Pop3DeleteEmail.class, name = "deleteEmailPop3") }) @Valid @NotNull diff --git a/connectors/email/src/main/java/io/camunda/connector/email/protocols/actions/Pop3DeleteEmail.java b/connectors/email/src/main/java/io/camunda/connector/email/protocols/actions/Pop3DeleteEmail.java index 89424ae548..00edcff125 100644 --- a/connectors/email/src/main/java/io/camunda/connector/email/protocols/actions/Pop3DeleteEmail.java +++ b/connectors/email/src/main/java/io/camunda/connector/email/protocols/actions/Pop3DeleteEmail.java @@ -22,4 +22,12 @@ public final class Pop3DeleteEmail implements Pop3Action { binding = @TemplateProperty.PropertyBinding(name = "data.pop3Action.uidlDelete")) @NotNull String uidlDelete; + + public @NotNull String getUidlDelete() { + return uidlDelete; + } + + public void setUidlDelete(@NotNull String uidlDelete) { + this.uidlDelete = uidlDelete; + } } diff --git a/connectors/email/src/test/java/io/camunda/connector/email/core/JakartaExecutorTest.java b/connectors/email/src/test/java/io/camunda/connector/email/core/JakartaExecutorTest.java index b86c76a85d..2b6a7ca2d5 100644 --- a/connectors/email/src/test/java/io/camunda/connector/email/core/JakartaExecutorTest.java +++ b/connectors/email/src/test/java/io/camunda/connector/email/core/JakartaExecutorTest.java @@ -6,8 +6,6 @@ */ package io.camunda.connector.email.core; -import static org.junit.jupiter.api.Assertions.*; - import org.junit.jupiter.api.Test; class JakartaExecutorTest {