VMime :: a C++ mail library

Sections

VMime FAQ (Frequently Asked Questions)

Can I build VMime on platform X?

Probably. Actually, you can build VMime on almost every platform that support C++ and 'iconv' library. The C++ compiler should be enough recent to support templates, RTTI and the STL.

However, you will have to write your own platform handler as the default platform handler that comes with the distribution only works for POSIX-compliant platforms (for now). It's not very difficult, just look at the files in the src/platforms/posix directory. If you write a handler for your platform, please contribute to VMime code!

Update (2005/03/28): a platform handler for Windows is now available in VMime (thanks to Stefan Uhrig).

How to compile VMime from CVS?

If you want to go the easy way, don't bother with CVS; you should get a tarball of the project, it will compile out-of-the-box (simply follow the guidelines in the VMime Book).

First, you have to check out VMime's CVS repository with the following instruction set. When prompted for a password for anonymous, simply press Enter key.

   cvs -d:pserver:anonymous@vmime.cvs.sourceforge.net:/cvsroot/vmime login
   cvs -z3 -d:pserver:anonymous@vmime.cvs.sourceforge.net:/cvsroot/vmime co -P vmime

We are going to compile VMime using autotools (configure, make).
As the Makefiles are not stored in the CVS, we need to generate them:

   scons sendmail_path=foo autotools

(Note: sendmail_path is not used here, the value does not matter, but it must be specified on the command line).

Then, compile VMime the classical way:

   ./configure
   ./make
If you want to install the libs and the header files on your system, become root and type:
   make install

Why GPL and not LGPL?

Yes, VMime is licensed under the GNU GPL license.

So, why I have not chosen LGPL license? Because VMime is Free Software, and in my opinion, the LGPL is not enough Free (I mean, from the end user's point of view). LGPL does not help to promote Free Software as it permits to create proprietary programs based on Free libraries.

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 can 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()).

I called deleteMessage() to delete a message from a store, but the message is not actually deleted!

Call folder->close(true) to expunge messages marked as deleted.

How many projects use VMime?

Currently, the following projects are known to use VMime:

If your project makes use of VMime and you want it to be listed here, please contact me.

I have found a bug in VMime. What do I do?

First, please ensure that your bug is not already listed in the bug request manager.
Then, if your bug does not exist, then open a new bug report.

I have made a patch for VMime. Can I send it to you?

Sure! You are encouraged to contribute to VMime source code, this is a basic in Open Source development.

Please ensure your patch is well tested and does not break other parts in the library (you can run the unit tests of the distribution, and write your own tests). Then, you can publish your patch in the Patch tracker or send us an email.

Also, be sure to read the VMime coding guidelines to know more about coding conventions and code quality.