On 2/17/2021 10:40 AM, Chris Green wrote:
I'm running this using Python 3.7 on a Linux system.

Most of the time (i.e. for a couple of days now) the program has been
satifactorily delivering mail messages, hundreds of them.  However one
mail message has provoked the following error:-

     chris@cheddar$ tail mail.err
     Traceback (most recent call last):
       File "/home/chris/.mutt/bin/filter.py", line 95, in <module>
         if sbstrip in msghdr["subject"]:
     TypeError: argument of type 'Header' is not iterable


But msghdr["subject"] is surely just a string isn't it?

Obviously not.

 Why is it
complaining about something of type 'Header'?

Because you tried to iterate it. Header is defined in email.header (find 'class Header'). It has a __str__ to turn one into a string. I have never read the email doc so I have no idea if 'subject' being a Header is a bug.

Grepping email package for case-sensitive word 'Header' also returns 3 comment saying that something might be a Header, so stringify it. I have the impression that these might have been added after the original code, perhaps in response to error reports. In any case, you can do the same.

As I said the program has been running happily for a couple of days
with no errors, I guess it must be something strange in a mail that
has broken things - but what?

To determine that, look at (after logging or saving) the raw email and maybe the resulting Message (using msg.as_string).

# Read the message from standard input and make a message object from it
#
msg = mailbox.MaildirMessage(sys.stdin.buffer.read())

raw = sys.stdin.buffer.read()  # So can save
msg = mailbox.MaildirMessage(raw)

msghdr["subject"] = msg.get("Subject", "unknown")
...
         if sbstrip in msghdr["subject"]:

Replace with

          sub = msghdr["subject"]
          if 'Header' in str(sub.__class__):
# Or import email.message.class and use isinstance
               # stringify or skip or ???
           else:

msg.replace_header("Subject", msghdr["subject"].replace(sbstrip,

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to