{"id":15147046,"url":"https://github.com/networkimprov/mnm","last_synced_at":"2025-05-07T15:42:30.804Z","repository":{"id":41168831,"uuid":"92625140","full_name":"networkimprov/mnm","owner":"networkimprov","description":"mnm implements TMTP protocol. Let Internet sites message members directly, instead of unreliable, insecure email. Contributors welcome! (Server)","archived":false,"fork":false,"pushed_at":"2023-01-15T08:36:02.000Z","size":365,"stargazers_count":226,"open_issues_count":9,"forks_count":10,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-31T11:35:23.937Z","etag":null,"topics":["chat","e-mail","email","golang","imap","jmap","linux","macos","messaging","smtp","tmtp","windows","xmpp"],"latest_commit_sha":null,"homepage":"https://mnmnotmail.org","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/networkimprov.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}},"created_at":"2017-05-27T21:30:45.000Z","updated_at":"2025-03-22T10:33:12.000Z","dependencies_parsed_at":"2023-02-09T21:30:29.613Z","dependency_job_id":null,"html_url":"https://github.com/networkimprov/mnm","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/networkimprov%2Fmnm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkimprov%2Fmnm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkimprov%2Fmnm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkimprov%2Fmnm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/networkimprov","download_url":"https://codeload.github.com/networkimprov/mnm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252907964,"owners_count":21823309,"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":["chat","e-mail","email","golang","imap","jmap","linux","macos","messaging","smtp","tmtp","windows","xmpp"],"created_at":"2024-09-26T12:21:47.648Z","updated_at":"2025-05-07T15:42:30.779Z","avatar_url":"https://github.com/networkimprov.png","language":"Go","readme":"### mnm is not mail[\u003cimg width=\"200\" hspace=\"50\" align=\"right\" src=\"https://user-images.githubusercontent.com/458838/65545951-535f6980-decb-11e9-8f46-6122198097b0.png\"\u003e](https://mnmnotmail.org)\n\nThe mnm project is building a legitimate replacement for email: \na server (see below), \na [client](https://github.com/networkimprov/mnm-hammer), and \na [simple protocol](Protocol.md) between them.\n\nLearn more at [mnmnotmail.org](https://mnmnotmail.org). \n\n\n### Server status\n\n[_11 December 2020_ - v0.1](https://github.com/networkimprov/mnm/releases/latest)\nis released for Linux! \n\n_13 April 2019_ -\nA private preview is now live! Contact the author if you'd like to try it.\n\n_19 August 2018_ -\nAfter testing with mnm client, made a handful of fixes. Changed license to MPL.\n\n_25 September 2017_ -\nA [client application](https://github.com/networkimprov/mnm-hammer) is in development.\n\n_3 August 2017_ -\nA simulation of 1000 concurrent active clients \ndelivers 1 million messages totaling 6.7GB in 46 minutes. \nIt uses ~200MB RAM, \u003c10MB disk, and minimal CPU time. \nEach client runs a 19-step cycle that does login, then post for two recipients (15x) \nor for a group of 100 (2x) every 1-30s, then logout and idle for 1-30s. \n\n\n### Quick start\n\n1. Download binary or build from source  \na) Get [mnm-tmtpd-linux-amd64-v0.1.0.tgz](https://github.com/networkimprov/mnm/releases/download/v0.1.0/mnm-tmtpd-linux-amd64-v0.1.0.tgz)  \nb) Extract with `tar xzf mnm-tmtpd-linux-amd64-v0.1.0.tgz`  \nor  \na) `go get github.com/networkimprov/mnm`  \n\n1. Enable TCP+TLS with self-signed certificate  \na) `cd mnm`  \nb) `openssl ecparam -genkey -name secp384r1 -out server.key`  \nc) `openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650`  \nd) `cp mnm.conf mnm.config` # edit to revise ntp.hosts and adjust listen.laddr with \"host:port\"  \n\n   Note: On a public Internet host, port 443 will see a steady trickle of probe requests \n   (often with malicious intent) which pollutes the mnm log. \n   Choose a port above 1024 to avoid this. \n\n1. Run server  \na) `./mnm` # default port 443 may require `sudo ./mnm`; logs to stdout \u0026 stderr  \nb) _Ctrl-C_ to stop  \nor  \na) `./mnm \u003e\u003e logfile 2\u003e\u00261 \u0026` # run in background, logs to end of logfile  \nb) `kill -s INT \u003cbackground_pid\u003e` # send SIGINT signal, triggering graceful shutdown\n\n1. Distribute the server address to users  \n+\u0026nbsp; Use `=address:port` for a self-signed certificate, for example `=192.168.1.2:3456`  \n+\u0026nbsp; Use `+address:port` for a CA-issued certificate, for example `+mnm.example.com:443`  \n\n\n### Configuration\n\nThe file \"mnm.config\" contains a JSON object with these fields.\n\nThe `ntp` (network time protocol) object defines:  \n`hosts` - an array of NTP servers  \n`retries` - the number of times to retry each host  \n\nThe `listen` object defines:  \n`net` \u0026 `laddr` - arguments to `net.ListenConfig.Listen(nil, net, laddr)`  \n`certPath` \u0026 `keyPath` - arguments to `tls.LoadX509KeyPair(certPath, keyPath)`  \n\nThe `name` parameter defines the server's `tmtprev` response `.name` field.\n\nThe `auth` parameter defines where third party authentication is required:  \n`0` - not supported  \n`1` - required for registration  \n`2` - required for registration and login (not yet implemented)  \n\nThe `authby` array defines a set of objects describing OpenID Connect providers:  \n`label` - the name of the OIDC provider/application  \n`login` - an array giving the base URL, followed by name=value request parameters, for OIDC `/authorize`  \n`token` - an array giving the base URL, followed by name=value request parameters, for OIDC `/token`  \n`std` - an array of name=value request parameters to append to both `login` \u0026 `token` requests  \n`keys` - the URL for the public key needed to validate tokens provided by OIDC authentication  \n`iss` \u0026 `aud` - expected values for claims in the `.id_token` field of OIDC tokens  \n\nIf the first `authby` object is empty, OpenID Connect authentication is optional. \nThis is useful for testing.\n\n\n### Build \u0026 package\n\nAssuming this repository has been obtained via `git clone`:\n\na) `cd mnm`  \nb) `git stash` # if required  \nc) `git checkout \u003cyour_branch\u003e`  \nd) Edit _kVersionDate_ in main.go  \ne) `./pkg.sh` # make release downloads\n\n\n### Testing\n\nContinuous test sequence with simulated clients  \na) `./mnm 10 \u003e /dev/null` # may be 2-1000  \nb) ctrl-C to stop\n\nThe file `test.json` gives a sequence of requests and expected results, \nwhich runs prior to the continuous test. \nIt includes invalid requests, which print messages to stderr.\n\n\n### What's here\n\n- codestyle.txt: how to make Go source more clear\n- qlib/: TMTP implementation\n- test.json: qlib test data\n- userdb.go: user \u0026 group records management\n- userdb-test.go: userdb test procedure\n- main.go: main(), network frontend\n- mnm.conf: site-specific parameters; rename to mnm.config to enable TCP server\n- mnm: the server executable\n- After first run:  \n  userdb/: user \u0026 group data  \n  qstore/: queued messages awaiting delivery\n\n\n### License\n\nCopyright 2020 Liam Breck  \nPublished at https://github.com/networkimprov/mnm\n\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at http://mozilla.org/MPL/2.0/\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetworkimprov%2Fmnm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetworkimprov%2Fmnm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetworkimprov%2Fmnm/lists"}