mirror of
https://github.com/ryankazokas/turbovault-app.git
synced 2026-04-17 00:32:53 +00:00
Moving to github
This commit is contained in:
274
docs/TESTING_EMAILS.md
Normal file
274
docs/TESTING_EMAILS.md
Normal file
@@ -0,0 +1,274 @@
|
||||
# Testing Emails Locally with Mailpit
|
||||
|
||||
TurboVault is configured to use **Mailpit** for local email testing. Mailpit captures all emails sent by the application so you can view them in a web interface without actually sending real emails.
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Start the Services
|
||||
|
||||
```bash
|
||||
task docker:up
|
||||
```
|
||||
|
||||
This starts both PostgreSQL and Mailpit. You'll see:
|
||||
```
|
||||
PostgreSQL: localhost:5432
|
||||
Mailpit UI: http://localhost:8025
|
||||
```
|
||||
|
||||
### 2. Access Mailpit Web UI
|
||||
|
||||
Open your browser and visit:
|
||||
```
|
||||
http://localhost:8025
|
||||
```
|
||||
|
||||
You'll see the Mailpit interface where all emails will appear.
|
||||
|
||||
### 3. Test Password Reset Email
|
||||
|
||||
1. Start your Rails server:
|
||||
```bash
|
||||
task server
|
||||
```
|
||||
|
||||
2. Visit http://localhost:3000
|
||||
|
||||
3. Click "Login" then "Forgot your password?"
|
||||
|
||||
4. Enter any email address from a user account you created
|
||||
|
||||
5. Check Mailpit at http://localhost:8025 - you'll see the password reset email!
|
||||
|
||||
6. Click on the email to view it (both HTML and text versions)
|
||||
|
||||
7. Click the "Reset My Password" link in the email to test the flow
|
||||
|
||||
## Features
|
||||
|
||||
### Web Interface (http://localhost:8025)
|
||||
|
||||
- **View all emails** sent by your Rails app
|
||||
- **Search emails** by recipient, subject, or content
|
||||
- **View both HTML and text versions** of emails
|
||||
- **Test responsive design** - resize the preview
|
||||
- **Download emails** as .eml files
|
||||
- **View email headers** and technical details
|
||||
- **Clear all emails** when you want to start fresh
|
||||
|
||||
### API Access
|
||||
|
||||
Mailpit also has an API if you want to automate testing:
|
||||
|
||||
```bash
|
||||
# Get all emails
|
||||
curl http://localhost:8025/api/v1/messages
|
||||
|
||||
# Get specific email
|
||||
curl http://localhost:8025/api/v1/message/MESSAGE_ID
|
||||
|
||||
# Delete all emails
|
||||
curl -X DELETE http://localhost:8025/api/v1/messages
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
The configuration is already set up in:
|
||||
|
||||
### Docker Compose (`docker-compose.yml`)
|
||||
```yaml
|
||||
mailpit:
|
||||
image: axllent/mailpit:latest
|
||||
ports:
|
||||
- "1025:1025" # SMTP server
|
||||
- "8025:8025" # Web UI
|
||||
```
|
||||
|
||||
### Rails Development Config (`config/environments/development.rb`)
|
||||
```ruby
|
||||
config.action_mailer.delivery_method = :smtp
|
||||
config.action_mailer.smtp_settings = {
|
||||
address: "localhost",
|
||||
port: 1025,
|
||||
enable_starttls_auto: false
|
||||
}
|
||||
```
|
||||
|
||||
## Testing Other Emails
|
||||
|
||||
### Create a New Mailer
|
||||
|
||||
```bash
|
||||
rails generate mailer UserMailer welcome
|
||||
```
|
||||
|
||||
### Send Test Email from Rails Console
|
||||
|
||||
```bash
|
||||
rails console
|
||||
|
||||
# Send password reset
|
||||
user = User.first
|
||||
PasswordResetMailer.reset_password(user).deliver_now
|
||||
|
||||
# Check Mailpit - email should appear!
|
||||
```
|
||||
|
||||
### Send Email from Your Code
|
||||
|
||||
```ruby
|
||||
# In a controller or model
|
||||
PasswordResetMailer.reset_password(user).deliver_later
|
||||
```
|
||||
|
||||
## Common Tasks
|
||||
|
||||
### View Mailpit Web UI
|
||||
```bash
|
||||
task mailpit
|
||||
# or just open http://localhost:8025
|
||||
```
|
||||
|
||||
### Check Mailpit Logs
|
||||
```bash
|
||||
task docker:logs:mailpit
|
||||
```
|
||||
|
||||
### Restart Mailpit
|
||||
```bash
|
||||
docker compose restart mailpit
|
||||
```
|
||||
|
||||
### Stop All Services
|
||||
```bash
|
||||
task docker:down
|
||||
```
|
||||
|
||||
## Tips
|
||||
|
||||
1. **Keep Mailpit open** in a browser tab during development
|
||||
2. **Emails appear instantly** - no delay like real SMTP
|
||||
3. **No email quota limits** - send as many test emails as you want
|
||||
4. **All emails are captured** - can't accidentally send to real addresses
|
||||
5. **Automatic cleanup** - emails are cleared when you restart Mailpit
|
||||
6. **Mobile testing** - Mailpit UI is responsive, test on different screen sizes
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Emails Not Appearing?
|
||||
|
||||
**Check Mailpit is running:**
|
||||
```bash
|
||||
docker compose ps
|
||||
```
|
||||
|
||||
You should see `turbovault_mailpit` running.
|
||||
|
||||
**Check Rails is configured correctly:**
|
||||
```bash
|
||||
rails console
|
||||
> Rails.application.config.action_mailer.delivery_method
|
||||
=> :smtp
|
||||
> Rails.application.config.action_mailer.smtp_settings
|
||||
=> {:address=>"localhost", :port=>1025, :enable_starttls_auto=>false}
|
||||
```
|
||||
|
||||
**Check Rails logs:**
|
||||
```bash
|
||||
tail -f log/development.log
|
||||
```
|
||||
|
||||
Look for lines like:
|
||||
```
|
||||
Sent mail to user@example.com
|
||||
```
|
||||
|
||||
**Restart everything:**
|
||||
```bash
|
||||
task docker:down
|
||||
task docker:up
|
||||
# Then restart Rails server
|
||||
```
|
||||
|
||||
### Can't Access Web UI?
|
||||
|
||||
Make sure port 8025 is not in use:
|
||||
```bash
|
||||
lsof -i :8025
|
||||
```
|
||||
|
||||
If something else is using it, stop that service or change Mailpit's port in `docker-compose.yml`.
|
||||
|
||||
### Emails Sent But Not in Mailpit?
|
||||
|
||||
Check that Rails is actually sending to localhost:1025:
|
||||
```bash
|
||||
rails console
|
||||
> ActionMailer::Base.delivery_method
|
||||
=> :smtp
|
||||
> ActionMailer::Base.smtp_settings
|
||||
=> {:address=>"localhost", :port=>1025, ...}
|
||||
```
|
||||
|
||||
## Production Configuration
|
||||
|
||||
When you deploy to production, you'll need real SMTP settings. Update `config/environments/production.rb`:
|
||||
|
||||
```ruby
|
||||
config.action_mailer.delivery_method = :smtp
|
||||
config.action_mailer.smtp_settings = {
|
||||
address: ENV['SMTP_ADDRESS'],
|
||||
port: ENV['SMTP_PORT'],
|
||||
user_name: ENV['SMTP_USERNAME'],
|
||||
password: ENV['SMTP_PASSWORD'],
|
||||
authentication: 'plain',
|
||||
enable_starttls_auto: true
|
||||
}
|
||||
```
|
||||
|
||||
Common SMTP providers:
|
||||
- **SendGrid** - Free tier: 100 emails/day
|
||||
- **Mailgun** - Free tier: 5,000 emails/month
|
||||
- **Postmark** - Free tier: 100 emails/month
|
||||
- **AWS SES** - $0.10 per 1,000 emails
|
||||
- **Gmail SMTP** - Free but limited
|
||||
|
||||
## Mailpit vs Other Tools
|
||||
|
||||
### Mailpit (Current)
|
||||
✅ Modern, actively maintained
|
||||
✅ Fast and lightweight
|
||||
✅ Great UI
|
||||
✅ Built-in API
|
||||
|
||||
### MailHog (Alternative)
|
||||
⚠️ No longer actively maintained
|
||||
⚠️ Older UI
|
||||
✅ Still works fine
|
||||
|
||||
### MailCatcher (Alternative)
|
||||
⚠️ Requires Ruby installation
|
||||
⚠️ Less modern
|
||||
|
||||
We chose Mailpit because it's actively maintained and has the best developer experience.
|
||||
|
||||
## Resources
|
||||
|
||||
- [Mailpit GitHub](https://github.com/axllent/mailpit)
|
||||
- [Mailpit Documentation](https://mailpit.axllent.org/)
|
||||
- [Rails Action Mailer Guide](https://guides.rubyonrails.org/action_mailer_basics.html)
|
||||
|
||||
## Summary
|
||||
|
||||
**For Local Development:**
|
||||
- Mailpit captures all emails at http://localhost:8025
|
||||
- No real emails sent
|
||||
- Perfect for testing email templates and flows
|
||||
- Already configured, just `task docker:up` and go!
|
||||
|
||||
**For Production:**
|
||||
- Configure real SMTP provider in environment variables
|
||||
- Set SMTP_ADDRESS, SMTP_USERNAME, SMTP_PASSWORD
|
||||
- Emails will be sent for real
|
||||
|
||||
Happy testing! 📧
|
||||
Reference in New Issue
Block a user