On 15Dec2018 17:01, Erik Christiansen <[email protected]> wrote:
On 13.12.18 13:05, Kurt Hackenberg wrote:
You may want to preserve message attributes -- things like, this message has
been read, this message has been replied to, this message has been flagged,
this message has been assigned the keyword "blorgh". Mail delivery agents,
including procmail, are likely to drop that information.

Hmmm ... can any of that actually be true? Let's check. Mutt makes flag
and read status persistent through added headers such as:

Status: RO
X-Status: F

Is it in reality even remotely "likely" that any LDA contains code to
search out those headers and delete them in transit? (Please feel free
to post any code snippets found.)

The assertion also seems to ignore that mutt inserts those headers
_after_ the LDA has delivered the messages, so there is normally no
possible opportunity for the claimed LDA header removal - is there?

If you use a tool which isn't mutt, yes there's some scope to lose this information. For example, in a mbox the Status: and/or X-Status: headers hold flags. In a Maildir the flags are stored in the message filename, not the headers (they may get _duplicated_ there).

As an example, my mail filing programme can save to mbox or Maildir and has this function:

   def save_to_folderpath(folderpath, M, message_path, flags):
     ''' Save the Message `M` to the resolved `folderpath`.
         `message_path`: pathname of existing message file, allowing
           hardlinking to new maildir if not None
         `flags`: save flags as from MessageFiler.flags
     '''
     if not os.path.exists(folderpath):
       make_maildir(folderpath)
     if ismaildir(folderpath):
       # save to Maildir
       mdir = Maildir(folderpath)
       maildir_flags = ''
       if flags.draft:   maildir_flags += 'D'
       if flags.flagged: maildir_flags += 'F'
       if flags.passed:  maildir_flags += 'P'
       if flags.replied: maildir_flags += 'R'
       if flags.seen:    maildir_flags += 'S'
       if flags.trashed: maildir_flags += 'T'
       if message_path is None:
         savekey = mdir.save_message(M, flags=maildir_flags)
       else:
         savekey = mdir.save_filepath(message_path, flags=maildir_flags)
       savepath = mdir.keypath(savekey)
       info("    OK %s" % (shortpath(savepath)))
       if message_path is None:
         # update saved message for hard linking
         message_path = savepath
     else:
       # save to mbox
       status = ''
       x_status = ''
       if flags.draft:   x_status += 'D'
       if flags.flagged: x_status += 'F'
       if flags.replied: status += 'R'
       if flags.passed:  x_status += 'P'
       if flags.seen:    x_status += 'S'
       if flags.trashed: x_status += 'T'
       if len(status) > 0:
         M['Status'] = status
       if len(x_status) > 0:
         M['X-Status'] = x_status
       with LogExceptions():
         text = M.as_string(True).replace('\nFrom ', '\n>From ')
       with open(folderpath, "a") as mboxfp:
         mboxfp.write(text)
       info("    OK >> %s" % (shortpath(folderpath)))
     return message_path

So when I wrote this, the mbox flags are _split_ over the Status: and the X-Status: headers. Yay.

If you use mutt to do the conversion, I'd expect flags to survive. I would not normally have any specific confidence that another tool would do so.

Cheers,
Cameron Simpson <[email protected]>

Reply via email to