vSMTP vSMTP
website documentation discord
Rustc Version 1.66.1 docs License GPLv3
CI coverage dependency status
Latest Release Crates.io Docker Pulls
--- > ⚠️ Breaking changes for vSMTP 2.1.1 to 2.2 > > Please take note that some breaking API changes in vsl have been introduced > between versions 2.1.1 and 2.2 of vSMTP. Refer to the [Changelogs] for more details. # What is vSMTP ? vSMTP is a next-gen *Mail Transfer Agent* (MTA), faster, safer and greener. - It is 100% built in [Rust](https://www.rust-lang.org). - It is lightning fast. - It is modular and highly customizable. - It has a complete filtering system. - It is actively developed and maintained. ## Faster, Safer, Greener While optimizing IT resources becomes an increasing challenge, computer attacks remain a constant problem. Every day, over 300 billion emails are sent and received in the world. Billions of attachments are processed, analyzed and delivered, contributing to the increase in greenhouse gas emissions. To meet these challenges, viridIT is developing a new technology of email gateways, also called vSMTP. Follow us on [viridit.com](https://viridit.com) ## Filtering vSMTP enable you to create complex set of rules to filter your emails using [vSMTP's scripting language (vsl)](https://vsmtp.rs/reference/vSL/vsl.html) based on [Rhai](https://github.com/rhaiscript/rhai). You can: - inspect / modify the content of incoming emails. - forward and deliver emails locally or remotely. - connect to databases. - run commands. - quarantine emails. and much more. ```js // -- /etc/vsmtp/service/database.vsl // vSMTP can be extended with plugins. import "plugins/vsmtp_plugin_mysql" as mysql; // Here we declare a service. // Let's connect to a mysql database. export const database = mysql::connect(#{ // the url to connect to the database. url: "mysql://localhost/?user=greylist-manager&password=my-password"", timeout: "30s", connections: 4, }); ``` ```js // -- /etc/vsmtp/filter.vsl // Here we declare our rules for filtering. import "service/database" as db; #{ // hook on the 'mail from' stage. (when the server receives the `MAIL FROM:` command) mail: [ rule "greylist" || { let sender = ctx::mail_from(); // is the user in our greylist ? // (don't forget to sanitize your inputs to prevent SQL injection) if db::greylist.query(`SELECT * FROM greylist.sender WHERE address = '${sender}';`).is_empty() { // it does not, we add the address to the database, then deny the email. db::greylist.query(` INSERT INTO greylist.sender (user, domain, address) values ("${sender.local_part}", "${sender.domain}", "${sender}"); `); // close the connection with a built in "451 - 4.7.1" error code. state::deny(code::c451_7_1()) } else { // it is, we accept the email. state::accept() } } ], } ``` Check out the [filtering chapter](https://vsmtp.rs/filtering/filtering.html) of the [book] and the [vSL reference](https://vsmtp.rs/ref/vSL/api.html) to get an overview of what you can do with vSL. ## Plugins vSMTP can be extended via plugins. Here are some already available: - [MySQL](https://vsmtp.rs/ref/vSL/api/fn::global::mysql.html) - [Memcached](https://vsmtp.rs/ref/vSL/api/fn::global::memcached.html) - [Ldap](https://vsmtp.rs/ref/vSL/api/fn::global::ldap.html) - Redis (Premium plugin) - CSV files Check the [Plugins chapter](https://vsmtp.rs/plugins/plugins.html) from the [book] for more details. ## Benchmarks Comparison between Postfix 3.6.4 & vSMTP 1.0.1 performances, performed on a Ubuntu 22.04 LTS running with an AMD Ryzen 5 5600X 6-Core Processor.
100kb messages throughput example 100kb messages throughput example
Check out the ["hold" benchmark readme](./benchmarks/hold/README.md) to reproduce the above example, and the [benchmarks readme](./benchmarks/README.md#benchmarks) to try other benchmarks. ## Documentation In this repository, the "develop" branch is the branch that we work on every day to provide new features. If you want to check examples for the latest vSMTP versions, switch to the "main" branch, where our latest releases are delivered. For documentation please consult our [book], called vBook, the online reference and user guide for vSMTP. Documentation for the "develop" branch is also available in the [book] at . To stay tuned, ask questions and get in-depth answers feel free to join our [Discord](https://discord.gg/N8JGBRBshf) server. You can also open GitHub [discussions](https://github.com/viridIT/vSMTP/discussions). ## Roadmap You can find more information about the project agenda in [Milestones](https://github.com/viridIT/vSMTP/milestones) and the [roadmap](ROADMAP.md) section. You can check out updates in the [Changelogs]. ## Contributing A guideline about contributing to vSMTP can be found in the [contributing](CONTRIBUTING.md) section. ## Commercial We can offer a wide range of services, from design to physical implementation, provide maintenance and develop specific features and dedicated APIs to meet your business needs. For any question related to commercial, licensing, etc. you can [contact us] on our website or send a message to `contact@viridit.com`. [contact us]: https://www.viridit.com/contact ## License The standard version of vSMTP is free and under an Open Source license. It is provided as usual without any warranty. Please refer to the [license](https://github.com/viridIT/vSMTP/blob/main/LICENSE) for further information. [book]: (https://vsmtp.rs) [Changelogs]: (https://github.com/viridIT/vSMTP/blob/develop/CHANGELOG.md)