Class AbstractMailReceiver
java.lang.Object
org.springframework.integration.context.IntegrationObjectSupport
org.springframework.integration.mail.AbstractMailReceiver
- All Implemented Interfaces:
org.springframework.beans.factory.Aware,org.springframework.beans.factory.BeanFactoryAware,org.springframework.beans.factory.BeanNameAware,org.springframework.beans.factory.DisposableBean,org.springframework.beans.factory.InitializingBean,org.springframework.context.ApplicationContextAware,org.springframework.integration.context.ExpressionCapable,MailReceiver,org.springframework.integration.support.context.NamedComponent
- Direct Known Subclasses:
ImapMailReceiver,Pop3MailReceiver
public abstract class AbstractMailReceiver extends org.springframework.integration.context.IntegrationObjectSupport implements MailReceiver, org.springframework.beans.factory.DisposableBean
Base class for
MailReceiver implementations.-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringDEFAULT_SI_USER_FLAGDefault user flag for marking messages as seen by this receiver: "spring-integration-mail-adapter". -
Constructor Summary
Constructors Constructor Description AbstractMailReceiver()AbstractMailReceiver(java.lang.String url)AbstractMailReceiver(javax.mail.URLName urlName) -
Method Summary
Modifier and Type Method Description protected voidcloseFolder()protected voiddeleteMessages(javax.mail.Message[] messages)Deletes the given messages from this receiver's folder.voiddestroy()protected voidfetchMessages(javax.mail.Message[] messages)Fetches the specified messages from this receiver's folder.protected javax.mail.FoldergetFolder()protected intgetFolderOpenMode()protected java.util.PropertiesgetJavaMailProperties()protected java.lang.StringgetUserFlag()protected voidonInit()protected voidopenFolder()java.lang.Object[]receive()protected abstract javax.mail.Message[]searchForNewMessages()Subclasses must implement this method to return new mail messages.protected voidsetAdditionalFlags(javax.mail.Message message)Optional method allowing you to set additional flags.voidsetAutoCloseFolder(boolean autoCloseFolder)Configure abooleanflag to close the folder automatically after a fetch (default) or populate an additionalIntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCEmessage header instead.voidsetEmbeddedPartsAsBytes(boolean embeddedPartsAsBytes)When a header mapper is provided determine whether an embeddedPart(e.gMessageorMultipartcontent is rendered as a byte[] in the payload.voidsetHeaderMapper(org.springframework.integration.mapping.HeaderMapper<javax.mail.internet.MimeMessage> headerMapper)Set the header mapper; if a header mapper is not provided, the message payload is aMimeMessage, when provided, the headers are mapped and the payload is theMimeMessagecontent.voidsetJavaMailAuthenticator(javax.mail.Authenticator javaMailAuthenticator)Optional, sets the Authenticator to be used to obtain a session.voidsetJavaMailProperties(java.util.Properties javaMailProperties)A newSessionwill be created with these properties (and the JavaMailAuthenticator if provided).voidsetMaxFetchSize(int maxFetchSize)Specify the maximum number of Messages to fetch per call toreceive().voidsetProtocol(java.lang.String protocol)voidsetSelectorExpression(org.springframework.expression.Expression selectorExpression)voidsetSession(javax.mail.Session session)Set theSession.voidsetShouldDeleteMessages(boolean shouldDeleteMessages)Specify whether mail messages should be deleted after retrieval.voidsetSimpleContent(boolean simpleContent)MimeMessage.getContent()returns just the email body.voidsetUserFlag(java.lang.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".protected booleanshouldDeleteMessages()Indicates whether the mail messages should be deleted after being received.java.lang.StringtoString()Methods inherited from class org.springframework.integration.context.IntegrationObjectSupport
afterPropertiesSet, extractTypeIfPossible, generateId, getApplicationContext, getApplicationContextId, getBeanDescription, getBeanFactory, getBeanName, getChannelResolver, getComponentName, getComponentType, getConversionService, getExpression, getIntegrationProperties, getIntegrationProperty, getMessageBuilderFactory, getTaskScheduler, isInitialized, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, setConversionService, setMessageBuilderFactory, setPrimaryExpression, setTaskScheduler
-
Field Details
-
DEFAULT_SI_USER_FLAG
public static final java.lang.String DEFAULT_SI_USER_FLAGDefault user flag for marking messages as seen by this receiver: "spring-integration-mail-adapter".- See Also:
- Constant Field Values
-
-
Constructor Details
-
AbstractMailReceiver
public AbstractMailReceiver() -
AbstractMailReceiver
public AbstractMailReceiver(javax.mail.URLName urlName) -
AbstractMailReceiver
public AbstractMailReceiver(java.lang.String url)
-
-
Method Details
-
setSelectorExpression
public void setSelectorExpression(org.springframework.expression.Expression selectorExpression) -
setProtocol
public void setProtocol(java.lang.String protocol) -
setSession
public void setSession(javax.mail.Session session)Set theSession. Otherwise, the Session will be created by invocation ofSession.getInstance(Properties)orSession.getInstance(Properties, Authenticator).- Parameters:
session- The session.- See Also:
setJavaMailProperties(Properties),setJavaMailAuthenticator(Authenticator)
-
setJavaMailProperties
public void setJavaMailProperties(java.util.Properties javaMailProperties)A newSessionwill be created with these properties (and the JavaMailAuthenticator if provided). Use either this method orsetSession(javax.mail.Session), but not both.- Parameters:
javaMailProperties- The javamail properties.- See Also:
setJavaMailAuthenticator(Authenticator),setSession(Session)
-
getJavaMailProperties
protected java.util.Properties getJavaMailProperties() -
setJavaMailAuthenticator
public void setJavaMailAuthenticator(javax.mail.Authenticator javaMailAuthenticator)Optional, sets the Authenticator to be used to obtain a session. This will not be used ifsetSession(javax.mail.Session)has been used to configure theSessiondirectly.- Parameters:
javaMailAuthenticator- The javamail authenticator.- See Also:
setSession(Session)
-
setMaxFetchSize
public void setMaxFetchSize(int maxFetchSize)Specify the maximum number of Messages to fetch per call toreceive().- 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 java.lang.String getUserFlag() -
setUserFlag
public void setUserFlag(java.lang.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(org.springframework.integration.mapping.HeaderMapper<javax.mail.internet.MimeMessage> headerMapper)Set the header mapper; if a header mapper is not provided, the message payload is aMimeMessage, when provided, the headers are mapped and the payload is theMimeMessagecontent.- Parameters:
headerMapper- the header mapper.- Since:
- 4.3
- See Also:
setEmbeddedPartsAsBytes(boolean)
-
setEmbeddedPartsAsBytes
public void setEmbeddedPartsAsBytes(boolean embeddedPartsAsBytes)When a header mapper is provided determine whether an embeddedPart(e.gMessageorMultipartcontent is rendered as a byte[] in the payload. Otherwise, leave as aPart. 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:
setHeaderMapper(HeaderMapper)
-
setSimpleContent
public void setSimpleContent(boolean simpleContent)MimeMessage.getContent()returns just the email body.foo
Some subclasses, such asIMAPMessagereturn 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 theMimeMessageimplementation 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 underlyingMimeMessage.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 abooleanflag to close the folder automatically after a fetch (default) or populate an additionalIntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCEmessage header instead. It is the downstream flow's responsibility to obtain this header and call itsclose()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)andsetHeaderMapper(HeaderMapper)options are not affected by this flag.- Parameters:
autoCloseFolder-falsedo not close the folder automatically after a fetch.- Since:
- 5.2
-
getFolder
protected javax.mail.Folder getFolder() -
getFolderOpenMode
protected int getFolderOpenMode() -
searchForNewMessages
protected abstract javax.mail.Message[] searchForNewMessages() throws javax.mail.MessagingExceptionSubclasses must implement this method to return new mail messages.- Returns:
- An array of messages.
- Throws:
javax.mail.MessagingException- Any MessagingException.
-
openFolder
protected void openFolder() throws javax.mail.MessagingException- Throws:
javax.mail.MessagingException
-
receive
public java.lang.Object[] receive() throws javax.mail.MessagingException- Specified by:
receivein interfaceMailReceiver- Throws:
javax.mail.MessagingException
-
closeFolder
protected void closeFolder() -
fetchMessages
protected void fetchMessages(javax.mail.Message[] messages) throws javax.mail.MessagingExceptionFetches the specified messages from this receiver's folder. Default implementationfetcheseveryFetchProfile.Item.- Parameters:
messages- the messages to fetch- Throws:
javax.mail.MessagingException- in case of JavaMail errors
-
deleteMessages
protected void deleteMessages(javax.mail.Message[] messages) throws javax.mail.MessagingExceptionDeletes the given messages from this receiver's folder.- Parameters:
messages- the messages to delete- Throws:
javax.mail.MessagingException- in case of JavaMail errors
-
setAdditionalFlags
protected void setAdditionalFlags(javax.mail.Message message) throws javax.mail.MessagingExceptionOptional method allowing you to set additional flags. Currently only implemented in IMapMailReceiver.- Parameters:
message- The message.- Throws:
javax.mail.MessagingException- A MessagingException.
-
destroy
public void destroy()- Specified by:
destroyin interfaceorg.springframework.beans.factory.DisposableBean
-
onInit
protected void onInit()- Overrides:
onInitin classorg.springframework.integration.context.IntegrationObjectSupport
-
toString
public java.lang.String toString()- Overrides:
toStringin classorg.springframework.integration.context.IntegrationObjectSupport
-