87 N_(
"Subscribe to an IMAP mailbox"),
88 N_(
"subscribe-to <imap-folder-uri>"),
89 "optionalfeatures.html#imap" },
91 N_(
"Unsubscribe from an IMAP mailbox"),
92 N_(
"unsubscribe-from <imap-folder-uri>"),
93 "optionalfeatures.html#imap" },
123 mutt_error(
_(
"This IMAP server is ancient. NeoMutt does not work with it."));
157 while (*s && (*s !=
')'))
161 const char *flag_word = s;
164 const char ctmp = *s;
241 bool changed,
bool invert,
struct UidArray *uida)
243 if (!emails || !uida)
246 for (
int i = 0; i < num_emails; i++)
248 struct Email *e = emails[i];
274 match = invert ^ e->
old;
278 match = invert ^ e->
read;
315 if (!adata || !
mdata)
318 if ((m->
rights & right) == 0)
325 char buf[1024] = { 0 };
331 snprintf(buf,
sizeof(buf),
"+FLAGS.SILENT (%s)", name);
364 while ((pos < len) && (
buf_at(buf, pos) !=
'\0') && (
buf_at(buf, pos) == src[pos]))
366 buf->
data[pos] =
'\0';
412 struct Url url = { 0 };
413 char urlstr[1024] = { 0 };
450 char buf[2048] = { 0 };
451 char mbox[1024] = { 0 };
454 snprintf(buf,
sizeof(buf),
"CREATE %s", mbox);
492 char oldmbox[1024] = { 0 };
493 char newmbox[1024] = { 0 };
500 buf_printf(buf,
"RENAME %s %s", oldmbox, newmbox);
532 snprintf(buf,
sizeof(buf),
"DELETE %s", mbox);
557 if ((c_imap_poll_timeout <= 0) ||
587 if (!conn || (conn->
fd < 0))
611 unsigned long bytes,
struct Progress *progress)
615 struct Buffer buf = { 0 };
623 for (
unsigned long pos = 0; pos < bytes; pos++)
634 if (r && (c !=
'\n'))
649 if ((pos % 1024) == 0)
673 if (!mdata || !
edata)
693 if (!adata || !
mdata)
696 struct Email *e = NULL;
708 if (e->
index == INT_MAX)
809 mutt_error(
_(
"Could not negotiate TLS connection"));
822 if (c_ssl_force_tls && (adata->
conn->
ssf == 0))
839 if ((adata->
conn->
ssf == 0) && c_ssl_force_tls)
903 const size_t nplen = strlen(np->
data);
904 if ((flaglen >= nplen) && ((flag[nplen] ==
'\0') || (flag[nplen] ==
' ')) &&
922 const struct Email *ea = *(
struct Email const *
const *) a;
923 const struct Email *eb = *(
struct Email const *
const *) b;
952 if (!adata || (adata->
mailbox != m) || !e)
1022 err_continue && (*err_continue !=
MUTT_YES))
1024 *err_continue =
imap_continue(
"imap_sync_message: STORE failed", adata->
buf);
1059 if (!adata || !
mdata)
1129 char *uidvalidity_flag = NULL;
1130 char cmd[2048] = { 0 };
1132 if (!adata || !
mdata)
1142 return mdata->messages;
1146 return mdata->messages;
1150 uidvalidity_flag =
"UIDVALIDITY";
1154 uidvalidity_flag =
"UID-VALIDITY";
1162 snprintf(cmd,
sizeof(cmd),
"STATUS %s (UIDNEXT %s UNSEEN RECENT MESSAGES)",
1163 mdata->munge_name, uidvalidity_flag);
1171 return mdata->messages;
1198 const bool is_temp = !m;
1233 if (!adata || !
mdata)
1258 char buf[2048] = { 0 };
1259 snprintf(buf,
sizeof(buf),
"%sSUBSCRIBE %s", subscribe ?
"" :
"UN",
mdata->munge_name);
1268 if (c_imap_check_subscribed)
1273 size_t len =
buf_printf(mbox,
"%smailboxes ", subscribe ?
"" :
"un");
1305 char tmp[2048] = { 0 };
1307 struct Buffer *completion_buf = NULL;
1309 int completions = 0;
1320 snprintf(tmp,
sizeof(tmp),
"%s \"\" \"%s%%\"",
1321 c_imap_list_subscribed ?
"LSUB" :
"LIST", mdata->
real_name);
1333 listresp.
name = NULL;
1342 clen = strlen(listresp.
name);
1344 listresp.
name[clen] =
'\0';
1384 char prompt[1024] = { 0 };
1386 bool triedcreate =
false;
1444 mutt_message(ngettext(
"Copying %d message to %s...",
"Copying %d messages to %s...", rc),
1445 rc, dest_mdata->
name);
1462 snprintf(prompt,
sizeof(prompt),
_(
"Create %s?"), dest_mdata->
name);
1464 if (c_confirm_create &&
1505 struct Email **emails = NULL;
1510 if (!adata || !
mdata)
1556 "Marking %d messages deleted...", rc),
1594 mutt_message(ngettext(
"Saving changed message... [%d/%d]",
1595 "Saving changed messages... [%d/%d]", m->
msg_count),
1598 bool save_append = m->
append;
1684 if (expunge && close)
1692 if (c_message_cache_clean)
1759 char buf[1024] = { 0 };
1779 if (!adata || !
mdata)
1782 const char *condstore = NULL;
1786 condstore =
" (CONDSTORE)";
1792 snprintf(buf,
sizeof(buf),
"%s %s%s", m->
readonly ?
"EXAMINE" :
"SELECT",
1793 mdata->munge_name, condstore);
1856 imap_exec(adata,
"ID (\"name\" \"NeoMutt\" \"version\" \"" PACKAGE_VERSION
"\")",
1871 if (c_imap_rfc5161 && c_imap_qresync)
1909 if (!adata || !
mdata)
1920 mdata->new_mail_count = 0;
1928 snprintf(buf,
sizeof(buf),
"MYRIGHTS %s",
mdata->munge_name);
1942 if (postponed_adata &&
1949 if (c_imap_check_subscribed)
2116 if (!adata || !
mdata)
2126 snprintf(buf,
sizeof(buf),
_(
"Create %s?"),
mdata->name);
2128 if (c_confirm_create &&
2164 if (!adata || !
mdata)
2202 bool success =
false;
2231 char *new_tag = NULL;
2232 char *checker = NULL;
2237 mutt_error(
_(
"IMAP server doesn't support custom flags"));
2261 new_tag = buf->
data;
2262 checker = buf->
data;
2264 while (*checker !=
'\0')
2266 if ((*checker < 32) || (*checker >= 127) ||
2286 while ((checker[0] ==
' ') && (checker[1] ==
' '))
2290 *new_tag++ = *checker++;
2293 new_tag = buf->
data;
2314 char uid[11] = { 0 };
2457 .msg_padding_size = NULL,
#define ARRAY_SORT(head, fn, sdata)
Sort an array.
#define ARRAY_ADD(head, elem)
Add an element at the end of the array.
#define ARRAY_FOREACH(elem, head)
Iterate over all elements of the array.
#define ARRAY_SIZE(head)
The number of elements stored.
#define ARRAY_FREE(head)
Release all memory.
#define ARRAY_HEAD_INITIALIZER
Static initializer for arrays.
const char * mutt_str_atoull(const char *str, unsigned long long *dst)
Convert ASCII string to an unsigned long long.
const char * mutt_str_atoui(const char *str, unsigned int *dst)
Convert ASCII string to an unsigned integer.
IMAP authenticator multiplexor.
@ IMAP_AUTH_SUCCESS
Authentication successful.
int buf_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
int buf_add_printf(struct Buffer *buf, const char *fmt,...)
Format a string appending a Buffer.
size_t buf_len(const struct Buffer *buf)
Calculate the length of a Buffer.
void buf_dealloc(struct Buffer *buf)
Release the memory allocated by a buffer.
void buf_reset(struct Buffer *buf)
Reset an existing Buffer.
bool buf_is_empty(const struct Buffer *buf)
Is the Buffer empty?
void buf_fix_dptr(struct Buffer *buf)
Move the dptr to end of the Buffer.
char buf_at(const struct Buffer *buf, size_t offset)
Return the character at the given offset.
size_t buf_addch(struct Buffer *buf, char c)
Add a single character to a Buffer.
size_t buf_addstr(struct Buffer *buf, const char *s)
Add a string to a Buffer.
size_t buf_strcpy(struct Buffer *buf, const char *s)
Copy a string into a Buffer.
char * buf_strdup(const struct Buffer *buf)
Copy a Buffer's string.
void buf_alloc(struct Buffer *buf, size_t new_size)
Make sure a buffer can store at least new_size bytes.
static const char * buf_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
#define CF_NO_FLAGS
No flags are set.
@ MUTT_CMD_SUCCESS
Success: Command worked.
const char * cs_subset_string(const struct ConfigSubset *sub, const char *name)
Get a string config item by name.
short cs_subset_number(const struct ConfigSubset *sub, const char *name)
Get a number config item by name.
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Convenience wrapper for the config headers.
#define mutt_numeric_cmp(a, b)
void mutt_account_unsetpass(struct ConnAccount *cac)
Unset ConnAccount's password.
bool commands_register(struct CommandArray *ca, const struct Command *cmds)
Add commands to Commands array.
Convenience wrapper for the core headers.
void mailbox_free(struct Mailbox **ptr)
Free a Mailbox.
void mailbox_changed(struct Mailbox *m, enum NotifyMailbox action)
Notify observers of a change to a Mailbox.
#define MUTT_ACL_CREATE
Create a mailbox.
@ NT_MAILBOX_RESORT
Email list needs resorting.
@ NT_MAILBOX_UPDATE
Update internal tables.
#define MUTT_ACL_POST
Post (submit messages to the server)
#define MUTT_ACL_LOOKUP
Lookup mailbox (visible to 'list')
#define MUTT_ACL_INSERT
Add/copy into the mailbox (used when editing a message)
#define MUTT_ACL_DELETE
Delete a message.
static const char * mailbox_path(const struct Mailbox *m)
Get the Mailbox's path string.
uint16_t AclFlags
ACL Rights - These show permission to...
#define MUTT_ACL_WRITE
Write to a message (for flagging or linking threads)
MailboxType
Supported mailbox formats.
@ MUTT_IMAP
'IMAP' Mailbox type
@ MUTT_MAILBOX_ANY
Match any Mailbox type.
@ MUTT_UNKNOWN
Mailbox wasn't recognised.
#define MUTT_ACL_SEEN
Change the 'seen' status of a message.
#define MUTT_ACL_READ
Read the mailbox.
bool mutt_isspace(int arg)
Wrapper for isspace(3)
Structs that make up an email.
int mutt_save_message_mbox(struct Mailbox *m_src, struct Email *e, enum MessageSaveOpt save_opt, enum MessageTransformOpt transform_opt, struct Mailbox *m_dst)
Save a message to a given mailbox.
Manage where the email is piped to external commands.
@ TRANSFORM_NONE
No transformation.
@ SAVE_MOVE
Move message to another mailbox, removing the original.
#define mutt_file_fopen(PATH, MODE)
int mutt_ssl_starttls(struct Connection *conn)
Negotiate TLS over an already opened connection.
void imap_adata_free(void **ptr)
Free the private Account data - Implements Account::adata_free() -.
enum CommandResult parse_unsubscribe_from(const struct Command *cmd, struct Buffer *line, struct Buffer *err)
Parse the 'unsubscribe-from' command - Implements Command::parse() -.
enum CommandResult parse_subscribe_to(const struct Command *cmd, struct Buffer *line, struct Buffer *err)
Parse the 'subscribe-to' command - Implements Command::parse() -.
void imap_edata_free(void **ptr)
Free the private Email data - Implements Email::edata_free() -.
int mw_get_field(const char *prompt, struct Buffer *buf, CompletionFlags complete, enum HistoryClass hclass, const struct CompleteOps *comp_api, void *cdata)
Ask the user for a string -.
#define mutt_message(...)
#define mutt_debug(LEVEL,...)
void imap_mdata_free(void **ptr)
Free the private Mailbox data - Implements Mailbox::mdata_free() -.
static bool imap_ac_add(struct Account *a, struct Mailbox *m)
Add a Mailbox to an Account - Implements MxOps::ac_add() -.
static bool imap_ac_owns_path(struct Account *a, const char *path)
Check whether an Account owns a Mailbox path - Implements MxOps::ac_owns_path() -.
const struct MxOps MxImapOps
IMAP Mailbox - Implements MxOps -.
static enum MxStatus imap_mbox_check_stats(struct Mailbox *m, uint8_t flags)
Check the Mailbox statistics - Implements MxOps::mbox_check_stats() -.
static enum MxStatus imap_mbox_check(struct Mailbox *m)
Check for new mail - Implements MxOps::mbox_check() -.
static enum MxStatus imap_mbox_close(struct Mailbox *m)
Close a Mailbox - Implements MxOps::mbox_close() -.
static bool imap_mbox_open_append(struct Mailbox *m, OpenMailboxFlags flags)
Open a Mailbox for appending - Implements MxOps::mbox_open_append() -.
static enum MxOpenReturns imap_mbox_open(struct Mailbox *m)
Open a mailbox - Implements MxOps::mbox_open() -.
int imap_msg_close(struct Mailbox *m, struct Message *msg)
Close an email - Implements MxOps::msg_close() -.
int imap_msg_commit(struct Mailbox *m, struct Message *msg)
Save changes to an email - Implements MxOps::msg_commit() -.
static bool imap_msg_open_new(struct Mailbox *m, struct Message *msg, const struct Email *e)
Open a new message in a Mailbox - Implements MxOps::msg_open_new() -.
bool imap_msg_open(struct Mailbox *m, struct Message *msg, struct Email *e)
Open an email message in a Mailbox - Implements MxOps::msg_open() -.
int imap_msg_save_hcache(struct Mailbox *m, struct Email *e)
Save message to the header cache - Implements MxOps::msg_save_hcache() -.
int imap_path_canon(struct Buffer *path)
Canonicalise a Mailbox path - Implements MxOps::path_canon() -.
static int imap_path_is_empty(struct Buffer *path)
Is the mailbox empty - Implements MxOps::path_is_empty() -.
enum MailboxType imap_path_probe(const char *path, const struct stat *st)
Is this an IMAP Mailbox?
int imap_sort_uid(const void *a, const void *b, void *sdata)
Compare two UIDs - Implements sort_t -.
static int imap_sort_email_uid(const void *a, const void *b, void *sdata)
Compare two Emails by UID - Implements sort_t -.
void mutt_hash_int_delete(struct HashTable *table, unsigned int intkey, const void *data)
Remove an element from a Hash Table.
Read/write command history from/to a file.
@ HC_OTHER
Miscellaneous strings.
void mutt_account_hook(const char *url)
Perform an account hook.
Parse and execute user-defined hooks.
struct ImapAccountData * imap_adata_new(struct Account *a)
Allocate and initialise a new ImapAccountData structure.
struct ImapAccountData * imap_adata_get(struct Mailbox *m)
Get the Account data for this mailbox.
Imap-specific Account data.
int imap_authenticate(struct ImapAccountData *adata)
Authenticate to an IMAP server.
int imap_cmd_start(struct ImapAccountData *adata, const char *cmdstr)
Given an IMAP command, send it to the server.
const char * imap_cmd_trailer(struct ImapAccountData *adata)
Extra information after tagged command response if any.
int imap_cmd_idle(struct ImapAccountData *adata)
Enter the IDLE state.
int imap_cmd_step(struct ImapAccountData *adata)
Reads server responses from an IMAP command.
int imap_exec(struct ImapAccountData *adata, const char *cmdstr, ImapCmdFlags flags)
Execute a command and wait for the response from the server.
void imap_cmd_finish(struct ImapAccountData *adata)
Attempt to perform cleanup.
struct ImapEmailData * imap_edata_get(struct Email *e)
Get the private data for this Email.
Imap-specific Email data.
int imap_parse_path(const char *path, struct ConnAccount *cac, char *mailbox, size_t mailboxlen)
Parse an IMAP mailbox name into ConnAccount, name.
struct ImapMboxData * imap_mdata_new(struct ImapAccountData *adata, const char *name)
Allocate and initialise a new ImapMboxData structure.
struct ImapMboxData * imap_mdata_get(struct Mailbox *m)
Get the Mailbox data for this mailbox.
Imap-specific Mailbox data.
int imap_cache_clean(struct Mailbox *m)
Delete all the entries in the message cache.
int imap_cache_del(struct Mailbox *m, struct Email *e)
Delete an email from the body cache.
int imap_read_headers(struct Mailbox *m, unsigned int msn_begin, unsigned int msn_end, bool initial_download)
Read headers from the server.
Shared constants/structs that are private to IMAP.
#define IMAP_CAP_ENABLE
RFC5161.
#define IMAP_CAP_IDLE
RFC2177: IDLE.
#define IMAP_CMD_NO_FLAGS
No flags are set.
void imap_qualify_path(char *buf, size_t buflen, struct ConnAccount *conn_account, char *path)
Make an absolute IMAP folder target.
#define IMAP_CAP_ID
RFC2971: IMAP4 ID extension.
void imap_allow_reopen(struct Mailbox *m)
Allow re-opening a folder upon expunge.
void imap_disallow_reopen(struct Mailbox *m)
Disallow re-opening a folder upon expunge.
@ IMAP_DISCONNECTED
Disconnected from server.
@ IMAP_IDLE
Connection is idle.
@ IMAP_AUTHENTICATED
Connection is authenticated.
@ IMAP_SELECTED
Mailbox is selected.
@ IMAP_CONNECTED
Connected to server.
#define IMAP_EXPUNGE_PENDING
Messages on the server have been expunged.
void imap_hcache_open(struct ImapAccountData *adata, struct ImapMboxData *mdata, bool create)
Open a header cache.
#define IMAP_RES_OK
<tag> OK ...
#define IMAP_OPEN_NO_FLAGS
No flags are set.
#define IMAP_EXPUNGE_EXPECTED
Messages will be expunged from the server.
int imap_hcache_put(struct ImapMboxData *mdata, struct Email *e)
Add an entry to the header cache.
#define IMAP_CMD_POLL
Poll the tcp connection before running the imap command.
void imap_mdata_cache_reset(struct ImapMboxData *mdata)
Release and clear cache data of ImapMboxData structure.
#define IMAP_CAP_IMAP4
Server supports IMAP4.
#define IMAP_CAP_STARTTLS
RFC2595: STARTTLS.
#define IMAP_CAP_IMAP4REV1
Server supports IMAP4rev1.
#define IMAP_CAP_STATUS
Server supports STATUS command.
void imap_quote_string(char *dest, size_t dlen, const char *src, bool quote_backtick)
Quote string according to IMAP rules.
enum QuadOption imap_continue(const char *msg, const char *resp)
Display a message and ask the user if they want to go on.
#define IMAP_CMD_PASS
Command contains a password. Suppress logging.
void imap_buf_qualify_path(struct Buffer *buf, struct ConnAccount *conn_account, char *path)
Make an absolute IMAP folder target to a buffer.
ImapExecResult
Imap_exec return code.
@ IMAP_EXEC_SUCCESS
Imap command executed or queued successfully.
@ IMAP_EXEC_ERROR
Imap command failure.
@ IMAP_EXEC_FATAL
Imap connection failure.
#define IMAP_CAP_ACL
RFC2086: IMAP4 ACL extension.
#define IMAP_CAP_QRESYNC
RFC7162.
#define IMAP_NEWMAIL_PENDING
New mail is waiting on the server.
char * imap_fix_path(const char *mailbox, char *path, size_t plen)
Fix up the imap path.
void imap_error(const char *where, const char *msg)
Show an error and abort.
#define IMAP_FLAGS_PENDING
Flags have changed on the server.
void imap_hcache_close(struct ImapMboxData *mdata)
Close the header cache.
@ IMAP_BYE
Logged out from server.
@ IMAP_FATAL
Unrecoverable error occurred.
char * imap_fix_path_with_delim(char delim, const char *mailbox, char *path, size_t plen)
Fix up the imap path.
#define IMAP_CAP_COMPRESS
RFC4978: COMPRESS=DEFLATE.
int imap_hcache_del(struct ImapMboxData *mdata, unsigned int uid)
Delete an item from the header cache.
#define IMAP_RES_NO
<tag> NO ...
int imap_adata_find(const char *path, struct ImapAccountData **adata, struct ImapMboxData **mdata)
Find the Account data for this path.
bool imap_account_match(const struct ConnAccount *a1, const struct ConnAccount *a2)
Compare two Accounts.
void imap_munge_mbox_name(bool unicode, char *dest, size_t dlen, const char *src)
Quote awkward characters in a mailbox name.
#define IMAP_CMD_SINGLE
Run a single command.
#define IMAP_RES_CONTINUE
* ...
char * imap_next_word(char *s)
Find where the next IMAP word begins.
#define IMAP_CAP_CONDSTORE
RFC7162.
#define IMAP_CMD_QUEUE
Queue a command, do not execute.
char * imap_get_qualifier(char *buf)
Get the qualifier from a tagged response.
static void imap_logout(struct ImapAccountData *adata)
Gracefully log out of server.
int imap_mailbox_status(struct Mailbox *m, bool queue)
Refresh the number of total and new messages.
int imap_path_status(const char *path, bool queue)
Refresh the number of total and new messages.
void imap_notify_delete_email(struct Mailbox *m, struct Email *e)
Inform IMAP that an Email has been deleted.
void imap_close_connection(struct ImapAccountData *adata)
Close an IMAP connection.
static int imap_status(struct ImapAccountData *adata, struct ImapMboxData *mdata, bool queue)
Refresh the number of total and new messages.
int imap_complete(struct Buffer *buf, const char *path)
Try to complete an IMAP folder path.
int imap_subscribe(const char *path, bool subscribe)
Subscribe to a mailbox.
int imap_delete_mailbox(struct Mailbox *m, char *path)
Delete a mailbox.
void imap_expunge_mailbox(struct Mailbox *m, bool resort)
Purge messages from the server.
static size_t longest_common_prefix(struct Buffer *buf, const char *src, size_t start)
Find longest prefix common to two strings.
int imap_open_connection(struct ImapAccountData *adata)
Open an IMAP connection.
static int sync_helper(struct Mailbox *m, struct Email **emails, int num_emails, AclFlags right, enum MessageType flag, const char *name)
Sync flag changes to the server.
int imap_rename_mailbox(struct ImapAccountData *adata, char *oldname, const char *newname)
Rename a mailbox.
static int complete_hosts(struct Buffer *buf)
Look for completion matches for mailboxes.
int imap_create_mailbox(struct ImapAccountData *adata, const char *mailbox)
Create a new mailbox.
static int check_capabilities(struct ImapAccountData *adata)
Make sure we can log in to this server.
int imap_fast_trash(struct Mailbox *m, const char *dest)
Use server COPY command to copy deleted messages to trash.
int imap_sync_message_for_copy(struct Mailbox *m, struct Email *e, struct Buffer *cmd, enum QuadOption *err_continue)
Update server to reflect the flags of a single message.
static int select_email_uids(struct Email **emails, int num_emails, enum MessageType flag, bool changed, bool invert, struct UidArray *uida)
Create a list of Email UIDs by type.
enum MxStatus imap_sync_mailbox(struct Mailbox *m, bool expunge, bool close)
Sync all the changes to the server.
int imap_access(const char *path)
Check permissions on an IMAP mailbox with a new connection.
void imap_logout_all(void)
Close all open connections.
enum MxStatus imap_check_mailbox(struct Mailbox *m, bool force)
Use the NOOP or IDLE command to poll for new mail.
static char * get_flags(struct ListHead *hflags, char *s)
Make a simple list out of a FLAGS response.
int imap_read_literal(FILE *fp, struct ImapAccountData *adata, unsigned long bytes, struct Progress *progress)
Read bytes bytes from server into file.
bool imap_has_flag(struct ListHead *flag_list, const char *flag)
Does the flag exist in the list.
static void set_flag(struct Mailbox *m, AclFlags aclflag, bool flag, const char *str, struct Buffer *flags)
Append str to flags if we currently have permission according to aclflag.
static void imap_mbox_select(struct Mailbox *m)
Select a Mailbox.
int imap_login(struct ImapAccountData *adata)
Open an IMAP connection.
static const struct Command ImapCommands[]
Imap Commands.
void imap_init(void)
Setup feature commands.
static bool compare_flags_for_copy(struct Email *e)
Compare local flags against the server.
struct ListNode * mutt_list_insert_tail(struct ListHead *h, char *s)
Append a string to the end of a List.
void mutt_list_free(struct ListHead *h)
Free a List AND its strings.
@ LL_DEBUG3
Log at debug level 3.
@ LL_DEBUG2
Log at debug level 2.
@ LL_DEBUG1
Log at debug level 1.
#define MUTT_MEM_MALLOC(n, type)
int imap_exec_msg_set(struct ImapAccountData *adata, const char *pre, const char *post, struct UidArray *uida)
Execute a command using a set of UIDs.
void imap_msn_remove(struct MSNArray *msn, int idx)
Remove an entry from the cache.
IMAP MSN helper functions.
time_t mutt_date_now(void)
Return the number of seconds since the Unix epoch.
Convenience wrapper for the library headers.
void mutt_str_remove_trailing_ws(char *s)
Trim trailing whitespace from a string.
bool mutt_istr_equal(const char *a, const char *b)
Compare two strings, ignoring case.
char * mutt_str_dup(const char *str)
Copy a string, safely.
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
bool mutt_strn_equal(const char *a, const char *b, size_t num)
Check for equality of two strings (to a maximum), safely.
size_t mutt_str_startswith(const char *str, const char *prefix)
Check whether a string starts with a prefix.
size_t mutt_str_len(const char *a)
Calculate the length of a string, safely.
size_t mutt_str_copy(char *dest, const char *src, size_t dsize)
Copy a string into a buffer (guaranteeing NUL-termination)
size_t mutt_istr_startswith(const char *str, const char *prefix)
Check whether a string starts with a prefix, ignoring case.
bool mutt_istrn_equal(const char *a, const char *b, size_t num)
Check for equality of two strings ignoring case (to a maximum), safely.
char * mutt_str_replace(char **p, const char *s)
Replace one string with another.
Many unsorted constants and some structs.
#define MUTT_COMP_NO_FLAGS
No flags are set.
MessageType
To set flags or match patterns.
@ MUTT_TRASH
Trashed messages.
@ MUTT_READ
Messages that have been read.
@ MUTT_FLAG
Flagged messages.
@ MUTT_DELETED
Deleted messages.
@ MUTT_REPLIED
Messages that have been replied to.
void account_to_url(struct ConnAccount *cac, struct Url *url)
Fill URL with info from account.
@ MUTT_ACCT_TYPE_IMAP
Imap Account.
void mutt_clear_error(void)
Clear the message line (bottom line of screen)
struct Connection * mutt_conn_new(const struct ConnAccount *cac)
Create a new Connection.
void buf_pretty_mailbox(struct Buffer *buf)
Shorten a mailbox path using '~' or '='.
Some miscellaneous functions.
void mx_alloc_memory(struct Mailbox *m, int req_size)
Create storage for the emails.
int mx_ac_remove(struct Mailbox *m, bool keep_account)
Remove a Mailbox from an Account and delete Account if empty.
struct Mailbox * mx_mbox_find2(const char *path)
Find a Mailbox on an Account.
bool mx_mbox_ac_link(struct Mailbox *m)
Link a Mailbox to an existing or new Account.
struct Mailbox * mx_path_resolve(const char *path)
Get a Mailbox for a path.
uint8_t OpenMailboxFlags
Flags for mutt_open_mailbox(), e.g. MUTT_NOSORT.
MxOpenReturns
Return values for mbox_open()
@ MX_OPEN_ERROR
Open failed with an error.
@ MX_OPEN_OK
Open succeeded.
#define MUTT_MAILBOX_CHECK_IMMEDIATE
Don't postpone the actual checking.
MxStatus
Return values from mbox_check(), mbox_check_stats(), mbox_sync(), and mbox_close()
@ MX_STATUS_ERROR
An error occurred.
@ MX_STATUS_OK
No changes.
@ MX_STATUS_FLAGS
Nondestructive flags change (IMAP)
@ MX_STATUS_REOPENED
Mailbox was reopened.
@ MX_STATUS_NEW_MAIL
New mail received in Mailbox.
struct MailboxArray neomutt_mailboxes_get(struct NeoMutt *n, enum MailboxType type)
Get an Array of matching Mailboxes.
struct Buffer * buf_pool_get(void)
Get a Buffer from the pool.
void buf_pool_release(struct Buffer **ptr)
Return a Buffer to the pool.
bool progress_update(struct Progress *progress, size_t pos, int percent)
Update the state of the progress bar.
void mutt_qsort_r(void *base, size_t nmemb, size_t size, sort_t compar, void *sdata)
Sort an array, where the comparator has access to opaque data rather than requiring global variables.
QuadOption
Possible values for a quad-option.
@ MUTT_ABORT
User aborted the question (with Ctrl-G)
@ MUTT_NO
User answered 'No', or assume 'No'.
@ MUTT_YES
User answered 'Yes', or assume 'Yes'.
enum QuadOption query_yesorno_help(const char *prompt, enum QuadOption def, struct ConfigSubset *sub, const char *name)
Ask the user a Yes/No question offering help.
enum QuadOption query_quadoption(const char *prompt, struct ConfigSubset *sub, const char *name)
Ask the user a quad-question.
enum QuadOption query_yesorno(const char *prompt, enum QuadOption def)
Ask the user a Yes/No question.
#define TAILQ_FOREACH(var, head, field)
#define STAILQ_FOREACH(var, head, field)
#define STAILQ_EMPTY(head)
enum CommandResult parse_rc_line(struct Buffer *line, struct Buffer *err)
Parse a line of user config.
int mutt_socket_close(struct Connection *conn)
Close a socket.
int mutt_socket_poll(struct Connection *conn, time_t wait_secs)
Checks whether reads would block.
int mutt_socket_readchar(struct Connection *conn, char *c)
Simple read buffering to speed things up.
void mutt_socket_empty(struct Connection *conn)
Clear out any queued data.
int mutt_socket_open(struct Connection *conn)
Simple wrapper.
A group of associated Mailboxes.
enum MailboxType type
Type of Mailboxes this Account contains.
char * name
Name of Account.
void(* adata_free)(void **ptr)
void * adata
Private data (for Mailbox backends)
String manipulation buffer.
size_t dsize
Length of data.
char * data
Pointer to data.
CommandFlags flags
Command flags, e.g. CF_SYNONYM.
Login details for a remote server.
char host[128]
Server to login to.
unsigned int ssf
Security strength factor, in bits (see notes)
struct ConnAccount account
Account details: username, password, etc.
int fd
Socket file descriptor.
The envelope/body of an email.
bool purge
Skip trash folder when deleting.
struct Envelope * env
Envelope information.
void * edata
Driver-specific data.
bool active
Message is not to be removed.
bool old
Email is seen, but unread.
bool changed
Email has been edited.
bool attach_del
Has an attachment marked for deletion.
bool flagged
Marked important?
bool replied
Email has been replied to.
struct TagList tags
For drivers that support server tagging.
char * path
Path of Email (for local Mailboxes)
bool deleted
Email is deleted.
int index
The absolute (unsorted) message number.
unsigned char changed
Changed fields, e.g. MUTT_ENV_CHANGED_SUBJECT.
IMAP-specific Account data -.
char delim
Path delimiter.
struct Mailbox * prev_mailbox
Previously selected mailbox.
struct ImapList * cmdresult
int lastcmd
Last command in the queue.
bool closing
If true, we are waiting for CLOSE completion.
time_t lastread
last time we read a command for the server
bool unicode
If true, we can send UTF-8, and the server will use UTF8 rather than mUTF7.
ImapCapFlags capabilities
Capability flags.
int nextcmd
Next command to be sent.
unsigned char state
ImapState, e.g. IMAP_AUTHENTICATED.
struct Mailbox * mailbox
Current selected mailbox.
char * capstr
Capability string from the server.
struct ImapCommand * cmds
Queue of commands for the server.
unsigned char status
ImapFlags, e.g. IMAP_FATAL.
int cmdslots
Size of the command queue.
unsigned int seqno
tag sequence number, e.g. '{seqid}0001'
struct Connection * conn
Connection to IMAP server.
IMAP-specific Email data -.
unsigned int uid
32-bit Message UID
bool deleted
Email has been deleted.
Items in an IMAP browser.
IMAP-specific Mailbox data -.
ImapOpenFlags reopen
Flags, e.g. IMAP_REOPEN_ALLOW.
char * real_name
Original Mailbox name, e.g.: INBOX can be just \0.
unsigned int new_mail_count
Set when EXISTS notifies of new mail.
struct HashTable * uid_hash
Hash Table: "uid" -> Email.
unsigned long long modseq
char * munge_name
Munged version of the mailbox name.
void(* mdata_free)(void **ptr)
int vcount
The number of virtual messages.
bool changed
Mailbox has been modified.
bool has_new
Mailbox has new mail.
char * realpath
Used for duplicate detection, context comparison, and the sidebar.
bool append
Mailbox is opened in append mode.
int msg_new
Number of new messages.
time_t last_checked
Last time we checked this mailbox for new mail.
int msg_count
Total number of messages.
AclFlags rights
ACL bits, see AclFlags.
bool poll_new_mail
Check for new mail.
void * mdata
Driver specific data.
struct Email ** emails
Array of Emails.
struct Buffer pathbuf
Path of the Mailbox.
int msg_deleted
Number of deleted messages.
struct Account * account
Account that owns this Mailbox.
off_t size
Size of the Mailbox.
int msg_flagged
Number of flagged messages.
bool readonly
Don't allow changes to the mailbox.
bool verbose
Display status messages?
int msg_unread
Number of unread messages.
A local copy of an email.
FILE * fp
pointer to the message data
char * path
path to temp file
Container for Accounts, Notifications.
struct AccountArray accounts
All Accounts.
struct CommandArray commands
NeoMutt commands.
struct ConfigSubset * sub
Inherited config items.
A parsed URL proto://user:password@host:port/path?a=1&b=2
struct Url * url_parse(const char *src)
Fill in Url.
void url_free(struct Url **ptr)
Free the contents of a URL.
int url_tostring(const struct Url *url, char *dest, size_t len, uint8_t flags)
Output the URL string for a given Url object.
void mutt_zstrm_wrap_conn(struct Connection *conn)
Wrap a compression layer around a Connection.