Cyrus Import Mail Invalid Header
This is a common issue people are having when importing mail messages from other services or desktop clients to Cyrus IMAP 2.4.16. The message normally shown in the console when importing the messages is:
Message contains invalid header
This is because Cyrus IMAPD is strict and requires the message header to be within a certain bound.
Finding problematic messages
Using Thunderbird: The easiest way to find the problematic messages is to purge the ones that imports fine and hash out the remaining messages. I did this in Thunderbird by using the Remove Duplicate Messages Alternate add-ons. Also the ImportExportTools add-ons comes in handy.
- Prepare the folder you want to move over to the Cyrus IMAP server
- Let it copy and wait for the transfer to end with the Invalid Header error
- Make a copy of the original messages folder
- Copy back all the messages on the Cyrus server back to the new copied folder
- In the Duplicate Messages Alternate add-on options, change the filtering to "To", "From", "Message-Id" and "Subject"
- Right-click on the newly copied folder with all the Cyrus messages also included
- A list of lots duplicates will be displayed, click No Copies, and click Ok to purge the ones that did copy to the server
- You're left with a folder with mostly messages that did not copy to the Cyrus server
- Try to copy a few of the messages until you get the Invalid Header error
- View source of the message and inspect the header and fine what is different from a working message
Headers containing '>>From '
In my case, it turned out that the messages with headers starting with:
">>From "
or
">>>From "
Was detected to be invalid and thus report an "Invalid Header" error.
Fixing mbox
By simply exporting all the messages to a mbox-file, parsing all the lines in the mbox and imorting the mbox again fixed the problem.
Install the ImportExportTools add-on.
- Right-click on the folder you want to fix and select Export as mbox file
- Open a terminal window (Mac or Linux) and run the following command to see which lines return
- cat INBOX.mbox | grep ">>From "
- Result should be lots of line similar to: >>From vbei@cox.net Fri Feb 20 16:10:42 2004
- Now, to change all the instances of ">>From " to ">From" (which is fine by Cyrus)
- cat INBOX.mbox | sed -e 's/^>>From \(.*\)\([0-9]\) 20\(.*\)/>From \1\2 20\3/g' > INBOX-fixed.mbox
- The new file should be ready to import, some useful commands to check and verify
- cat INBOX.mbox | grep ">>From "|wc -l
- tail -100 INBOX-fixed.mbox
- Import the fixed mbox in Thunderbird by right-clicking the Local folders and Import mbox file
- Finally, drag the newly imported folder over to the Cyrus IMAP folder where you want the messages to be stored