Charted's email service built in Rust that can be connected via gRPC

Overview

🐻‍❄️ 💌 Emails Microservice

charted's email service built in Rust that can be connected via gRPC

email-service is a small microservice to help transfer emails towards other people without trying to implement it in different languages. This is used in charted-server for member invitations, passwordless authentication, and more.

The service also comes with pre-made templates that you can override easily from the ./templates directory to suite your needs. Since this is a microservice that anyone can use, the templates can be customized to your liking.

This repository also comes with the templates what we built for charted via the react-email NPM library, which is available in ./template-builder.

Installation

Docker

To use the microservice with Docker, you will need to have the Docker Engine or Docker Desktop installed on your machine. Once you have Docker installed, you can pull the Docker image from Noelware or GitHub's container registry, depends what you want to run:

  • If you wish to run only stable builds, you can use Noelware's Container Registry.
  • If you really want to run the most cutting edge version of this service, you can do so with the Nightly channel. All nightly builds are only available on GitHub's container registry to not clutter Noelware's registry.

The image consists around multiple tags that are suited for your environment. We build the images with the linux/amd64 and linux/arm64 architectures.

  • latest, nightly - The latest versions for each channel (latest for the stable channel, nightly for the nightly channel)
  • alpine - This tag runs this service with the Alpine image instead of Ubuntu, which is recommended for production environments since it's more compat and smaller.
  • {version}, {version}-nightly - The {version} placeholder is for any specific version of this service to run.
  • {version}-alpine - Similarly to the stock alpine image tag, but uses a specific version of this microservice to run.

As this service doesn't hold any persistence, we will not be requiring it and we do not need any external databases or any other service. Now, we can begin pulling the image from the respected registry:

# Noelware's Container Registry
$ docker pull cr.noelware.cloud/charted/emails

# GitHub's Container Registry
$ docker pull ghcr.io/charted-dev/email-service

Now, we can run the container:

# Noelware's Container Registry
$ docker run -d -p 32121:32121 --name emails cr.noelware.cloud/charted/emails

# GitHub's Container Registry
$ docker run -d -p 32121:32121 --name emails ghcr.io/charted-dev/email-service

Docker Compose

This repository also comes with a pre-ready docker-compose.yml deployment that can be easily fetched:

# Linux/macOS - cURL
$ curl -Lo docker-compose.yml https://raw.githubusercontent.com/charted-dev/email-service/main/docker-compose.yml

# Windows with PowerShell
$ irm https://raw.githubusercontent.com/charted-dev/email-service/main/docker-compose.yml | Set-Content -Path ./docker-compose.yml

License

email-service is released under the Apache 2.0 License with love by Noelware, LLC.! 🐻‍❄️ 💜

Comments
  • Update Rust crate thiserror to 1.0.40

    Update Rust crate thiserror to 1.0.40

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | thiserror | dependencies | patch | 1.0.39 -> 1.0.40 |


    Release Notes

    dtolnay/thiserror

    v1.0.40

    Compare Source

    • Update syn dependency to 2.x

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate serde to 1.0.157

    Update Rust crate serde to 1.0.157

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | serde (source) | dependencies | patch | 1.0.156 -> 1.0.157 |


    Release Notes

    serde-rs/serde

    v1.0.157

    Compare Source

    • Update syn dependency to 2.x

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate async-trait to 0.1.67

    Update Rust crate async-trait to 0.1.67

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | async-trait | dependencies | patch | 0.1.66 -> 0.1.67 |


    Release Notes

    dtolnay/async-trait

    v0.1.67

    Compare Source

    • Update syn dependency to 2.x

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate serde to 1.0.156

    Update Rust crate serde to 1.0.156

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | serde (source) | dependencies | patch | 1.0.155 -> 1.0.156 |


    Release Notes

    serde-rs/serde

    v1.0.156

    Compare Source

    • Documentation improvements

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate chrono to 0.4.24

    Update Rust crate chrono to 0.4.24

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | chrono | build-dependencies | patch | 0.4.23 -> 0.4.24 | | chrono | dependencies | patch | 0.4.23 -> 0.4.24 |


    Release Notes

    chronotope/chrono

    v0.4.24: 0.4.24

    Compare Source

    This is a small maintenance release with accumulated fixes and improvements.

    Thanks to all contributors from the chrono team, @​esheppa and @​djc.


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate serde to 1.0.155

    Update Rust crate serde to 1.0.155

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | serde (source) | dependencies | patch | 1.0.154 -> 1.0.155 |


    Release Notes

    serde-rs/serde

    v1.0.155

    Compare Source

    • Support Serialize and Deserialize impls for core::ffi::CStr and alloc::ffi::CString without "std" feature (#​2374, thanks @​safarir)

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update rust-futures monorepo to 0.3.27

    Update rust-futures monorepo to 0.3.27

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | futures (source) | dependencies | patch | 0.3.26 -> 0.3.27 | | futures-util (source) | dependencies | patch | 0.3.26 -> 0.3.27 |


    Release Notes

    rust-lang/futures-rs

    v0.3.27

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update rust Docker tag to v1.68

    Update rust Docker tag to v1.68

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | rust | stage | minor | 1.67-alpine -> 1.68-alpine |


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate serde to 1.0.154

    Update Rust crate serde to 1.0.154

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | serde (source) | dependencies | patch | 1.0.153 -> 1.0.154 |


    Release Notes

    serde-rs/serde

    v1.0.154

    Compare Source

    • Fix "undeclared lifetime" error in generated code when deriving Deserialize for an enum with both flatten and 'static fields (#​2383, thanks @​Mingun)

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate serde to 1.0.153

    Update Rust crate serde to 1.0.153

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | serde (source) | dependencies | patch | 1.0.152 -> 1.0.153 |


    Release Notes

    serde-rs/serde

    v1.0.153

    Compare Source

    • Support serde(alias = "…") attribute used inside of flattened struct (#​2387, thanks @​bebecue)

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate thiserror to 1.0.39

    Update Rust crate thiserror to 1.0.39

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | thiserror | dependencies | patch | 1.0.38 -> 1.0.39 |


    Release Notes

    dtolnay/thiserror

    v1.0.39

    Compare Source

    • Set html_root_url attribute

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    This repository currently has no open or pending branches.

    Detected dependencies

    cargo
    Cargo.toml
    • ansi_term 0.12.1
    • async-trait 0.1.67
    • chrono 0.4.24
    • dotenv 0.15.0
    • fern 0.6.1
    • futures 0.3.27
    • futures-util 0.3.27
    • lazy_static 1.4.0
    • lettre 0.10.3
    • log 0.4.17
    • mustache 0.9.0
    • once_cell 1.17.1
    • prost 0.11.8
    • prost-types 0.11.8
    • regex 1.7.1
    • sentry 0.30.0
    • sentry-log 0.30.0
    • sentry-tower 0.30.0
    • sentry-tracing 0.30.0
    • serde 1.0.157
    • serde_json 1.0.94
    • serde_yaml 0.9.19
    • thiserror 1.0.40
    • tokio 1.26.0
    • tonic 0.8.3
    • tonic-health 0.8.0
    • chrono 0.4.24
    • tonic-build 0.8.4
    dockerfile
    distribution/docker/alpine/Dockerfile
    • rust 1.68-alpine
    • alpine 3.17
    distribution/docker/debian/Dockerfile
    • debian 11-slim
    github-actions
    .github/workflows/Release.yaml
    • actions/checkout v3
    • actions-rs/toolchain v1
    • Swatinem/rust-cache v2
    • Noelware/setup-protoc 1.0.2
    • actions/upload-artifact v3
    • softprops/action-gh-release v1
    • Noelware/s3-action 2.1.0
    • actions/checkout v3
    • docker/setup-buildx-action v2
    • docker/setup-qemu-action v2
    • docker/login-action v2
    • docker/build-push-action v4
    • docker/build-push-action v4
    • actions/checkout v3
    • docker/setup-buildx-action v2
    • docker/setup-qemu-action v2
    • docker/login-action v2
    • docker/build-push-action v4
    • docker/build-push-action v4
    • Noelware/docker-manifest-action 0.3.1
    • Noelware/docker-manifest-action 0.3.1
    • Noelware/docker-manifest-action 0.3.1
    • Noelware/docker-manifest-action 0.3.1
    • Noelware/docker-manifest-action 0.3.1
    • Noelware/docker-manifest-action 0.3.1
    • Noelware/docker-manifest-action 0.3.1
    • Noelware/docker-manifest-action 0.3.1
    .github/workflows/RustCI.yaml
    • actions/checkout v3
    • actions-rs/toolchain v1
    • Swatinem/rust-cache v2
    • Noelware/setup-protoc 1.0.2
    • actions-rs/clippy-check v1

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
Owner
charted
📦 Auxillary projects for Noelware's Charts Platform
charted
Secure mTLS and gRPC backed runtime daemon. Alternative to systemd. Written in Rust.

Auraed A runtime daemon written in Rust. Designed to run as pid 1 mTLS backed gRPC API over unix domain socket Run executables Run containers Run virt

Aurae Runtime 57 Dec 22, 2022
Write Cloudflare Workers in 100% Rust via WebAssembly

Work-in-progress ergonomic Rust bindings to Cloudflare Workers environment. Write your entire worker in Rust! Read the Notes and FAQ Example Usage use

Cloudflare 1.3k Dec 29, 2022
A relatively simple puzzle generator application written in Rust and used via Javascript

Puzzlip Basic Overview This is a relatively simple puzzle generator application written in Rust and used via Javascript in https://puzzlip.com. If you

Nenad 5 Dec 7, 2022
Djotters is a Djot parser and translater written via parser combinators, in rust.

?? Djotters Turning your Djot (markdown) into lovely HTML! Djotters is here to let you draft up a document and watch it render in real time. If you wa

Anthony Alaribe 4 Mar 26, 2024
A tiny service that downloads files over HTTP links, with resume and restart support.

Http Drogue Http Drogue is a tiny service that downloads files over HTTP from links you provide. It can restart and resume interrupted downloads. Http

Kaan Barmore-Genç 4 Feb 27, 2023
Simple and minimalist forward auth service intended for use with reverse proxies (Traefik, Caddy, nginx, etc)

nforwardauth nforwardauth is an extremely lightweight, blazing fast forward auth service that lets you use a single authentication middleware for all

Tony Duco 22 Apr 7, 2023
Rust 核心库和标准库的源码级中文翻译,可作为 IDE 工具的智能提示 (Rust core library and standard library translation. can be used as IntelliSense for IDE tools)

Rust 标准库中文版 这是翻译 Rust 库 的地方, 相关源代码来自于 https://github.com/rust-lang/rust。 如果您不会说英语,那么拥有使用中文的文档至关重要,即使您会说英语,使用母语也仍然能让您感到愉快。Rust 标准库是高质量的,不管是新手还是老手,都可以从中

wtklbm 493 Jan 4, 2023
TypeRust - simple Rust playground where you can build or run your Rust code and share it with others

Rust playground Welcome to TypeRust! This is a simple Rust playground where you can build or run your Rust code and share it with others. There are a

Kirill Vasiltsov 28 Dec 12, 2022
In this repository you can find modules with code and comments that explain rust syntax and all about Rust lang.

Learn Rust What is this? In this repository you can find modules with code and comments that explain rust syntax and all about Rust lang. This is usef

Domagoj Ratko 5 Nov 5, 2022
🦀 Rust crate that allows creating weighted prefix trees that can be used in autocomplete

weighted_trie ?? Rust crate that allows creating weighted prefix trees that can be used in autocomplete Released API Docs Quickstart To use weigthed-t

Alexander Osipenko 8 Mar 1, 2023
A fast rendezvous in rust where data can optionally be swapped between the two threads.

rendezvous_swap A rendezvous is an execution barrier between a pair of threads, but this crate also provides the option of swapping data at the synchr

Erik 5 Mar 17, 2023
Grimsby is an Erlang Port written in Rust that can close its standard input while retaining standard output (and error)

Grimsby An Erlang Port provides the basic mechanism for communication from Erlang with the external world. From the Ports and Port Drivers: Erlang Ref

Peter Morgan 5 May 29, 2023
A rust crate can find first `Err` in `Iterator>` and iterating continuously, without allocation.

Api Document first-err Find the first Err in Iterator<Result<T, E>> and allow iterating continuously. This crate is specifically designed to replace t

null 3 Oct 28, 2023
Core Temporal SDK that can be used as a base for language specific Temporal SDKs

Core SDK that can be used as a base for all other Temporal SDKs. Getting started See the Architecture doc for some high-level information. This repo u

temporal.io 136 Dec 21, 2022
A Matrix bot which can generate "This Week in X" like blog posts

hebbot A Matrix bot which can help to generate periodic / recurrent summary blog posts (also known as "This Week in X"). The bot was inspired by twim-

Häcker Felix 43 Dec 17, 2022
Cogo is a high-performance library for programming stackful coroutines with which you can easily develop and maintain massive concurrent programs.

Cogo is a high-performance library for programming stackful coroutines with which you can easily develop and maintain massive concurrent programs.

co-rs 47 Nov 17, 2022
Custom deserialization for fields that can be specified as multiple types.

serde-this-or-that Custom deserialization for fields that can be specified as multiple types. This crate works with Cargo with a Cargo.toml like: [dep

Ritvik Nag 7 Aug 25, 2022
A typed map which can make sure item exist.

Certain Map A typed map which can make sure item exist. What Problem Does It Solve In Rust, we often use Service abstraction for modular structure des

ihc童鞋@提不起劲 27 Jun 26, 2023
A highly extensible runner that can execute any workflow.

Astro run Astro Run is a highly extensible runner that can execute any workflow. Features Workflow runtime for Docker Support for gRPC server to coord

Panghu 3 Aug 19, 2023