Internationalized Email Support

Hi there!

Today, we committed a big change into VMime codebase. We implemented preliminary support for RFC-6532 (Internationalized Email Headers), which is the (future) replacement for RFC-2047. We added support for IDN (Internationalized Domain Name) and EAI (Email Address Internationalization).

As a lot of MUAs and MSAs do not support this yet, the feature is not enabled by default (and, to be honest, we need to test this thoroughly in VMime before using it in production code). To enable it from your code, just configure the default generation context:

vmime::generationContext::getDefaultContext()
    .setInternationalizedEmailSupport(true);

In the meantime, we also added message generation/parsing context and charset conversion options, to provide a better control to the user on how the messages are parsed/generated. Have a look at Doxygen-generated documentation to know more about this.

CMake and OpenSSL support!

Hi, here are some news from the front!

We migrated the build system to CMake. SCons is still usable, but should be used only for development purposes. Please note that autotools scripts should now be generated with CMake, as it has been removed from SCons script.

Thanks to the help of Mehmet Bozkurt, VMime now supports OpenSSL for SSL/TLS features, in addition to the existing support for GnuTLS.

We hope these new features will make deployment of VMime easier.

Version 0.9.1 released

Hi all!

We are proud to announce VMime 0.9.1 release, which includes all bug fixes and features from the last two years (yeah, I know this looks like eternity, but don’t worry, VMime is still regularly maintained!).

  • Fixed a lot of compilation issues on some platforms
  • Fixed message parsing and generation issues
  • Better support for encoding
  • Dual-licensing

Thanks to all who contributed to this release, and those using VMime! We are working hard to provide the Open Source world with a powerful and reliable mail library since more than 10 years! ;-)

Connection time out

By popular demand, it is now possible to handle time out during connection to IMAP, POP3 and SMTP servers.

There is nothing to change in your code to enjoy this new feature, at least if you already set a time out handler on the store (vmime::net::store::setTimeoutHandler). The same time out handler is used for connection and for data exchange after the connection has been opened.

Please note: for now, this is only available in VMime SVN, revision 559, and for POSIX platforms (this feature is not yet supported on Windows).

New feature: get parsed message from store

Hi VMime users!

Let’s focus today on a new feature in VMime 0.9. Until now, when you wanted to “explore” the contents of a vmime::net::message (that is, a message hosted on a IMAP or a POP3 store), you had to extract it entirely, or to use low-level fetch() and extract() functions on the message object.

Since the current development release of May 18th, there is a new helper function that will let you access the remote message like a “normal” vmime::message, and actually download the message data only when it is required (this only works for IMAP).

// Connect to the IMAP store
vmime::ref <vmime::net::session> sess = vmime::create <vmime::net::session>();

vmime::utility::url storeURL("imap://username:password@imap.example.com");

vmime::ref <vmime::net::store> store = sess->getStore(storeURL);
store->connect();

// Open the INBOX
vmime::ref <vmime::net::folder> folder = store->getDefaultFolder();
folder->open(vmime::net::folder::MODE_READ_WRITE);

// Get the first message in the INBOX
vmime::ref <vmime::net::message> msg = f->getMessage(1);

// Construct the parsed message (a few data, header and structure,
// is actually downloaded from the IMAP server)
vmime::ref <vmime::message> parsedMsg = msg->getParsedMessage();

// Here, extract() will actually download message data from the server
vmime::utility::outputStreamAdapter out(std::cout);
parsedMsg->getBody()->extract(out);

That’s all folks! Update your source tree to the latest SVN head to enjoy this new feature.

Connecting to GMail SMTP/IMAP

Some users fequently ask me how to connect to GMail SMTP service with VMime. You have to connect to server using SMTP protocol (not SMTPS), and set the connection.tls property to true to initiate a secured connection using STARTTLS.

The following code is known to work:

vmime::utility::url url("smtp://smtp.gmail.com");
vmime::ref <vmime::net::transport> tr = session->getTransport(url);
tr->setProperty("connection.tls", true);
tr->setProperty("auth.username", "gmail-login");
tr->setProperty("auth.password", "gmail-password");
tr->setProperty("options.need-authentication", true);
tr->setCertificateVerifier(yourCertificateVerifier);

To connect to IMAP on GMail, use the following code:

vmime::utility::url url("imaps://login:password@imap.gmail.com:993");
vmime::ref <vmime::net::store> store = session->getStore(url);
store->setCertificateVerifier(yourCertificateVerifier);
store->connect();

Major bug fixes

Hello VMime users!

Thanks to László Vadócz, a possible segfault in stringUtils::countASCIIchars() has been fixed. A patch is available.

There was another major issue with body contents not generating when using streamContentHandler: EOF condition was not reset correctly when stream::reset() was called. The patch is available here.

GPL v3 and dual-licensing

Hi all!

VMime has been relicensed under the GNU General Public License version 3. So, this will be the default license starting from version 0.9.1 (which is currently in development).

Additionally, due to a lot of demand, and to support development, VMime is now available under dual-licensing:

  • GNU GPL v3 for Free and Open Source projects. This is the default license for VMime.
  • Commercial license, for proprietary software. This license is available for purchase.

Please consult Licensing Overview and Dual-Licensing Model for more information about this.