{"id":13617810,"url":"https://github.com/jdrouet/catapulte","last_synced_at":"2026-01-23T21:33:33.093Z","repository":{"id":37891700,"uuid":"266414998","full_name":"jdrouet/catapulte","owner":"jdrouet","description":"Rust implementation of catapulte email sender","archived":false,"fork":false,"pushed_at":"2025-06-13T16:10:16.000Z","size":1670,"stargazers_count":147,"open_issues_count":17,"forks_count":8,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-13T21:05:37.177Z","etag":null,"topics":["email","hacktoberfest","mjml","smtp","template"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jdrouet.png","metadata":{"files":{"readme":"readme.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"jdrouet"}},"created_at":"2020-05-23T20:33:39.000Z","updated_at":"2025-06-13T15:04:34.000Z","dependencies_parsed_at":"2025-06-13T21:05:41.544Z","dependency_job_id":"87933f77-9d5d-4ab5-94d4-c9f0d40971b0","html_url":"https://github.com/jdrouet/catapulte","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/jdrouet/catapulte","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdrouet%2Fcatapulte","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdrouet%2Fcatapulte/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdrouet%2Fcatapulte/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdrouet%2Fcatapulte/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jdrouet","download_url":"https://codeload.github.com/jdrouet/catapulte/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdrouet%2Fcatapulte/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28700527,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T17:25:48.045Z","status":"ssl_error","status_checked_at":"2026-01-23T17:25:47.153Z","response_time":59,"last_error":"SSL_read: 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":["email","hacktoberfest","mjml","smtp","template"],"created_at":"2024-08-01T20:01:48.393Z","updated_at":"2026-01-23T21:33:33.058Z","avatar_url":"https://github.com/jdrouet.png","language":"Rust","readme":"# Catapulte\n\n[![Build Status](https://travis-ci.com/jdrouet/catapulte.svg?branch=main)](https://travis-ci.com/jdrouet/catapulte)\n[![codecov](https://codecov.io/gh/jdrouet/catapulte/branch/main/graph/badge.svg)](https://codecov.io/gh/jdrouet/catapulte)\n\n[![Docker Pulls](https://img.shields.io/docker/pulls/jdrouet/catapulte)](https://hub.docker.com/r/jdrouet/catapulte)\n[![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/jdrouet/catapulte?sort=date)](https://hub.docker.com/r/jdrouet/catapulte)\n\n## What is catapulte?\n\nCatapulte is an open source mailer you can host yourself.\n\nYou can use it to quickly catapult your transactionnal emails to destination.\n\n[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/jdrouet/catapulte)\n\n## Why did we build catapulte?\n\nCatapulte comes from the frustration of using several email providers.\nWe used to work with products like [sendgrid](https://sendgrid.com/),\n[mailgun](https://www.mailgun.com/), [mailchimp](https://mailchimp.com/), [sendinblue](https://www.sendinblue.com/), etc.\n\nBut they have many disadvantages :\n\n- Most of them are not really transactionnal oriented, and users complain that their login emails take a long time to arrive.\n- You cannot host it nor use it on premise\n- It's American, with the patriot act, they are able to access your users data.\n- They usually don't have templating tools for our non tech coworkers that ask us to change a wording every 2 days.\n  And when they do, the editors are like html online editors, so it ends up being our job to make the template anyway.\n\n## How to use it?\n\nCatapulte is a simple service that renders your mjml template, interpolates the data and then sends it to a SMTP server.\nIf you want to see how to create your own template, take a look at the `/template` folder in this repository.\n\nYou then have several options for starting catapulte. We recommend using Docker if you are on a amd64, i386 or arm64v8 architecture.\nBy doing the following, you'll be able to have a running server that will render and send your email.\n\n```bash\ndocker run -d \\\n  --name catapulte \\\n  -e SMTP__HOSTNAME=localhost \\\n  -e SMTP__PORT=25 \\\n  -e SMTP__USERNAME=optional \\\n  -e SMTP__PASSWORD=optional \\\n  -e SMTP__TLS_ENABLED=true \\\n  -e SMTP__ACCEPT_INVALID_CERT=false \\\n  -e TEMPLATE__TYPE=local \\\n  -e TEMPLATE__PATH=/templates \\\n  -p 3000:3000 \\\n  -v /path/to/your/templates:/templates:ro \\\n  jdrouet/catapulte:latest\n```\n\nOnce your server started, you can simply send an email using an `HTTP` request.\n\n```bash\ncurl -X POST -v \\\n  -H \"Content-Type: application/json\" \\\n  --data '{\"from\":\"alice@example.com\",\"to\":\"bob@example.com\",\"params\":{\"some\":\"data\"}}' \\\n  http://localhost:3000/templates/the-name-of-your-template/json\n```\n\nYou can also send attachments using a multipart request.\n\n```bash\ncurl -X POST -v \\\n  -F attachments=@asset/cat.jpg \\\n  -F from=alice@example.com \\\n  -F to=bob@example.com \\\n  -F params='{\"some\":\"data\"}' \\\n  http://localhost:3000/templates/user-login/multipart\n```\n\nYou can configure it with [some environment variable](./wiki/environment-variables.md) and can find more information in [this wiki](./wiki/template-provider.md).\n\nIf you some API specification, the Open API specification is also available on `/openapi.json` when Catapulte is running.\n\nTo use it in production, we prepared a documentation on how to use Catapulte with [Amazon Simple Email Service](./wiki/with-aws-ses.md).\n\n### Sending to multiple recipients\nYou can send the same email to multiple recipients just by using an array in the `to` field, like this:\n\n```bash\ncurl -X POST -v \\\n  -H \"Content-Type: application/json\" \\\n  --data '{\"from\":\"alice@example.com\",\"to\":[\"bob@example.com\",\"jon@example.com\"],\"params\":{\"some\":\"data\"}}' \\\n  http://localhost:3000/templates/the-name-of-your-template/json\n```\n\n## Should you use it?\n\nIf, like us, you didn't find any good way of doing transactionnal emails, then YES!\n\n## Why you should use it :\n\n- You work in a startup\n\n  - You don't have shit loads of money to spend on the mailing tools, so use something opensource, send your emails from your own SMTP (or from Amazon SES, it's cheap)\n  - You don't have time to change the email template everyday, so let your Product Owner do it\n  - You wanna be able to add this little feature, just do a pull request...\n\n- You work in a big company\n\n  - You cannot use those external services because you're not allowed to put your user's data on an external service.\n  - You cannot access external services because it's blocked by the proxy\n  - You want to customise the way you authenticate to your SMTP\n  - You want something user friendly enough that your manager can write the emails\n\n## Thank you!\n\n[\u003cimg src=\"https://liberapay.com/assets/liberapay/icon-v2_white-on-yellow.svg?etag=.Z1LYSBJ8Z6GWUeLUUEf2XA~~\" height=\"35px\" /\u003e](https://liberapay.com/jdrouet/)\n[\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" height=\"35px\" /\u003e](https://www.buymeacoffee.com/jdrouet)\n\n","funding_links":["https://github.com/sponsors/jdrouet","https://liberapay.com/jdrouet/","https://www.buymeacoffee.com/jdrouet"],"categories":["Rust","Libraries","库 Libraries"],"sub_categories":["Email","电子邮件 Email"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdrouet%2Fcatapulte","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdrouet%2Fcatapulte","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdrouet%2Fcatapulte/lists"}