IMAP Command

Email is an essential tool for communication in today’s digital world, and it’s no surprise that email clients are a critical component of our daily work routine. The Internet Message Access Protocol (IMAP) is one such protocol that enables the email clients to access and manage the email messages on a remote server.

IMAP allows the users to view, organize, and manipulate their email messages without having to download them to their local devices. This feature makes IMAP a popular choice for users who access their email accounts from multiple devices or locations.

In this article, we’ll explore the IMAP command on Linux, its functionalities, and how it can be used to manage the email accounts from the command line.

Overview of IMAP Protocol and How It Works

The Internet Message Access Protocol (IMAP) retrieves the email messages from a mail server. Unlike other email protocols such as Post Office Protocol (POP), IMAP lets you view and manipulate your email messages without downloading them to your local devices.

This means that you can access their email from multiple devices and locations, and your messages are stored on the mail server rather than on the local device.

IMAP operates by connecting the email client to the mail server and allows the client to interact with the server to perform various actions such as viewing, deleting, or moving the messages. Besides, IMAP messages are organized in folders which you can easily create, rename, or delete.

This email protocol also supports the message flags which allow the users to mark the messages as read, unread, replied, or forwarded. It uses a set of standard commands and responses to communicate between the email client and the mail server.

These commands include retrieving a list of available mailboxes, selecting a mailbox, fetching a message, searching for messages based on specific criteria, and deleting or moving the messages. The server responds with status codes to indicate the success or failure of the requested action.

Differences Between IMAP and Other Email Protocols

While several email protocols are in use today, the two most common are IMAP and Post Office Protocol (POP). While both protocols serve the same general purpose of retrieving the email messages from a server, there are significant differences.

The significant differences include the following:

POP downloads the email messages to the client device, while IMAP allows the users to access the messages on the server without downloading them.

POP typically deletes the messages from the server once you download them to your system. On the other hand, IMAP stores the messages on the server and allows the users to access them from multiple devices.

POP stores the email folders locally on the client device, while IMAP stores them on the server, allowing the users to access and modify them from any device.

The choice of protocol depends on the user’s specific needs and requirements.

How to Install and Configure IMAP on a Linux System

To use the IMAP protocol on a Linux system, you must install an IMAP server software package such as Dovecot, Courier IMAP, or Cyrus IMAP. These packages provide server-side functionality to allow the email clients to connect and interact with the server using the IMAP protocol.

The specific installation and configuration steps will vary depending on the chosen IMAP server software package and the Linux distribution that is used. However, in general, the process involves the following steps:

Install the IMAP server software package using the distribution’s package manager. For example, you can install the Dovecot IMAP server package on Ubuntu using the following command:

sudo apt-get install dovecot-imapd.

Configure the IMAP server software package to work with the mail server software that is being used. This may involve specifying the settings such as the location of the mail storage directory, the authentication mechanism to use, and the SSL/TLS settings.

Start the IMAP server software package and ensure that it is running correctly.

Once the IMAP server software package is installed and configured, you can use any email client that supports the IMAP protocol to connect to the server and access your email messages.

Examples of Common IMAP Commands and Their Output

IMAP provides a variety of commands that can be used to interact with an email server and manage the email messages. Here are some of the most common IMAP commands and their usage:


This command authenticates a user with the email server.


LOGIN username password


a001 LOGIN kenhint secretpassword

a001 OK LOGIN Completed

The given LOGIN command is used to authenticate the user with the “kenhint” username and “secretpassword” password. The server responds with an “OK” message which indicates that the login was successful. The session is now authenticated, and the user can proceed with the other IMAP commands.


This IMAP utility lists the available mailboxes or folders on the server.


LIST [reference] [mailbox]


a002 LIST "" *

a002 OK LIST Completed

This utility lists all mailboxes or folders at the root level of the mailbox hierarchy.


This IMAP function selects a mailbox or folder on the server.


SELECT mailbox



* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)

* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.



* OK [UNSEEN 2] Message 2 is the first unseen message.

* OK [UIDVALIDITY 1605516907] UIDs valid

* OK [UIDNEXT 3] Predicted next UID


a003 OK [READ-WRITE] SELECT completed.

This command selects the INBOX mailbox and displays the information about it, including the number of messages it contains, the flags that are associated with it, and the predicted next UID.


The FETCH utility retrieves the email messages from the selected mailbox or folder.


FETCH message_set item_names




From: John Doe <>

Subject: Hello, World!


a004 OK FETCH completed.

This command fetches the headers of the first message in the selected mailbox including the “From” and “Subject” fields.


This function modifies the attributes of email messages such as their flags or labels.


STORE message_set item_names flags


a005 STORE 1 FLAGS (\Deleted)

* 1 FETCH (FLAGS (\Deleted))

a005 OK STORE completed.

The provided command flags the first message in the selected mailbox as deleted.


It searches for email messages that match a specific criterion.


SEARCH search_criteria


a006 SEARCH SUBJECT "meeting"

* SEARCH 2 3 5

a006 OK SEARCH completed

This command searches for messages in the selected mailbox with “meeting” in the subject line and returns a list of message IDs matching the criteria.


You can use this function to refer to email messages by their unique identifier (UID) instead of their sequence number.


UID command [arguments]






a007 OK UID FETCH completed

The given code snippet fetches the text body of the message with UID 3 in the selected mailbox.


You can use the IMAP EXPUNGE function to remove the messages that are marked for deletion from the mailbox permanently.




a008 STORE 1 FLAGS (\Deleted)

* 1 FETCH (FLAGS (\Deleted))

a008 OK STORE completed.



a009 OK EXPUNGE completed

This command marks the first message in the selected mailbox as deleted, then permanently removes it from the mailbox using the EXPUNGE command.


The APPEND function adds new messages to a mailbox.


APPEND mailbox [flags] [date_time] message


a010 APPEND Sent (\Seen) "28-Apr-2023 14:00:00 +0000" {1014}



Subject: Hello

Date: Fri, 28 Apr 2023 14:00:00 +0000

Hello Jane,

I hope this message finds you well.

Best regards,


a010 OK APPEND completed

This command appends a new message to the “Sent” mailbox, marking it as read and setting the date to April 28, 2023 at 2:00 PM GMT.


IMAP provides a powerful and flexible way for users to manage their email messages on a remote server. It is a popular choice for users who need to access their email from multiple devices and locations. Based on this tutorial, you can now use IMAP to manage your mailing system.

About the author

Kennedy Brian

Brian is a computer scientist with a bias for software development, programming, and technical content development. He has been in the profession since 2015. He reads novels, jogs, or plays table tennis whenever not on gadgets. He is an expert in Python, SQL, Java, and data and network security.