{"id":15863643,"url":"https://github.com/erebe/vsmtp","last_synced_at":"2026-02-08T09:04:12.691Z","repository":{"id":213273274,"uuid":"728877622","full_name":"erebe/vSMTP","owner":"erebe","description":null,"archived":false,"fork":false,"pushed_at":"2024-02-19T05:24:14.000Z","size":5873,"stargazers_count":1,"open_issues_count":15,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-07T19:53:26.959Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/erebe.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-07T22:27:01.000Z","updated_at":"2025-10-04T13:57:40.000Z","dependencies_parsed_at":"2024-10-27T05:51:55.505Z","dependency_job_id":null,"html_url":"https://github.com/erebe/vSMTP","commit_stats":{"total_commits":1177,"total_committers":15,"mean_commits":78.46666666666667,"dds":0.723874256584537,"last_synced_commit":"fd26c87f804426b65124c545debf61738d7ffc9b"},"previous_names":["erebe/vsmtp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/erebe/vSMTP","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erebe%2FvSMTP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erebe%2FvSMTP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erebe%2FvSMTP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erebe%2FvSMTP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/erebe","download_url":"https://codeload.github.com/erebe/vSMTP/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erebe%2FvSMTP/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29225714,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T06:05:31.539Z","status":"ssl_error","status_checked_at":"2026-02-08T05:58:33.853Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-05T23:00:54.735Z","updated_at":"2026-02-08T09:04:12.657Z","avatar_url":"https://github.com/erebe.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://www.viridit.com/#gh-light-mode-only\"\u003e\n    \u003cimg src=\"https://github.com/viridIT/vSMTP/blob/main/assets/vsmtp-black-nobckgrd.png\"\n      alt=\"vSMTP\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.viridit.com/#gh-dark-mode-only\"\u003e\n    \u003cimg src=\"https://github.com/viridIT/vSMTP/blob/main/assets/vsmtp-white-nobckgrd.png\"\n      alt=\"vSMTP\" /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://www.viridit.com\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/visit-viridit.com-green?logo=internet\"\n      alt=\"website\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://vsmtp.rs\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/read-vsmtp.rs-yellowgreen\"\n      alt=\"documentation\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://discord.gg/N8JGBRBshf\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/join-discord-blue?logo=discord\u0026color=blueviolet\"\n      alt=\"discord\" /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://www.whatrustisit.com\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/rustc-1.66.1%2B-informational.svg?logo=rust\"\n      alt=\"Rustc Version 1.66.1\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://docs.rs/vsmtp\"\u003e\n    \u003cimg src=\"https://docs.rs/vsmtp/badge.svg\"\n      alt=\"docs\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.gnu.org/licenses/gpl-3.0\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/viridIT/vSMTP?color=blue\"\n      alt=\"License GPLv3\" /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/viridIT/vSMTP/actions/workflows/ci.yaml\"\u003e\n    \u003cimg src=\"https://github.com/viridIT/vSMTP/actions/workflows/ci.yaml/badge.svg\"\n      alt=\"CI\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://app.codecov.io/gh/viridIT/vSMTP\"\u003e\n    \u003cimg src=\"https://img.shields.io:/codecov/c/gh/viridIT/vSMTP?logo=codecov\"\n      alt=\"coverage\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://deps.rs/repo/github/viridIT/vSMTP\"\u003e\n    \u003cimg src=\"https://deps.rs/repo/github/viridIT/vSMTP/status.svg\"\n      alt=\"dependency status\" /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/viridIT/vSMTP/releases\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/viridIT/vSMTP?logo=github\"\n      alt=\"Latest Release\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://crates.io/crates/vsmtp\"\u003e\n    \u003cimg src=\"https://img.shields.io/crates/v/vsmtp.svg\"\n      alt=\"Crates.io\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/repository/docker/viridit/vsmtp\"\u003e\n    \u003cimg src=\"https://img.shields.io/docker/pulls/viridit/vsmtp?logo=docker\"\n      alt=\"Docker Pulls\" \u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n---\n\n# What is vSMTP ?\n\nvSMTP is a next-gen *Mail Transfer Agent* (MTA), faster, safer and greener.\n\n- It is 100% built in [Rust](https://www.rust-lang.org).\n- It is lightning fast.\n- It is modular and highly customizable.\n- It has a complete filtering system.\n- It is actively developed and maintained.\n\n## Faster, Safer, Greener\n\nWhile optimizing IT resources becomes an increasing challenge, computer attacks remain a constant problem.\n\nEvery 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.\n\nTo meet these challenges, viridIT is developing a new technology of email gateways, also called vSMTP.\n\nFollow us on [viridit.com](https://viridit.com)\n\n## Filtering\n\nvSMTP 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).\nYou can:\n\n- inspect / modify the content of incoming emails.\n- forward and deliver emails locally or remotely.\n- connect to databases.\n- run commands.\n- quarantine emails.\n\nand much more.\n\n```js\n// -- /etc/vsmtp/service/database.vsl\n\n// vSMTP can be extended with plugins.\nimport \"plugins/vsmtp_plugin_mysql\" as mysql;\n\n// Here we declare a service.\n// Let's connect to a mysql database.\nexport const database = mysql::connect(#{\n    // the url to connect to the database.\n    url: \"mysql://localhost/?user=greylist-manager\u0026password=my-password\"\",\n    timeout: \"30s\",\n    connections: 4,\n});\n```\n\n```js\n// -- /etc/vsmtp/filter.vsl\n// Here we declare our rules for filtering.\n\nimport \"service/database\" as db;\n\n#{\n  // hook on the 'mail from' stage. (when the server receives the `MAIL FROM:` command)\n  mail: [\n    rule \"greylist\" || {\n      let sender = ctx::mail_from();\n\n      // is the user in our greylist ?\n      // (Don't forget to sanitize your inputs to prevent SQL injection)\n      if db::greylist.query(`SELECT * FROM greylist.sender WHERE address = '${sender}';`).is_empty() {\n        // it does not, we add the address to the database, then deny the email.\n        db::greylist.query(`\n            INSERT INTO greylist.sender (user, domain, address)\n            values (\"${sender.local_part}\", \"${sender.domain}\", \"${sender}\");\n        `);\n        // close the connection with a built in \"451 - 4.7.1\" error code.\n        state::deny(code::c451_7_1())\n      } else {\n        // it is, we accept the email.\n        state::accept()\n      }\n    }\n  ],\n}\n```\n\nCheck 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.\n\n## Benchmarks\n\nComparison between Postfix 3.6.4 \u0026 vSMTP 1.0.1 performances, performed on a Ubuntu 22.04 LTS running with an AMD Ryzen 5 5600X 6-Core Processor.\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://www.viridit.com/#gh-light-mode-only\"\u003e\n    \u003cimg width=\"70%\" height=\"70%\" src=\"https://github.com/viridIT/vSMTP/blob/develop/assets/tp-100k-white.png\"\n      alt=\"100kb messages throughput example\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.viridit.com/#gh-dark-mode-only\"\u003e\n    \u003cimg width=\"70%\" height=\"70%\" src=\"https://github.com/viridIT/vSMTP/blob/develop/assets/tp-100k-black.png\"\n      alt=\"100kb messages throughput example\" /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\nCheck 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.\n\n## Documentation\n\nIn this repository, the \"develop\" branch is the branch that we work on every day to provide new features.\nIf you want to check examples for the latest vSMTP versions, switch to the \"main\" branch, where our latest releases\nare delivered.\n\nFor documentation please consult the [vBook](https://vsmtp.rs), the online reference and user guide for vSMTP.\nDocumentation for the \"develop\" branch is also available in the vBook at \u003chttps://vsmtp.rs/next\u003e\n\nTo stay tuned, ask questions and get in-depth answers feel free to join our [Discord](https://discord.gg/N8JGBRBshf) server.\nYou can also open GitHub [discussions](https://github.com/viridIT/vSMTP/discussions).\n\n## Roadmap\n\nYou can find more information about the project agenda in [Milestones](https://github.com/viridIT/vSMTP/milestones) and the [roadmap](ROADMAP.md) section.\n\nYou can check out updates in the [Changelogs](https://github.com/viridIT/vSMTP/blob/develop/CHANGELOG.md).\n\n## Contributing\n\nA guideline about contributing to vSMTP can be found in the [contributing](CONTRIBUTING.md) section.\n\n## Commercial\n\nWe 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.\n\nFor any question related to commercial, licensing, etc. you can [contact us] on our website or send a message to `contact@viridit.com`.\n\n[contact us]: https://www.viridit.com/contact\n\n## License\n\nThe standard version of vSMTP is free and under an Open Source license.\n\nIt is provided as usual without any warranty. Please refer to the [license](https://github.com/viridIT/vSMTP/blob/main/LICENSE) for further information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferebe%2Fvsmtp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferebe%2Fvsmtp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferebe%2Fvsmtp/lists"}