From e8c5c8ec32a4e636b7b4fb164bdc999eb63bd504 Mon Sep 17 00:00:00 2001 From: Matthias Andree Date: Tue, 3 May 2011 15:37:46 +0200 Subject: Add FETCHMAIL_IMAP_DELETED_REMAINS_UNSEEN env' var. Requested by Jonathan Buschmann, to suppress read-notifications on servers such as MS Exchange or HP OpenMail. --- imap.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'imap.c') diff --git a/imap.c b/imap.c index 1364027f..86d1bfea 100644 --- a/imap.c +++ b/imap.c @@ -1311,6 +1311,22 @@ static int imap_delete(int sock, struct query *ctl, int number) /* set delete flag for given message */ { int ok; + /* Select which flags to set on message deletion: */ + const char delflags_seen[] = "\\Seen \\Deleted"; + const char delflags_unseen[] = "\\Deleted"; + static const char *delflags; + /* Which environment variable to look for: */ + const char dis_env[] = "FETCHMAIL_IMAP_DELETED_REMAINS_UNSEEN"; + + if (!delflags) { + char *tmp; + if ((tmp = getenv(dis_env)) != NULL && *tmp) { + delflags = delflags_unseen; + } else { + /* DEFAULT since many fetchmail versions <= 6.3.X */ + delflags = delflags_seen; + } + } (void)ctl; /* expunges change the fetch numbers */ @@ -1320,17 +1336,18 @@ static int imap_delete(int sock, struct query *ctl, int number) * Use SILENT if possible as a minor throughput optimization. * Note: this has been dropped from IMAP4rev1. * - * We set Seen because there are some IMAP servers (notably HP - * OpenMail) that do message-receipt DSNs, but only when the seen - * bit is set. This is the appropriate time -- we get here right + * We set \Seen because there are some IMAP servers (notably HP + * OpenMail and MS Exchange) do message-receipt DSNs, + * but only when the seen bit gets set. + * This is the appropriate time -- we get here right * after the local SMTP response that says delivery was * successful. */ if ((ok = gen_transact(sock, imap_version == IMAP4 - ? "STORE %d +FLAGS.SILENT (\\Seen \\Deleted)" - : "STORE %d +FLAGS (\\Seen \\Deleted)", - number))) + ? "STORE %d +FLAGS.SILENT (%s)" + : "STORE %d +FLAGS (%s)", + number, delflags))) return(ok); else deletions++; -- cgit v1.2.3