{"id":13713335,"url":"https://github.com/camdram/email-webtools","last_synced_at":"2026-02-24T01:45:27.409Z","repository":{"id":38826173,"uuid":"189879144","full_name":"camdram/email-webtools","owner":"camdram","description":"A tiny micro-service to ensure that Camdram can send \u0026 receive emails 24/7/365","archived":false,"fork":false,"pushed_at":"2023-08-31T22:21:42.000Z","size":656,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-06T23:36:31.784Z","etag":null,"topics":["cambridge","devops","email","go","micro-service"],"latest_commit_sha":null,"homepage":null,"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/camdram.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":"2019-06-02T18:07:23.000Z","updated_at":"2022-07-27T16:16:22.000Z","dependencies_parsed_at":"2024-05-13T00:32:59.573Z","dependency_job_id":"db2f0e8c-733d-469b-a544-9da6df1142b0","html_url":"https://github.com/camdram/email-webtools","commit_stats":{"total_commits":100,"total_committers":3,"mean_commits":"33.333333333333336","dds":0.24,"last_synced_commit":"f33d58565248059988c893c4495aa66cfdb05bcf"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/camdram/email-webtools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camdram%2Femail-webtools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camdram%2Femail-webtools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camdram%2Femail-webtools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camdram%2Femail-webtools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/camdram","download_url":"https://codeload.github.com/camdram/email-webtools/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camdram%2Femail-webtools/sbom","scorecard":{"id":263594,"data":{"date":"2025-08-11","repo":{"name":"github.com/camdram/email-webtools","commit":"5dc812587e8315b32b7f6e67a3284f905a0571c8"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/11 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating golang:1.21.0 to golang:1.21.0@sha256:b490ae1f0ece153648dd3c5d25be59a63f966b5f9e1311245c947de4506981aa","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.2.1 not signed: https://api.github.com/repos/camdram/email-webtools/releases/39029617","Warn: release artifact v2.2.0 not signed: https://api.github.com/repos/camdram/email-webtools/releases/38898749","Warn: release artifact v2.1.0 not signed: https://api.github.com/repos/camdram/email-webtools/releases/38034433","Warn: release artifact v2.0.0 not signed: https://api.github.com/repos/camdram/email-webtools/releases/38021854","Warn: release artifact v2.2.1 does not have provenance: https://api.github.com/repos/camdram/email-webtools/releases/39029617","Warn: release artifact v2.2.0 does not have provenance: https://api.github.com/repos/camdram/email-webtools/releases/38898749","Warn: release artifact v2.1.0 does not have provenance: https://api.github.com/repos/camdram/email-webtools/releases/38034433","Warn: release artifact v2.0.0 does not have provenance: https://api.github.com/repos/camdram/email-webtools/releases/38021854"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":-1,"reason":"internal error: internal error: Client.Checks.ListCheckRunsForRef: error during graphqlHandler.setupCheckRuns: non-200 OK status code: 502 Bad Gateway body: \"\u003chtml\u003e\\r\\n\u003chead\u003e\u003ctitle\u003e502 Bad Gateway\u003c/title\u003e\u003c/head\u003e\\r\\n\u003cbody\u003e\\r\\n\u003ccenter\u003e\u003ch1\u003e502 Bad Gateway\u003c/h1\u003e\u003c/center\u003e\\r\\n\u003chr\u003e\u003ccenter\u003enginx\u003c/center\u003e\\r\\n\u003c/body\u003e\\r\\n\u003c/html\u003e\\r\\n\"","details":null,"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T11:23:49.788Z","repository_id":38826173,"created_at":"2025-08-17T11:23:49.788Z","updated_at":"2025-08-17T11:23:49.788Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29767484,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-24T01:40:24.820Z","status":"ssl_error","status_checked_at":"2026-02-24T01:39:15.130Z","response_time":90,"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":["cambridge","devops","email","go","micro-service"],"created_at":"2024-08-02T23:01:33.098Z","updated_at":"2026-02-24T01:45:27.369Z","avatar_url":"https://github.com/camdram.png","language":"Go","funding_links":[],"categories":["Repositories"],"sub_categories":[],"readme":"# Camdram Email Web Tools\n\n`email-webtools` is a small micro-service written in Go that we at Camdram use to monitor our Email systems and ensure that email receipt and delivery is functioning as expected.\n\n## How does it work?\n\nAt Camdram we use [Postal](https://postal.atech.media/) for the sending and receiving of emails. This service connects to the Postal database in MySQL (technically MariaDB) and, when a correctly authenticated HTTP request is made, executes queries to determine the length of the mail queue and the volume of held mail.\n\nQueued messages are messages that are actively awaiting delivery. Held messages are those that have been put to one side and will not be delivered, needing manual intervention.\n\n## Compiling\n\nWe compile the project down to a single statically-linked executable which avoids having to install the entire Go toolchain on our server. Both of the methods detailed below produce a single `email-webtools` binary file in your working directory.\n\n### Docker\n\nFirst [install Docker](https://docs.docker.com/install/) and then run the following in a terminal window:\n\n```bash\ndocker build -t camdram/email-webtools:latest .\ndocker run --rm -v ${PWD}:/app camdram/email-webtools:latest\n```\n\n### Old School\n\nYou will need to install version 1.21.0 of the Go programming language (see [here](https://golang.org/doc/install#install) for details). Then run the build using the included Makefile:\n\n```bash\nmake clean\nmake all\n```\n\n## Deploying\n\nYou'll need to create a `.env` config file to house the authentication settings. This should contain something along the following lines:\n\n```\nHTTP_SERVER: hostname\nHTTP_PORT: 8080\nHTTP_AUTH_TOKEN: yourauthtoken\nMYSQL_USER: username\nMYSQL_PASSWORD: password\nMAIN_DB: postal\nSERVER_DB: postal-server-1\nSMTP_TO: address1@example.com,address2@example.com\n```\n\n---\n\n### Copyright\n\nThe code in this Git repository is released under the [MIT License](https://en.wikipedia.org/wiki/MIT_License).\n\nCopyright (c) 2019 various members of the Camdram Web Team and other contributors.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcamdram%2Femail-webtools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcamdram%2Femail-webtools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcamdram%2Femail-webtools/lists"}