{"id":36578679,"url":"https://github.com/mcrute/ses-smtpd-proxy","last_synced_at":"2026-01-12T07:40:12.956Z","repository":{"id":53078406,"uuid":"173414666","full_name":"mcrute/ses-smtpd-proxy","owner":"mcrute","description":"Simple SMTP to SES Mail Proxy","archived":false,"fork":false,"pushed_at":"2025-09-14T00:38:56.000Z","size":70,"stargazers_count":8,"open_issues_count":0,"forks_count":9,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-14T02:35:09.288Z","etag":null,"topics":["aws","aws-ses","email-server"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mcrute.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-03-02T06:57:07.000Z","updated_at":"2025-09-14T00:38:59.000Z","dependencies_parsed_at":"2025-01-08T18:35:56.526Z","dependency_job_id":"423dd394-1c2b-427f-a3b6-28a3fd20b936","html_url":"https://github.com/mcrute/ses-smtpd-proxy","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/mcrute/ses-smtpd-proxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcrute%2Fses-smtpd-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcrute%2Fses-smtpd-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcrute%2Fses-smtpd-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcrute%2Fses-smtpd-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mcrute","download_url":"https://codeload.github.com/mcrute/ses-smtpd-proxy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcrute%2Fses-smtpd-proxy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28336625,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["aws","aws-ses","email-server"],"created_at":"2026-01-12T07:40:12.306Z","updated_at":"2026-01-12T07:40:12.947Z","avatar_url":"https://github.com/mcrute.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SMTP to SES Mail Proxy\n\nThis is a tiny little proxy that speaks unauthenticated SMTP on the front side\nand makes calls to the SES\n[SendRawEmail](https://docs.aws.amazon.com/ses/latest/APIReference/API_SendRawEmail.html)\non the back side.\n\nEverything this software does is possible with a more fully-featured mail\nserver like Postfix but requires setting up Postfix (which is complicated) and,\nif following best practices, rotating credentials every 90 days (which is\nannoying). Because this integrates with the AWS SDK it can be configured\nthrough the normal SDK configuration channels such as the instance metadata\nservice which provides dynamic credentials or environment variables, in which\ncase you should still manually rotate credentials but have one choke-point to\ndo that.\n\n## Hashicorp Vault Integration\nThe server supports using Hashicorp Vault to retrieve an AWS IAM user\ncredential using the AWS back-end. It will also renew this credential as\nlong as possible. This functionality is not enabled by default but can\nbe enabled with command line flags and environment variables.\n\nThe [standard environment variables](https://developer.hashicorp.com/vault/docs/commands#environment-variables)\nare supported. Minimally ``VAULT_ADDR`` must be specified as a URL to the\nVault server. Additionally, to support\n[AppRole](https://developer.hashicorp.com/vault/docs/auth/approle) authentication\n``VAULT_APPROLE_ROLE_ID`` and ``VAULT_APPROLE_SECRET_ID`` are supported. If\nthese variables are found in the environment AppRole authentication will be\nautomatically attempted and failure of that will cause the server to fail\nstarting.\n\nOnce the proper environment variables are setup, enable\nVault integration by passing ``--enable-vault`` and\n``--vault-path=secret-path`` on the command line. For example, assuming that\nyou have the AWS back-end mounted at ``aws/`` in Vault and you want to use an\nIAM user credential called ``email-server``, run the proxy like so:\n\n```\nVAULT_ADDR=\"https://your-vault-server:8200/\" \\\nVAULT_APPROLE_ROLE_ID=\"...\" \\\nVAULT_APPROLE_SECRET_ID=\"...\" \\\n    ./ses-smtpd-proxy --enable-vault \\\n        --vault-path=aws/creds/email-server localhost:2500\n```\n\n## Prometheus Integration\nBy default the server will log some Prometheus metrics for messages\nsent and errors. The Prometheus metrics will be served on ``:2501``\nat the path ``/metrics`` by default. The bind address and port can be\ncustomized by passing ``--prometheus-bind=bind-string`` in the format\nexpected by Go's http.Server.\n\nPrometheus metric serving (though not metric aggregation) can be\ndisabled by passing ``--disable-prometheus`` on the command line.\n\n## Health Check Integration\n\nA simple health check can be enabled by passing `--enable-health-check` \non the command line. A JSON response will be served on `:3000` at the \npath `/health` by default. The bind address and port can be\ncustomized by passing `--health-check-bind=bind-string` in the format\nexpected by Go's http.Server. A sample response:\n\n```json\n{ \"name\": \"ses-smtp-proxy\", \"status\": \"ok\", \"version\": \"v1.3.0\" }\n```\n\n## Usage\nBy default the command takes no arguments and will listen on port 2500 on all\ninterfaces. The listen interfaces and port can be specified as the only\nargument separated with a colon like so:\n\n```\n./ses-smtpd-proxy 127.0.0.1:2600\n```\n\nIf not using the Vault integration noted above, it is expected that your\nenvironment is configured in some way that is supported by the AWS SDK.\n\n## Security Warning\nThis server speaks plain unauthenticated SMTP (no TLS) so it's not suitable for\nuse in an untrusted environment nor on the public internet. I don't have these\nuse-cases but I would accept pull requests implementing these features if you\ndo have the use-case and want to add them.\n\n## Building\nTo build the binary run `make ses-smtpd-proxy`.\n\nTo build a Docker image, which is based on Alpine Latest, run `make docker` or\n`make publish`. The later command will build and push the image. To override\nthe defaults specify `DOCKER_REGISTRY`, `DOCKER_IMAGE_NAME`, and `DOCKER_TAG`\nin the make command like so:\n\n```\nmake DOCKER_REGISTRY=reg.example.com DOCKER_IMAGE_NAME=ses-proxy DOCKER_TAG=foo docker\n```\n## Contributing\nIf you would like to contribute please visit the project's GitHub page and open\na pull request with your changes. To have the best experience contributing,\nplease:\n\n* Don't break backwards compatibility of public interfaces\n* Update the readme, if necessary\n* Follow the coding style of the current code-base\n* Ensure that your code is formatted by gofmt\n* Validate that your changes work with Go 1.21+\n\nAll code is reviewed before acceptance and changes may be requested to better\nfollow the conventions of the existing API.\n\n## Contributors\nThis project is made possible by the contributions of the following\nindividuals; listed here in the order they first contributed to the\nproject.\n\n* Mike Crute (@mcrute)\n* Thomas Dupas (@thomasdupas)\n* Quentin Loos (@Kent1)\n* Moriyoshi Koizumi (@moriyoshi)\n* Jesse Mandel (@supergibbs)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcrute%2Fses-smtpd-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmcrute%2Fses-smtpd-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcrute%2Fses-smtpd-proxy/lists"}