In the latest version of my email archiving app I've changed most Chilkat related code to the async methods. I've now got 2 error reports from testers that this sometimes doesn't work. The code does 2 passes: first a header is downloaded. The message ID is checked if it's already in the database. If it's not then the full mail is downloaded with the following code:

My first comment is to urge any developer NOT to use async just for the sake of using async. One should only use async to allow your main thread of execution to do other things while the async operation is underway.

This usage of async is just a more complicated/convoluted (and expensive) way of duplicating the synchronous method call:

Of course, I don't use async just for the sake of using async. When using async there is no longer the spinning pizza of death when downloading a large email. Even in a thread I saw this often when using FetchSingleAsMime. Now with the async method this is gone and I really don't want to go back.

Beatrix, re-run with VerboseLogging turned on, and then see what the LastErrorText contains. (Set the CkoImap.VerboseLogging property = YES.

My initial suspicion is that it's somehow a character encoding issue. (If you know, how large is the email in question?) If, for example, the raw bytes of the email are received, and somehow the information about what character encoding is used (i.e. should the bytes be interpreted as utf-8, utf-16, iso-8859-1, etc.?) .. if Chilkat interprets the bytes with a wrong encoding, then the result could be empty. (Because to properly return a string to your Objective-C code requires a conversion to utf-8 from whatever byte representation is received from the server..