Class GreenMail

All Implemented Interfaces:
GreenMailOperations

public class GreenMail extends ConfiguredGreenMail
Utility class that manages a greenmail server with support for multiple protocols
  • Field Details

  • Constructor Details

    • GreenMail

      public GreenMail()
      Creates a SMTP, SMTPS, POP3, POP3S, IMAP, and IMAPS server binding onto non-default ports. The ports numbers are defined in ServerSetupTest
    • GreenMail

      public GreenMail(ServerSetup config)
      Call this constructor if you want to run one of the email servers only
      Parameters:
      config - Server setup to use
    • GreenMail

      public GreenMail(ServerSetup[] config)
      Call this constructor if you want to run more than one of the email servers
      Parameters:
      config - Server setup to use
  • Method Details

    • start

      public void start()
      Description copied from interface: GreenMailOperations
      Start the GreenMail server
    • stop

      public void stop()
      Description copied from interface: GreenMailOperations
      Stop the GreenMail server. Clear all data (send messages, users, ...).
    • reset

      public void reset()
      Description copied from interface: GreenMailOperations
      Restart the GreenMail server. Clear all data (send messages, users, ...)
    • createServices

      protected Map<String,AbstractServer> createServices(ServerSetup[] config, Managers mgr)
      Create the required services according to the server setup
      Parameters:
      config - Service configuration
      Returns:
      Services map
    • getSmtp

      public SmtpServer getSmtp()
      Returns:
      SMTP server operated by this GreenMail instance or null if there is none
    • getImap

      public ImapServer getImap()
      Returns:
      SMTP server operated by this GreenMail instance or null if there is none
    • getPop3

      public Pop3Server getPop3()
      Returns:
      SMTP server operated by this GreenMail instance or null if there is none
    • getSmtps

      public SmtpServer getSmtps()
      Returns:
      SMTP server operated by this GreenMail instance or null if there is none
    • getImaps

      public ImapServer getImaps()
      Returns:
      SMTP server operated by this GreenMail instance or null if there is none
    • getPop3s

      public Pop3Server getPop3s()
      Returns:
      SMTP server operated by this GreenMail instance or null if there is none
    • getManagers

      public Managers getManagers()
      Returns:
      Greenmail protocol managers
    • getUserManager

      public UserManager getUserManager()
      Returns:
      the user manager for
    • waitForIncomingEmail

      public boolean waitForIncomingEmail(long timeout, int emailCount)
      Description copied from interface: GreenMailOperations
      Use this method if you are sending email in a different thread from the one you're testing from. Block waits for an email to arrive in any mailbox for any user. Implementation Detail: No polling wait implementation
      Parameters:
      timeout - maximum time in ms to wait for emailCount of messages to arrive before giving up and returning false
      emailCount - waits for these many emails to arrive before returning
      Returns:
      Returns false if timeout period was reached, otherwise true.
    • waitForIncomingEmail

      public boolean waitForIncomingEmail(int emailCount)
      Description copied from interface: GreenMailOperations
      Does the same thing as GreenMailOperations.waitForIncomingEmail(long, int) but with a default timeout of 5000ms
      Parameters:
      emailCount - waits for these many emails to arrive before returning
      Returns:
      Returns false if timeout period was reached, otherwise true.
    • getReceivedMessages

      public jakarta.mail.internet.MimeMessage[] getReceivedMessages()
      Returns:
      Returns all messages in all folders for all users GreenMailUtil has a bunch of static helper methods to extract body text etc.
    • getReceivedMessagesForDomain

      public jakarta.mail.internet.MimeMessage[] getReceivedMessagesForDomain(String domain)
      Description copied from interface: GreenMailOperations
      Gets all messages containing given domain.

      Note: This operates on the raw messages ignoring the post-box user. A CC-ed email would therefore show up multiple times for each receiving user.

      Parameters:
      domain - the domain, such as 'icegreen.com' or 'some.example.com'
      Returns:
      Returns all received messages for given domain.
    • findReceivedMessages

      public Stream<jakarta.mail.internet.MimeMessage> findReceivedMessages(Predicate<GreenMailUser> userPredicate, Predicate<jakarta.mail.internet.MimeMessage> messagePredicate)
      Description copied from interface: GreenMailOperations
      Finds all messages matching the user account and message predicate.
      Parameters:
      userPredicate - matches user accounts
      messagePredicate - matches message
      Returns:
      a stream of matching messages, matching both predicates (logical AND)
    • setUser

      public GreenMailUser setUser(String login, String password)
      Description copied from interface: GreenMailOperations
      Sets the password for the account linked to email. If no account exits, one is automatically created when an email is received The automatically created account has the account login and password equal to the email address.
      Parameters:
      login - Login for which the password should be set. This is assumed to be the same as the email address.
      password - New password
      Returns:
      the user created
    • setUser

      public GreenMailUser setUser(String email, String login, String password)
      Description copied from interface: GreenMailOperations
      Sets the password for the account linked to email. If no account exits, one is automatically created when an email is received The automatically created account has the account login and password equal to the email address.
      Parameters:
      email - Email address for which the password should be set
      login - Login name for login. This may be different to the email address. E.g. the email address could be "info@localhost", the login could be "info".
      password - New password
      Returns:
      the user created
    • setQuotaSupported

      public void setQuotaSupported(boolean isEnabled)
      Description copied from interface: GreenMailOperations
      Toggles the IMAP quota support. Quotas are enabled by default.
      Parameters:
      isEnabled - true, if quotas should be supported.
    • setUsers

      public void setUsers(Properties users)
      Description copied from interface: GreenMailOperations
      Sets up accounts with password based on a properties map where the key is the email/login and the value the password
      Parameters:
      users - User/password map
    • withConfiguration

      public GreenMail withConfiguration(GreenMailConfiguration config)
      Description copied from interface: GreenMailOperations
      Configure GreenMail instance using the given configuration
      Specified by:
      withConfiguration in interface GreenMailOperations
      Overrides:
      withConfiguration in class ConfiguredGreenMail
      Parameters:
      config - Configuration to use
      Returns:
      self (for method chaining)
    • purgeEmailFromAllMailboxes

      public void purgeEmailFromAllMailboxes() throws FolderException
      Description copied from interface: GreenMailOperations
      Remove/purge all data from all mail stores (POP3/IMAP)
      Throws:
      FolderException - on error
    • isRunning

      public boolean isRunning()
      Description copied from interface: GreenMailOperations
      Checks if GreenMail is up and running.
      Returns:
      true if ready to serve.
    • loadEmails

      public GreenMailOperations loadEmails(Path sourceDirectory) throws IOException, FolderException
      Description copied from interface: GreenMailOperations
      Loads emails from given path.
      • Expected structure in provided path, containing EML (rfc0822) mail files

        Pattern:

        <EMAIL> / <FOLDER*> / <*.eml>

        Example:

            ├── bar@localhost (directory)
            │   └── INBOX (directory)
            │       └── test-5.eml (file)
            └── foo@localhost (directory)
                └── Drafts (directory)
                    └── draft.eml (file)
             
      • Creates user of given email if missing (by convention, with email as login and password)
      • Creates intermediate mail folder if missing
      Parameters:
      sourceDirectory - base path with email structure
      Throws:
      IOException - on IO error
      FolderException - if e.g. fails to create intermediate folder