{"id":19190551,"url":"https://github.com/indigoparadox/smtputt","last_synced_at":"2026-06-23T01:30:15.519Z","repository":{"id":112698147,"uuid":"234687960","full_name":"indigoparadox/smtputt","owner":"indigoparadox","description":"A super-simple outgoing SMTP proxy to fix e-mails generated by broken software","archived":false,"fork":false,"pushed_at":"2021-03-25T23:42:08.000Z","size":91,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-04T06:41:56.790Z","etag":null,"topics":["e-mail","kludge","smtp"],"latest_commit_sha":null,"homepage":null,"language":"Python","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/indigoparadox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2020-01-18T05:43:17.000Z","updated_at":"2024-01-16T16:26:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"aaeb1ef1-7e9b-4caf-b8e1-19a3145b0d62","html_url":"https://github.com/indigoparadox/smtputt","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indigoparadox%2Fsmtputt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indigoparadox%2Fsmtputt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indigoparadox%2Fsmtputt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indigoparadox%2Fsmtputt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/indigoparadox","download_url":"https://codeload.github.com/indigoparadox/smtputt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240266906,"owners_count":19774081,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["e-mail","kludge","smtp"],"created_at":"2024-11-09T11:34:51.398Z","updated_at":"2026-06-23T01:30:15.437Z","avatar_url":"https://github.com/indigoparadox.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SMTPutt\n\n![Tests](https://github.com/indigoparadox/smtputt/actions/workflows/tests.yaml/badge.svg)\n\n## Installation\n\n### Linux/*BSD\n\nSMTPutt looks for its configuration first in ~smtputt/.smtputt.ini, then in /etc/smtputt.ini.\n\n### Windows (as a Service)\n\nBefore the SMTPutt service may be used, the pywin32 module must be installed manually, and a valid configuration must exist in %site-packages%\\\\smtputt\\\\svc\\\\smtputt.ini (e.g. c:\\\\python3\\\\site-packages\\\\smtputt\\\\svc\\\\smtputt.ini).\n\nTo install and configure pywin32 and SMTPutt:\n\n* pip install pywin32\n* [path to python dir]\\scripts\\pywin32_postinstall.py -install\n* python -m smtputt.svc install\n\n## Configuration\n\nConfiguration is stored in an ini file, with the following sections:\n\n### \\[server\\]\n\n* **listenhost** (optional, default 0.0.0.0)\n\n  Local address on which SMTPutt should listen for incoming messages.\n\n* **listenport** (optional, default 25)\n\n  Local port on which SMTPutt should listen for incoming messages.\n\n* **fixermodules** (optional)\n\n  Module paths for modules which will be applied to \"fix\" any mail passing through the SMTPutt relay.\n\n* **relaymodules** (optional)\n\n  Modules which will be used to relay incoming mail. SMTPutt is rather useless without any relay modules.\n\n* **authmodules** (optional)\n\n  Module paths for modules used to authorize sending mail through the SMTPutt relay. Modules will be tried in order until one succeeds.\n\n* **authrequired** (optional, default False)\n\n  Whether authorization is required to send mail through the SMTPutt relay.\n\n* **mynetworks** (optional, default 127.0.0.1)\n\n  A comma-separated list of network addresses (in CIDR form e.g. 0.0.0.0/0) from which the server should accept mail.\n\nIndividual module configurations should be placed in the ini file under a section named for their module path. e.g. configuration for smtputt.authorizers.ldap should go in a section named \\[smtputt.authorizers.ldap\\].\n\n## Authorizers\n\nThe following are authorizers that may be specified in the authmodule= line in the configuration file.\n\n### smtputt.authorizers.ldap\n\nThis authorizer attempts to simply bind to an LDAP server provided with the credentials provided to the SMTP server.\n\n#### Configuration\n\n* **ldapurl**\n\n  A URL indicating the remote LDAP host to use in the form of ldap://ldap-server:port. To use TLS, replace \"ldap://\" with \"ldaps://\".\n\n* **ldapdnformat**\n\n  DN format to use for usernames to bind to LDAP server. %u is replaced with the username provided to the SMTP server.\n\n* **ldapssl** (optional, default false)\n\n  'true' if TLS should be used to connect to LDAP server, otherwise 'false'.\n\n### smtputt.authorizers.dictauth\n\nThis authorizer compares the username and password to a static dictionary provided in the configuration.\n\n#### Configuration\n\n* **authdict**\n\n  Dictionary of users in the format user1:password1,user2:password2\n\n## Relays\n\n### smtputt.relays.smtp\n\n#### Configuration\n\n* **smtpurl**\n\n  A URL indicating the remote SMTP relay host to use in the form of smtp://username:password@smtp-server:port. To use TLS, replace \"smtp://\" with \"smtps://\". If port is omitted, port 25 will be used automatically.\n\n### smtputt.relays.mqtt\n\n#### Configuration\n\n* **mqttserver**\n\n  Address of the MQTT server SMTPutt should publish received messages to.\n\n* **mqttport**\n\n  MQTT port on the remote server.\n\n* **mqttuid**\n\n  UID to use on the remote server. This will have a random string appended to it, to facilitate multiple connections.\n\n* **mqttssl** (optional, default 'false')\n\n  'true' if TLS should be used to connect to the MQTT server, 'false otherwise.\n\n* **mqttca** (optional, required if mqttssl is 'true')\n\n  Local filesystem path to a root certificate used to validate MQTT server certificate.\n\n* **mqtttopic**\n\n  Topic to publish received messages to. Uses the replacement tokens below:\n\n| Token    | Replacement           |\n| -------- | --------------------- |\n| %s       | Message subject       |\n| %t       | Message To: address   |\n| %f       | Message From: address |\n\n## Fixers\n\n### smtputt.fixers.fromdate\n\n#### Configuration\n\n### smtputt.fixers.fromaddress\n\n#### Configuration\n\n* **fromaddress**\n\n  E-mail address which should replace the From: address on messages forwarded through SMTPutt.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Findigoparadox%2Fsmtputt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Findigoparadox%2Fsmtputt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Findigoparadox%2Fsmtputt/lists"}