{"id":16817225,"url":"https://github.com/ssddanbrown/mailbag","last_synced_at":"2025-11-06T03:30:25.841Z","repository":{"id":39583702,"uuid":"322943641","full_name":"ssddanbrown/mailbag","owner":"ssddanbrown","description":"MIGRATED TO CODEBERG -- A simple plaintext email send app based on Laravel","archived":true,"fork":false,"pushed_at":"2024-05-15T20:59:11.000Z","size":2346,"stargazers_count":72,"open_issues_count":1,"forks_count":1,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-10-26T21:27:24.633Z","etag":null,"topics":["emails","laravel","php","plaintext-emails"],"latest_commit_sha":null,"homepage":"https://codeberg.org/danb/mailbag","language":"PHP","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/ssddanbrown.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["ssddanbrown"],"ko_fi":"ssddanbrown"}},"created_at":"2020-12-19T21:46:55.000Z","updated_at":"2024-10-14T23:24:47.000Z","dependencies_parsed_at":"2024-05-16T07:29:43.745Z","dependency_job_id":null,"html_url":"https://github.com/ssddanbrown/mailbag","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssddanbrown%2Fmailbag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssddanbrown%2Fmailbag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssddanbrown%2Fmailbag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssddanbrown%2Fmailbag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ssddanbrown","download_url":"https://codeload.github.com/ssddanbrown/mailbag/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239479549,"owners_count":19645763,"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":["emails","laravel","php","plaintext-emails"],"created_at":"2024-10-13T10:46:35.675Z","updated_at":"2025-11-06T03:30:25.804Z","avatar_url":"https://github.com/ssddanbrown.png","language":"PHP","readme":"# MailBag\n\n[![PHPUnit](https://github.com/ssddanbrown/mailbag/workflows/PHPUnit/badge.svg)](https://github.com/ssddanbrown/mailbag/actions/workflows/phpunit.yml)\n[![Maintainability](https://api.codeclimate.com/v1/badges/303b6c55a668b92adb5a/maintainability)](https://codeclimate.com/github/ssddanbrown/mailbag/maintainability)\n[![StyleCI](https://github.styleci.io/repos/322943641/shield?branch=main)](https://github.styleci.io/repos/322943641?branch=main)\n\nMailBag is a simple plaintext-focused email manager. The application has been purpose-built for a fairly simple use-case. Due to limited time, I don't have much of a desire to widen the scope.\n\n## Screenshots\n\n\u003ctable\u003e\n\t\u003ctbody\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd width=\"33%\"\u003e\n\t\t\t\tHome Dashboard\n\t\t\t\t\u003cimg src=\"https://github.com/ssddanbrown/mailbag/raw/main/screenshots/dashboard.png\"\u003e\n\t\t\t\u003c/td\u003e\n\t\t\t\u003ctd width=\"33%\"\u003e\n\t\t\t\tCampaign\n\t\t\t\t\u003cimg src=\"https://github.com/ssddanbrown/mailbag/raw/main/screenshots/campaign.png\"\u003e\n\t\t\t\u003c/td\u003e\n\t\t\t\u003ctd width=\"33%\"\u003e\n\t\t\t\tEdit Send\n\t\t\t\t\u003cimg src=\"https://github.com/ssddanbrown/mailbag/raw/main/screenshots/send.png\"\u003e\n\t\t\t\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003ctable\u003e\n\t\u003ctbody\u003e\n\t\t\u003ctr\u003e\n\t\t\t\u003ctd width=\"50%\"\u003e\n\t\t\t\tList Signup\n\t\t\t\t\u003cimg src=\"https://github.com/ssddanbrown/mailbag/raw/main/screenshots/signup.png\"\u003e\n\t\t\t\u003c/td\u003e\n\t\t\t\u003ctd width=\"50%\"\u003e\n\t\t\t\tUnsubscribe\n\t\t\t\t\u003cimg src=\"https://github.com/ssddanbrown/mailbag/raw/main/screenshots/unsubscribe.png\"\u003e\n\t\t\t\u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\n## Features\n\n- One-off sends of plaintext emails.\n- List management with user-signup form \u0026 email confirmation flow.\n- List level \u0026 contact-level unsubscribe options via links in sends.\n- RSS feed sends, sending emails every set number of days with new items from the feed.\n- Auto-scheduled unsubscribed contact scrubbing.\n- [hCaptcha](https://www.hcaptcha.com/) integration on sign-up forms.\n\n## Limitations\n\n- Plain text emails only, No HTML emails.\n- No open/click tracking of any kind.\n- No scheduled sends.\n- Limited built-in customization.\n- Requires SMTP service for actual email sending.\n- Weak mobile support within admin interface.\n\n## Alternative Apps\n\nHere are some much fuller-featured alternatives to MailBag:\n\n- [Keila](https://github.com/pentacent/keila)\n- [phpList](https://www.phplist.com/)\n- [Mailcoach](https://mailcoach.app/)\n- [listmonk](https://listmonk.app/)\n- [Mautic](https://www.mautic.org/)\n\n## Contributing\n\nAs said above, Due to limited time I don't want to widen the scope and stack on features, especially with there already being good alternatives as listed above. However, if you find some bugs or can provide fixes to existing functionality feel free to provide them. \n\n## Attribution \u0026 Tech Stack\n\nMailBag is built using the following great projects:\n\n- [Laravel](https://laravel.com)\n- [Tailwind](https://tailwindcss.com) / [TailwindUI](https://tailwindui.com)\n- [CodeMirror](https://codemirror.net/)\n- [SQLite](https://sqlite.org/index.html)\n\n## Install\n\nThe below outlines the process for install, but it's really intended for those with a little experience with webservers and modern PHP software. It's a fairly involved process. For further help you can try searching for \"Laravel install\" guides since the process will be much the same due to the app being built upon Laravel.\n\nSome guidance and a nginx example can be seen on the Laravel docs here: https://laravel.com/docs/8.x/deployment#server-requirements.\n\n#### Requirements\n\nMailBag has the following requirements:\n\n- PHP \u003e 8.1\n  - Extensions: BCMath, Ctype, Fileinfo, JSON, Mbstring, OpenSSL, PDO, Tokenizer, XML, SQLite3\n- SQLite \u003e 3.30\n- [Composer](https://getcomposer.org/)\n- Ideally Nginx, Apache or similar kind of server to handling incoming requests.\n- SMTP service for sending the emails.\n- NodeJS v18+ \u0026 NPM\n\nYou'll also need command-line access on the host including the ability to configure cron and process management. Using git will help with keeping the codebase versions for managing updates.\n\n#### Initial Installation Steps\n\n```shell\n# Clone down the project files using git\ngit clone https://github.com/ssddanbrown/mailbag.git\n\n# cd into the application folder and install the dependencies via composer\ncomposer install --no-dev\n\n# Copy the .env.example file to .env and fill with your own details\ncp .env.example .env # (Then go through each option in there)\n\n# Set the application key\nphp artisan key:generate\n\n# Create the storage/database/database.sqlite file\ntouch storage/database/database.sqlite\n\n# Migrate the database\nphp artisan migrate\n\n# Install and build JS/CSS dependencies\nnpm install\nnpm run build\n\n# Check the storage/ and boostrap/cache (and all subfolders) are writable by the webserver, Commands reflect ubuntu common defaults\nchown -R www-data:www-data storage/ boostrap/cache/\n\n# Set up your webserver with the root pointing at the `public/` folder. (Nginx \"root\" or Apache \"DocumentRoot\"). \n# Done! Login at the `/login` path of the domain you configured mailbag on. (eg. http://domain/login)\n```\n\n#### Scheduler Setup\n\nThe application has some scheduled tasks such as contact cleanup and RSS feed checking. For this, you need to add a cron entry that runs evey minute like so:\n\n```shell\n* * * * * cd /path-to-your-project \u0026\u0026 php artisan schedule:run \u003e\u003e /dev/null 2\u003e\u00261\n```\n\nYou'll need to change the `path-to-your-project` to be where your mailbag folders are. It'll be wise to setup the cron as someone that'll have permission to read \u0026 write the app files, including the folders that you may have changed permissions for to grant the webserver access.\n\n#### Queue Worker Setup\n\nMailBag uses queues for common operations such as sending mail and processing RSS feeds. For very small setups you could get away with not using a queue, but it'd be risky due to various PHP timeouts. \n\nThe Laravel docs have some details in using `supervisor` to run a queue: https://laravel.com/docs/8.x/queues#installing-supervisor\n\nAlternatively you could create a `systemd` service like so:\n\n```\n[Unit]\nDescription=MailBag Queue\n\n[Service]\nUser=www-data\nGroup=www-data\nRestart=always\nExecStart=/usr/bin/php /path-to-your-project/artisan queue:work --sleep=3 --tries=1\n\n[Install]\nWantedBy=multi-user.target\n```\n\n## Testing\n\nThis project uses phpunit for testing. Tests are located within the `tests/` directory.\nYou can run the tests using:\n\n```shell\n./vendor/bin/phpunit\n```\n\nThis project uses [Larastan](https://github.com/nunomaduro/larastan), an extension of PHPStan,\nfor static analysis. You can run static analysis checks using:\n\n```shell\n./vendor/bin/phpstan analyse\n```\n","funding_links":["https://github.com/sponsors/ssddanbrown","https://ko-fi.com/ssddanbrown"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fssddanbrown%2Fmailbag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fssddanbrown%2Fmailbag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fssddanbrown%2Fmailbag/lists"}