{"id":19068434,"url":"https://github.com/bobbylite/mailinatorrouterservice","last_synced_at":"2026-06-20T19:31:10.941Z","repository":{"id":48021851,"uuid":"172438672","full_name":"bobbylite/MailinatorRouterService","owner":"bobbylite","description":"Mailinator Public Inbox Router.  Way to persist temp inbox messages with specified subject keys. ","archived":false,"fork":false,"pushed_at":"2022-12-09T14:51:03.000Z","size":13822,"stargazers_count":1,"open_issues_count":8,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-22T03:29:20.986Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bobbylite.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-25T05:14:16.000Z","updated_at":"2024-08-13T23:50:47.000Z","dependencies_parsed_at":"2023-01-25T14:15:13.676Z","dependency_job_id":null,"html_url":"https://github.com/bobbylite/MailinatorRouterService","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/bobbylite/MailinatorRouterService","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobbylite%2FMailinatorRouterService","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobbylite%2FMailinatorRouterService/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobbylite%2FMailinatorRouterService/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobbylite%2FMailinatorRouterService/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bobbylite","download_url":"https://codeload.github.com/bobbylite/MailinatorRouterService/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobbylite%2FMailinatorRouterService/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34583589,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-20T02:00:06.407Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-11-09T01:08:05.671Z","updated_at":"2026-06-20T19:31:10.922Z","avatar_url":"https://github.com/bobbylite.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mailinator Routing Micro Service \nThis is a simple solution for Mailinators temporary inbox.  This micro service reads a public temporary inbox hosted by Mailinator, and will retrieve a plain text or HTML email and forward it to a private email address.  Both the public temporary Mailinator inbox, and the permanent destination email inbox are configurable. \n\nThis was created to poll inboxes until it finds a specified piece of information in any given email in any given inbox. The information it is matching against can be specified (Subject, email content, sender address).\n\n## A little bit about the project\nThis is an IOC DI architecture. \nMuch thanks to Inversify for Inversion of control Dependency injection in this Typescript mailing router micro service. \n\nLearned a lot from this article by Samuele Resca to get a basic IOC app up and running: https://medium.com/@samueleresca/inversion-of-control-and-dependency-injection-in-typescript-3040d568aabe Thank you! \n\nTypescript article by André Gardi: https://medium.com/javascript-in-plain-english/typescript-with-node-and-express-js-why-when-and-how-eb6bc73edd5d\nThank you André! \n\n## Install\n\nInstall the node packages via:\n\n`$ npm install --save`\n\n## Starting\n\nTo start the app in production mode, first compile the TypeScript code:\n\n`$ npm run tsc`\n\nAnd then run production code: \n\n`$ npm run prod`\n\nTo start the app in development mode:\n\n`$ npm run dev`\n\n## Moving On From Here...\n\nWhile testing use the following command to compile and then serve the application. \n\n`$ npm run dev`\n\nTo test the default get handler use the following curl command (Assuming curl is already installed).\n\n`curl http://127.0.0.1:8080`\n\n## Data binding\n\nInside the app directory, there will be a \"Models\" directy.  This is where all our data models will be stored and accessed. You must modify the following: NodeMailerSenderAccount, DestinationEmail, and FilePath.\n\n#### NodeMailerSenderAccount\nThe email account for Nodemailer (SendingEmail) MUST have \"Allow less secure apps\" turned on and enabled in google's account settings for this to work. \n\nApp\\Model\\NodeMailerSenderAccount.ts\n``` javascript \nexport const SendingEmail = 'example@gmail.com'; \nexport const SendingEmailPassword = \"examplePassword\"; \n```\n\n#### DestinationEmail\nThe email account where NodeMailer will send the matching data to.  This is the inbox where the all mailinator data will be persisted. \n\nApp\\Model\\DestinationEmail.ts\n``` javascript \nexport const DestinationEmail = \"destinationAddress@example.com\"; \n```\n\n#### Excel Sheet FilePath\nThe file path to the excel sheet where the workbook is parsed. \n\nApp\\Model\\FilePath.ts\n``` javascript \nexport const FilePath: string = \"/Users/user/Downloads/Example.xlsx\";\n```\n#### Excel Sheet Logic\nThis can be changed depending on what column/rows the excelsheet has within it.  Below I will show a simple version of what it's doing. \n\nApp\\Application\\Services\\ExcelReaderService.ts\n``` javascript\nimport * as XLSX from \"xlsx\";\n\nexport class ExcelReaderService {\n\n    private PollingInterval: number = 1000;\n    \n    public async Read(file: string): Promise\u003cvoid\u003e {\n        try {\n            var WorkBook: any = XLSX.readFile(file);\n            var FirstWorkSheet: object = WorkBook.Sheets[WorkBook.SheetNames[0]];\n            var WorkSheetJson: object = XLSX.utils.sheet_to_json(FirstWorkSheet);\n            \n            this.ParseWorkSheet(WorkSheetJson);\n        } catch (err) {\n\n        }\n    }\n\n    private ParseWorkSheet(jsonData: any) : void {\n        jsonData.forEach((row: any, index: number) =\u003e {\n            try {\n                setTimeout(async() =\u003e {\n                    if (typeof row['EMAIL LABEL'] == 'undefined') return;\n                    console.log(row['EMAIL LABEL']);\n                }, this.PollingInterval * index);\n            } catch (err) {\n\n            }\n        });\n    }\n\n}\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbobbylite%2Fmailinatorrouterservice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbobbylite%2Fmailinatorrouterservice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbobbylite%2Fmailinatorrouterservice/lists"}