LibESMTP is considered stable. Version 1.0.6 is the recommended release of libESMTP and all users are urged to upgrade as soon as is practicable.

The preferred download is via GitHub, however tarballs are available here for convenicnce.

Current Version
Release Candidate

View ChangeLog



Starting with version 1.0.7 libESMTP requires GNU libgsasl to be installed. Applications are encouraged to migrate to libsasl as soon as practicable.

The previous SASL code provided by libESMTP is deprecated but will remain available for the time being. Both SASL mechanisms coexist peacefully allowing applications to migrate to libgsasl at their own pace.


libESMTP uses dlsym() (part of SUSv2/3 and IEEE Std 1003.1-2001 aka Posix) to load plugins. If your platform does not supply dlsym(), you must install libltdl before configuring libESMTP.

Libltdl is part of GNU libtool which is available from or one of the GNU mirrors.


The Posix/RFC 2553 getaddrinfo() function which supports IPv6 is used to resolve domain names. Please note that gethostbyname is not used for this purpose. Unfortunately, a few platforms either do not yet provide getaddrinfo or use getipnodebyname instead. If your platform is one of these, there are a few options:

If you have installed ISC BIND 9 the lightweight resolver library may be used instead of the standard resolver. Use ./configure --with-lwres[=DIR] to enable this option. Please note that the lightweight resolver requires the use of lwresd also distributed with BIND 9.


OpenSSL is required to build the SMTP STARTTLS extension and, if deprecated features are enabled, to build the SASL NTLM authentication module. If you have no need for either of these features, you do not need OpenSSL.

Please note that OpenSSL is distributed under an old BSD style licence. If this is problematic for you, use the --without-openssl option when configuring. LibESMTP will be built without support for features which depend on OpenSSL and the resulting binary will be pure LGPL.


Running ./configure with no arguments includes all non-experimental and deprecated features. This means that some features not enabled by default in previous releases are now included. Conversely, some features formerly enabled by default must now be requested explicitly.

With the exception of features such as setting --prefix or --with-gnu-ld, ./configure should build the correct configuration for most OS distributions. Occasionally ./configure will detect functions in the C runtime libraries but special #defines are required to enable function prototypes and constants - this seems to be a particular problem with getaddrinfo() on some platforms. If this happens try CPPFLAGS="-DFOO=1" ./configure ... where FOO is the macro referenced in the relevant header file. Let me know if this is needed so I can update the configure script for future releases.

Deprecated Features

From time to time some features of libESMTP may be deprecated prior to eventual removal. Deprecated features remain available unless disabled. Using ./configure --disable-deprecated-features eliminates deprecated code and macros from libESMTP and its header files. Beware that this may break certain applications.