|
1 | 1 | # MailVoid |
2 | 2 |
|
3 | | -MailVoid is a developer-focused email testing tool that simplifies managing multiple test email addresses without creating separate email accounts. It integrates with your mail server via webhooks to capture and organize test emails in a clean web interface. |
| 3 | +A developer email testing tool that captures and organizes test emails without creating separate email accounts. It integrates with your mail server via webhooks and provides a clean web interface for viewing and managing messages. It also includes a webhook capture feature for testing HTTP webhooks. |
4 | 4 |
|
5 | 5 |  |
6 | 6 |
|
7 | | -> [!WARNING] |
| 7 | +> [!WARNING] |
8 | 8 | > This project is currently in prototype status. Expect frequent changes and updates. |
9 | 9 |
|
10 | | -## 🚀 Features |
| 10 | +## Features |
11 | 11 |
|
12 | | -- **Backend API**: RESTful API built with C# .NET 10 |
13 | | - - JWT-based authentication with refresh token rotation |
14 | | - - Webhook integration for email capture from your mail server |
15 | | - - Webhook capture feature for testing HTTP webhooks |
16 | | - - Health check endpoints for monitoring |
17 | | - - Real-time notifications via SignalR |
| 12 | +- Receive and store emails via mail server webhooks |
| 13 | +- Organize emails into groups with configurable retention policies |
| 14 | +- Capture and inspect arbitrary HTTP webhooks |
| 15 | +- Real-time notifications via SignalR |
| 16 | +- JWT authentication with refresh token rotation |
| 17 | +- Responsive Angular SPA with dark theme |
18 | 18 |
|
19 | | -- **Web Frontend**: Modern Angular 19 SPA |
20 | | - - Clean, responsive interface for email management |
21 | | - - Email grouping and organization |
22 | | - - Webhook capture and inspection UI |
23 | | - - User settings and password management |
24 | | - - Real-time email and webhook notifications |
25 | | - |
26 | | -- **Database**: MySQL with RoboDodd.OrmLite (Dapper-based) |
27 | | - - Efficient email storage and retrieval |
28 | | - - User management and authentication |
29 | | - - Email grouping with retention policies |
30 | | - - Webhook bucket organization |
31 | | - |
32 | | -## 📋 Requirements |
| 19 | +## Requirements |
33 | 20 |
|
34 | 21 | - .NET 10 SDK |
35 | 22 | - Node.js 22+ and npm |
36 | 23 | - MySQL 8.0+ |
37 | | -- Mail server with webhook support (optional) |
38 | | - |
39 | | -## 🛠️ Installation |
40 | 24 |
|
41 | | -### Clone the Repository |
| 25 | +## Getting Started |
42 | 26 |
|
43 | 27 | ```bash |
44 | 28 | git clone https://github.com/timothydodd/MailVoid.git |
45 | 29 | cd MailVoid |
46 | 30 | ``` |
47 | 31 |
|
48 | | -### Backend Setup |
49 | | - |
50 | | -1. Navigate to the API directory: |
51 | | - ```bash |
52 | | - cd src/MailVoidApi |
53 | | - ``` |
54 | | - |
55 | | -2. Configure your settings in `appsettings.json`: |
56 | | - ```json |
57 | | - { |
58 | | - "ConnectionStrings": { |
59 | | - "DefaultConnection": "Server=localhost;Database=mailvoid;User=root;Password=yourpassword;" |
60 | | - }, |
61 | | - "JwtSettings": { |
62 | | - "Secret": "your-256-bit-secret-key-here", |
63 | | - "Issuer": "MailVoidApi", |
64 | | - "Audience": "MailVoidClient", |
65 | | - "ExpiryMinutes": 15 |
66 | | - } |
67 | | - } |
68 | | - ``` |
69 | | - |
70 | | -3. Start the API (tables are created automatically on startup): |
71 | | - ```bash |
72 | | - dotnet run |
73 | | - ``` |
74 | | - |
75 | | -### Frontend Setup (Development) |
76 | | - |
77 | | -1. Navigate to the web directory: |
78 | | - ```bash |
79 | | - cd src/MailVoidWeb |
80 | | - ``` |
81 | | - |
82 | | -2. Install dependencies: |
83 | | - ```bash |
84 | | - npm install |
85 | | - ``` |
86 | | - |
87 | | -3. Configure the API endpoint in `src/environments/environment.ts` if needed |
88 | | - |
89 | | -4. Start the development server: |
90 | | - ```bash |
91 | | - npm start |
92 | | - ``` |
93 | | - |
94 | | -## 🎯 Usage |
95 | | - |
96 | | -1. Access the application at `http://localhost:8200` (development) or `http://localhost:5133` (production) |
97 | | -2. Log in with default credentials: |
98 | | - - Username: `admin` |
99 | | - - Password: `admin` |
100 | | -3. Configure your mail server to send webhooks to your API endpoint |
101 | | -4. Start receiving and managing test emails! |
102 | | - |
103 | | -## 📝 Available Scripts |
104 | | - |
105 | | -### Backend (.NET API) |
106 | | -```bash |
107 | | -dotnet run # Run the API with frontend proxy |
108 | | -dotnet build # Build the project |
109 | | -dotnet test # Run tests |
110 | | -``` |
| 32 | +### Backend |
111 | 33 |
|
112 | | -### Frontend (Angular) |
113 | 34 | ```bash |
114 | | -npm start # Start development server |
115 | | -npm run build # Build for production |
116 | | -npm run lint # Run ESLint |
117 | | -npm run format # Format code with Prettier |
118 | | -npm test # Run unit tests |
| 35 | +cd src/MailVoidApi |
119 | 36 | ``` |
120 | 37 |
|
121 | | -## 🐳 Docker Support |
| 38 | +Configure `appsettings.json` with your MySQL connection and JWT settings: |
| 39 | + |
| 40 | +```json |
| 41 | +{ |
| 42 | + "ConnectionStrings": { |
| 43 | + "DefaultConnection": "Server=localhost;Database=mailvoid;User=root;Password=yourpassword;" |
| 44 | + }, |
| 45 | + "JwtSettings": { |
| 46 | + "Secret": "your-256-bit-secret-key-here", |
| 47 | + "Issuer": "MailVoidApi", |
| 48 | + "Audience": "MailVoidClient", |
| 49 | + "ExpiryMinutes": 15 |
| 50 | + } |
| 51 | +} |
| 52 | +``` |
122 | 53 |
|
123 | | -Build and run with Docker: |
| 54 | +Start the API (database tables are created automatically): |
124 | 55 |
|
125 | 56 | ```bash |
126 | | -docker build -f src/MailVoidApi/Dockerfile -t mailvoid . |
127 | | -docker run -p 5133:80 mailvoid |
| 57 | +dotnet run |
128 | 58 | ``` |
129 | 59 |
|
130 | | -## 🧪 Development |
| 60 | +### Frontend |
| 61 | + |
| 62 | +```bash |
| 63 | +cd src/MailVoidWeb |
| 64 | +npm install |
| 65 | +npm start |
| 66 | +``` |
131 | 67 |
|
132 | | -### Technologies Used |
| 68 | +Update `src/environments/environment.ts` if your API is not running on the default port. |
133 | 69 |
|
134 | | -**Backend:** |
135 | | -- .NET 10 |
136 | | -- RoboDodd.OrmLite (Dapper-based micro ORM) |
137 | | -- JWT Authentication |
138 | | -- SignalR for real-time updates |
| 70 | +### Default Credentials |
139 | 71 |
|
140 | | -**Frontend:** |
141 | | -- Angular 19 with standalone components |
142 | | -- RxJS for reactive programming |
143 | | -- Lucide icons |
144 | | -- Bootstrap-based custom styling |
145 | | -- ngx-toastr for notifications |
146 | | -- @ng-select for enhanced dropdowns |
| 72 | +- Username: `admin` |
| 73 | +- Password: `admin` |
147 | 74 |
|
148 | | -### Project Structure |
| 75 | +## Docker |
149 | 76 |
|
| 77 | +```bash |
| 78 | +docker build -f src/MailVoidApi/Dockerfile -t mailvoid . |
| 79 | +docker run -p 5133:80 mailvoid |
150 | 80 | ``` |
151 | | -MailVoid/ |
152 | | -├── src/ |
153 | | -│ ├── MailVoidApi/ # .NET Backend API |
154 | | -│ │ ├── Controllers/ # API endpoints |
155 | | -│ │ ├── Services/ # Business logic |
156 | | -│ │ ├── Models/ # Entity models |
157 | | -│ │ └── Data/ # Database service |
158 | | -│ └── MailVoidWeb/ # Angular Frontend |
159 | | -│ ├── src/app/ |
160 | | -│ │ ├── Pages/ # Page components |
161 | | -│ │ ├── _components/ # Shared components |
162 | | -│ │ └── _services/ # Angular services |
163 | | -│ └── src/styles/ # Global styles |
164 | | -└── .github/workflows/ # CI/CD pipelines |
165 | | -``` |
166 | | - |
167 | | -## 🤝 Contributing |
168 | 81 |
|
169 | | -This project is in prototype phase. Contributions are welcome but please wait until we're closer to v1.0 for major changes. Feel free to: |
| 82 | +## Tech Stack |
170 | 83 |
|
171 | | -1. Report bugs and issues |
172 | | -2. Suggest new features |
173 | | -3. Submit pull requests for fixes |
| 84 | +| Layer | Technology | |
| 85 | +| -------- | --------------------------------------------- | |
| 86 | +| Backend | .NET 10, RoboDodd.OrmLite (Dapper), SignalR | |
| 87 | +| Frontend | Angular 19, RxJS, Lucide, Bootstrap | |
| 88 | +| Database | MySQL 8.0+ | |
174 | 89 |
|
175 | | -## 📄 License |
| 90 | +## Project Structure |
176 | 91 |
|
177 | | -This project is licensed under the MIT License - see the LICENSE file for details. |
| 92 | +``` |
| 93 | +src/ |
| 94 | +├── MailVoidApi/ # .NET backend API |
| 95 | +│ ├── Controllers/ # REST endpoints |
| 96 | +│ ├── Services/ # Business logic |
| 97 | +│ ├── Models/ # Entity models |
| 98 | +│ └── Data/ # Database service |
| 99 | +├── MailVoidSmtpServer/ # SMTP server for local development |
| 100 | +├── MailVoidWeb/ # Angular frontend |
| 101 | +│ └── src/app/ |
| 102 | +│ ├── Pages/ # Page components |
| 103 | +│ ├── _components/ # Shared components |
| 104 | +│ └── _services/ # API and auth services |
| 105 | +└── RoboDodd.OrmLite/ # ORM submodule |
| 106 | +``` |
178 | 107 |
|
179 | | -## 🙏 Acknowledgments |
| 108 | +## License |
180 | 109 |
|
181 | | -- [Microsoft](https://microsoft.com/) for .NET and development tools |
182 | | -- [Angular](https://angular.io/) for the frontend framework |
183 | | -- [Dapper](https://github.com/DapperLib/Dapper) for the micro ORM foundation |
| 110 | +This project is licensed under the MIT License. |
0 commit comments