Class AbstractMailReceiver

java.lang.Object
org.springframework.integration.context.IntegrationObjectSupport
org.springframework.integration.mail.AbstractMailReceiver
All Implemented Interfaces:
Aware, BeanFactoryAware, BeanNameAware, DisposableBean, InitializingBean, ApplicationContextAware, ExpressionCapable, MailReceiver, NamedComponent
Direct Known Subclasses:
ImapMailReceiver, Pop3MailReceiver

public abstract class AbstractMailReceiver extends IntegrationObjectSupport implements MailReceiver, DisposableBean
Base class for MailReceiver implementations.
Author:
Arjen Poutsma, Jonas Partner, Mark Fisher, Iwein Fuld, Oleg Zhurakousky, Gary Russell, Artem Bilan, Dominik Simmen, Yuxin Wang, Filip Hrisafov
  • Field Details

    • DEFAULT_SI_USER_FLAG

      public static final String DEFAULT_SI_USER_FLAG
      Default user flag for marking messages as seen by this receiver: "spring-integration-mail-adapter".
      See Also:
  • Constructor Details

    • AbstractMailReceiver

      public AbstractMailReceiver()
    • AbstractMailReceiver

      public AbstractMailReceiver(URLName urlName)
    • AbstractMailReceiver

      public AbstractMailReceiver(String url)
  • Method Details

    • setSelectorExpression

      public void setSelectorExpression(Expression selectorExpression)
    • setProtocol

      public void setProtocol(String protocol)
    • setSession

      public void setSession(Session session)
      Set the Session. Otherwise, the Session will be created by invocation of Session.getInstance(Properties) or Session.getInstance(Properties, Authenticator).
      Parameters:
      session - The session.
      See Also:
    • setJavaMailProperties

      public void setJavaMailProperties(Properties javaMailProperties)
      A new Session will be created with these properties (and the JavaMailAuthenticator if provided). Use either this method or setSession(jakarta.mail.Session), but not both.
      Parameters:
      javaMailProperties - The javamail properties.
      See Also:
    • getJavaMailProperties

      protected Properties getJavaMailProperties()
    • setJavaMailAuthenticator

      public void setJavaMailAuthenticator(Authenticator javaMailAuthenticator)
      Optional, sets the Authenticator to be used to obtain a session. This will not be used if setSession(jakarta.mail.Session) has been used to configure the Session directly.
      Parameters:
      javaMailAuthenticator - The javamail authenticator.
      See Also:
    • setMaxFetchSize

      public void setMaxFetchSize(int maxFetchSize)
      Specify the maximum number of Messages to fetch per call to receive().
      Parameters:
      maxFetchSize - The max fetch size.
    • setShouldDeleteMessages

      public void setShouldDeleteMessages(boolean shouldDeleteMessages)
      Specify whether mail messages should be deleted after retrieval.
      Parameters:
      shouldDeleteMessages - true to delete messages.
    • shouldDeleteMessages

      protected boolean shouldDeleteMessages()
      Indicates whether the mail messages should be deleted after being received.
      Returns:
      true when messages will be deleted.
    • getUserFlag

      protected String getUserFlag()
    • setUserFlag

      public void setUserFlag(String userFlag)
      Set the name of the flag to use to flag messages when the server does not support \Recent but supports user flags; default "spring-integration-mail-adapter".
      Parameters:
      userFlag - the flag.
      Since:
      4.2.2
    • setHeaderMapper

      public void setHeaderMapper(HeaderMapper<MimeMessage> headerMapper)
      Set the header mapper; if a header mapper is not provided, the message payload is a MimeMessage, when provided, the headers are mapped and the payload is the MimeMessage content.
      Parameters:
      headerMapper - the header mapper.
      Since:
      4.3
      See Also:
    • setEmbeddedPartsAsBytes

      public void setEmbeddedPartsAsBytes(boolean embeddedPartsAsBytes)
      When a header mapper is provided determine whether an embedded Part (e.g Message or Multipart content is rendered as a byte[] in the payload. Otherwise, leave as a Part. These objects are not suitable for downstream serialization. Default: true.

      This has no effect if there is no header mapper, in that case the payload is the MimeMessage.

      Parameters:
      embeddedPartsAsBytes - the embeddedPartsAsBytes to set.
      Since:
      4.3
      See Also:
    • setSimpleContent

      public void setSimpleContent(boolean simpleContent)
      MimeMessage.getContent() returns just the email body.
       foo
       
      Some subclasses, such as IMAPMessage return some headers with the body.
       To: foo@bar
       From: bar@baz
       Subject: Test Email
      
        foo
       
      Starting with version 5.0, messages emitted by mail receivers will render the content in the same way as the MimeMessage implementation returned by javamail. In versions 2.2 through 4.3, the content was always just the body, regardless of the underlying message type (unless a header mapper was provided, in which case the payload was rendered by the underlying MimeMessage.

      To revert to the previous behavior, set this flag to true. In addition, even if a header mapper is provided, the payload will just be the email body.

      Parameters:
      simpleContent - true to render simple content.
      Since:
      5.0
    • setAutoCloseFolder

      public void setAutoCloseFolder(boolean autoCloseFolder)
      Configure a boolean flag to close the folder automatically after a fetch (default) or populate an additional IntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCE message header instead. It is the downstream flow's responsibility to obtain this header and call its close() whenever it is necessary.

      Keeping the folder open is useful in cases where communication with the server is needed when parsing multipart content of the email with attachments.

      The setSimpleContent(boolean) and setHeaderMapper(HeaderMapper) options are not affected by this flag.

      Parameters:
      autoCloseFolder - false do not close the folder automatically after a fetch.
      Since:
      5.2
    • getFolder

      protected Folder getFolder()
    • getFolderOpenMode

      protected int getFolderOpenMode()
    • searchForNewMessages

      protected abstract Message[] searchForNewMessages() throws MessagingException
      Subclasses must implement this method to return new mail messages.
      Returns:
      An array of messages.
      Throws:
      MessagingException - Any MessagingException.
    • openFolder

      protected void openFolder() throws MessagingException
      Throws:
      MessagingException
    • receive

      public Object[] receive() throws MessagingException
      Specified by:
      receive in interface MailReceiver
      Throws:
      MessagingException
    • closeFolder

      protected void closeFolder()
    • fetchMessages

      protected void fetchMessages(Message[] messages) throws MessagingException
      Fetches the specified messages from this receiver's folder. Default implementation fetches every FetchProfile.Item.
      Parameters:
      messages - the messages to fetch
      Throws:
      MessagingException - in case of JavaMail errors
    • deleteMessages

      protected void deleteMessages(Message[] messages) throws MessagingException
      Deletes the given messages from this receiver's folder.
      Parameters:
      messages - the messages to delete
      Throws:
      MessagingException - in case of JavaMail errors
    • setAdditionalFlags

      protected void setAdditionalFlags(Message message) throws MessagingException
      Optional method allowing you to set additional flags. Currently only implemented in IMapMailReceiver.
      Parameters:
      message - The message.
      Throws:
      MessagingException - A MessagingException.
    • destroy

      public void destroy()
      Specified by:
      destroy in interface DisposableBean
    • onInit

      protected void onInit()
      Description copied from class: IntegrationObjectSupport
      Subclasses may implement this for initialization logic.
      Overrides:
      onInit in class IntegrationObjectSupport
    • toString

      public String toString()
      Overrides:
      toString in class IntegrationObjectSupport