Is VMime thread-safe?

VMime is thread-safe in the sense you can have multiple threads running VMime code at the same time.

What you may NOT do is to share VMime objects (for writing) between threads. For example, you should NOT modify the same bodyPart object from two threads at the same time (reading is OK) unless you write your own synchronization mechanism between the calls.

If you are using the messaging module, it is OK to access multiple mailboxes (store objects) from multiple threads (each thread accesses one mailbox).

The rest of the code (parser, utils, etc.) is thread-safe as long as (again…) you don’t share the objects (body parts, mailboxes, etc.) between multiple threads.

There are some singleton objects in VMime. There is absolutely no problem when instanciating a VMime singleton for the first time within multi-threaded code. Instanciation of all singletons is forced when VMime is initialized (static code, executed before your main()).