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).
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 ./makeIf you want to install the libs and the header files on your system, become root and type:
make install
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.
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()).
Call folder->close(true) to expunge messages marked as deleted.
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.
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.
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.