Contact Us 1-800-596-4880

POP3 Transport Reference

Mule Runtime Engine versions 3.5, 3.6, and 3.7 reached End of Life on or before January 25, 2020. For more information, contact your Customer Success Manager to determine how you can migrate to the latest Mule version.

The POP3 transport can be used for receiving messages from POP3 inboxes. The POP3S transport connects to POP3 mailboxes using the javax.mail API.

Warning

POP3 polling may fail if geronimo-mail is in the CLASSSPATH. For information on this problem, consult MULE-4875.

TLS/SSL connections are made on behalf of an entity, which can be anonymous or identified by a certificate. The key store provides the certificates and associated private keys necessary for identifying the entity making the connection. Additionally, connections are made to trusted systems. The public certificates of trusted systems are stored in a trust store, which is used to verify that the connection made to a remote system matches the expected identity.

Transport Info

Feature Value Description

Transport

POP3 and POP3S

The name/protocol of the transport

Doc

Links to the JavaDoc and SchemaDoc for the transport

Inbound

check

Whether the transport can receive inbound events and can be used for an inbound endpoint.

Outbound

error

Whether the transport can produce outbound events and be used with an outbound endpoint.

Request

check

Whether this endpoint can be queried directly with a request call (via MuleClient or the EventContext)

Transactions

error

Whether transactions are supported by the transport. Transports that support transactions can be configured in either local or distributed two-phase commit (XA) transaction.

Streaming

error

Whether this transport can process messages that come in on an input stream. This allows for very efficient processing of large data. For more information, see Streaming.

Retries

error

Whether this transport supports retry policies. Note that all transports can be configured with Retry policies, but only the ones marked here are officially supported by MuleSoft.

MEPs

one-way

Message Exchange Patterns supported by this transport.

Default MEP

one-way

The default MEP for endpoints that use this transport that do not explicitly configure a MEP.

Maven Artifact

org.mule.transport:mule-transport-pop3

The group name a artifact name for this transport in Maven

Namespace and Syntax

XML namespace:

xmlns:pop3 "http://www.mulesoft.org/schema/mule/pop3"
xmlns:pop3s "http://www.mulesoft.org/schema/mule/pop3s"

XML Schema location:

http://www.mulesoft.org/schema/mule/pop3 http://www.mulesoft.org/schema/mule/pop3/current/mule-pop3.xsd
http://www.mulesoft.org/schema/mule/pop3s http://www.mulesoft.org/schema/mule/pop3s/current/mule-pop3s.xsd

Connector syntax:

<pop3:connector name="pop3Connector" backupEnabled="true" backupFolder="backup" checkFrequency="90000"
                deleteReadMessages="false" mailboxFolder="INBOX" moveToFolder="PROCESSED"/>
<pop3s:connector name="pop3sConnector" backupEnabled="true" backupFolder="backup" checkFrequency="90000"
                 deleteReadMessages="false" mailboxFolder="INBOX" moveToFolder="PROCESSED"/>
  <pop3s:tls-client path="clientKeystore" storePassword="mulepassword" />
  <pop3s:tls-trust-store path="greenmail-truststore" storePassword="password" />
</pop3s:connector>

Endpoint syntax:

You can define your endpoints 2 different ways:

  1. Prefixed endpoint:

    <pop3:inbound-endpoint user="bob" password="password" host="localhost" port="65433"/>
    <pop3s:inbound-endpoint user="bob" password="password" host="localhost" port="65433"/>
  2. Non-prefixed URI:

    <inbound-endpoint address="pop3://bob:password@localhost:65433"/>
    <inbound-endpoint address="pop3s://bob:password@localhost:65433"/>

See the sections below for more information.

Features

  • Simple to configure email access on inbound endpoints: including authentication information and check frequency.

  • Automate the handling of email attachments.

  • Automatically back up messages to a specified folder.

  • Automatically delete messages that are read.

  • Easy to configure TLS security.

Usage

If you want to include the POP3 email transport in your configuration, these are the namespaces you need to define:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:spring="http://www.springframework.org/schema/beans"
       xmlns:pop3="http://www.mulesoft.org/schema/mule/pop3"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
       http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
       http://www.mulesoft.org/schema/mule/pop3 http://www.mulesoft.org/schema/mule/pop3/current/mule-pop3.xsd">
...

For the secure version, you would use the following:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:spring="http://www.springframework.org/schema/beans"
       xmlns:pop3s="http://www.mulesoft.org/schema/mule/pop3s"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
       http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
       http://www.mulesoft.org/schema/mule/pop3s http://www.mulesoft.org/schema/mule/pop3s/current/mule-pop3s.xsd">

Then you need to configure your connector and endpoints as described below.

Configuration Example

Say you had a business and wanted to take orders through email attachments. After you receive the email, you want to save the order attachments so they could be picked up by your order fulfillment process. Here is the flow-based version:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:spring="http://www.springframework.org/schema/beans"
       xmlns:pop3="http://www.mulesoft.org/schema/mule/pop3"
       xmlns:vm="http://www.mulesoft.org/schema/mule/vm"
       xmlns:file="http://www.mulesoft.org/schema/mule/file"
       xmlns:email="http://www.mulesoft.org/schema/mule/email"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
       http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
       http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
       http://www.mulesoft.org/schema/mule/pop3 http://www.mulesoft.org/schema/mule/pop3/current/mule-pop3.xsd
       http://www.mulesoft.org/schema/mule/email http://www.mulesoft.org/schema/mule/email/current/mule-email.xsd
       http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd">

    <pop3:connector name="pop3Connector"  />

    <expression-transformer name="returnAttachments">
        <return-argument evaluator="attachments-list" expression="*" optional="false"/>  ❶
    </expression-transformer>

    <file:connector name="fileName">
        <file:expression-filename-parser/>
    </file:connector>

    <flow name="incoming-orders">
        <pop3:inbound-endpoint user="bob" password="password" host="mailServer" port="110" transformer-refs="returnAttachments"/> ❷
        <collection-splitter/> ❸
        <file:outbound-endpoint path="./received" outputPattern="#[function:datestamp].dat"> ❹
            <expression-transformer>
                <return-argument expression="payload.inputStream" evaluator="groovy" /> ❺
            </expression-transformer>
        </file:outbound-endpoint>
    </flow>
</mule>

The built-in transformer is declared on ❶ and gets the list of email attachments. This transformer is then applied to the pop3 inbound endpoint defined at ❷. Then we define a list list-message-splitter-router on ❸ which iterates through all of the email attachments. Next we define a file outbound endpoint which writes the attachment to the './received' directory with a datestamp as the file name on ❹. ❺ defines a simple groovy expression which gets the inputStream of the attachment to write the file.

Here is the secure version:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:spring="http://www.springframework.org/schema/beans"
       xmlns:pop3="http://www.mulesoft.org/schema/mule/pop3"
       xmlns:vm="http://www.mulesoft.org/schema/mule/vm"
       xmlns:file="http://www.mulesoft.org/schema/mule/file"
       xmlns:email="http://www.mulesoft.org/schema/mule/email"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
       http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
       http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
       http://www.mulesoft.org/schema/mule/pop3 http://www.mulesoft.org/schema/mule/pop3/current/mule-pop3.xsd
       http://www.mulesoft.org/schema/mule/email http://www.mulesoft.org/schema/mule/email/current/mule-email.xsd
       http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd">

    <pop3:connector name="pop3Connector"  />

<pop3s:connector name="POP3" validateConnections="true" doc:name="POP3">
        <pop3s:tls-client path="clientKeystore" storePassword="mulepassword"/>
        <pop3s:tls-trust-store path="greenmail-truststore" storePassword="password"/>
    </pop3s:connector>

    <expression-transformer name="returnAttachments">
        <return-argument evaluator="attachments-list" expression="*" optional="false"/>  ❶
    </expression-transformer>

    <file:connector name="fileName">
        <file:expression-filename-parser/>
    </file:connector>

    <flow name="incoming-orders">
        <pop3:inbound-endpoint user="bob" password="password" host="mailServer" port="110" transformer-refs="returnAttachments"
           connector-ref="POP3"/> ❷
        <collection-splitter/> ❸
        <file:outbound-endpoint path="./received" outputPattern="#[function:datestamp].dat"> ❹
            <expression-transformer>
                <return-argument expression="payload.inputStream" evaluator="groovy" /> ❺
            </expression-transformer>
        </file:outbound-endpoint>
    </flow>
</mule>

The pop3s connector has tls client and server keystore information as defined on ❶. The built-in transformer is declared on ❷ and gets the list of email attachments. This transformer is then applied to the inbound endpoint on ❸. Then we define a list list-message-splitter-router on ❹ which iterates through all of the email attachments. Next we define a file outbound endpoint which writes the attachment to the './received' directory with a datestamp as the file name on ❺. ❻ defines a simple groovy expression which gets the inputStream of the attachment to write the file.

Configuration Reference

Connectors

The POP3 connector supports all the common connector attributes and properties and the following additional attributes:

Attribute Description

backupEnabled

Whether to save copies to the backup folder.

Default: False
Required: no

backupFolder

The folder where messages are moved after they have been read.

Default: none
Required: no

checkFrequency

Period (ms) between poll connections to the server.

Default: 60000
Required: yes

mailboxFolder

The remote folder to check for email.

Default: INBOX
Required: no

deleteReadMessages

Whether to delete messages from the server when they have been downloaded. If set to false, the messages are set to the defaultProcessMessageAction attribute value.

Default: true
Required: no

moveToFolder

The remote folder to move mail to once it has been read. It is recommended that 'deleteReadMessages' be set to false when this is used.

This is very useful when working with public email services such as GMail where marking messages for deletion doesn’t work. Instead set the @moveToFolder=GMail/Trash.

Default: none
Required: no

defaultProcessMessageAction

The action performed if the deleteReadMessages attribute is set to false. Valid values are: ANSWERED, DELETED, DRAFT, FLAGGED, RECENT, SEEN, USER, and NONE.

Default: SEEN
Required: no

For the secure version, the following elements are also required:

Element Description

tls-client

Configures the client key store with the following attributes:

  • path: The location, which resolves relative to the current classpath and file system, if possible, of the keystore that contains public certificates and private keys for identification

  • storePassword: The password used to protect the keystore

  • class: The type of keystore used

tls-trust-store

Configures the trust store. The attributes are:

  • path: The location, which resolves relative to the current classpath and file system, if possible, of the trust store that contains public certificates of trusted servers.

  • storePassword: The password used to protect the trust store.

For example:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:spring="http://www.springframework.org/schema/beans"
       xmlns:pop3="http://www.mulesoft.org/schema/mule/pop3"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
       http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
       http://www.mulesoft.org/schema/mule/pop3 http://www.mulesoft.org/schema/mule/pop3/current/mule-pop3.xsd">

     <pop3:connector name="pop3Connector" backupEnabled="true" backupFolder="newBackup" checkFrequency="1234"
                     mailboxFolder="newMailbox" deleteReadMessages="false"/>
...

Secure version:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:spring="http://www.springframework.org/schema/beans"
       xmlns:pop3s="http://www.mulesoft.org/schema/mule/pop3s"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
       http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
       http://www.mulesoft.org/schema/mule/pop3s http://www.mulesoft.org/schema/mule/pop3s/current/mule-pop3s.xsd">

<pop3s:connector name="pop3sConnector">
  <pop3s:tls-client path="clientKeystore" storePassword="mulepassword" />
  <pop3s:tls-trust-store path="greenmail-truststore" storePassword="password" />
</pop3s:connector>
<flow name="relay">
      <pop3s:inbound-endpoint user="bob" password="password" host="mailServer"/> ❷
...

Endpoints

POP3 and POP3S endpoints include details about connecting to a POP3 mailbox. You configure the endpoints just as you would with any other transport, with the following additional attributes:

  • user: the user name of the mailbox owner

  • password: the password of the user

  • host: the IP address of the POP3 server, such as www.mulesoft.com, localhost, or 127.0.0.1

  • port: the port number of the POP3 server. If not set for the POP3S connector, the default port is 995.

For example:

<pop3:inbound-endpoint user="bob" password="foo" host="pop.gmail.com" checkFrequency="3000" />

Or if using a POP3S connector:

<pop3s:inbound-endpoint user="bob" password="foo" host="pop.gmail.com" checkFrequency="3000" />

You can also define the endpoints using a URI syntax:

<pop3s:inbound-endpoint address="pop3://bob:foo@pop.gmail.com" checkFrequency="3000" />

This logs into the bob mailbox on pop.gmail.com using password foo (using the default port 995 for the POP3S endpoint).

For more information about transformers, see the Transformers section in the Email Transport Reference.

For more information about filters, see the Filters section in the Email Transport Reference.

Exchange Patterns / Features of the Transport

Schema Reference

You can view the full schema for POP3 email transport here. The secure version is here.

Java API Reference

Maven Module

The email transports are implemented by the mule-transport-email module. You can find the source for the email transport under transports/email.

If you are using maven to build your application, use the following dependency snippet to include the email transport in your project:

<dependency>
  <groupId>org.mule.transports</groupId>
  <artifactId>mule-transport-email</artifactId>
</dependency>

Limitations

For more information about the limitations, see the Limitations section in the Email Transport Reference.