Migrating from Formspree
Migrate from Formspree to mailiam for better performance, custom domains, reply-enabled emails, and infrastructure-as-code management.
Why Migrate to mailiam?
Section titled “Why Migrate to mailiam?”What You Gain
Section titled “What You Gain”| Feature | Formspree | mailiam |
|---|---|---|
| Custom Domain Forms | Paid plans only | ✅ Free |
| Reply Support | ❌ No | ✅ Yes |
| Config as Code | ❌ No | ✅ Yes |
| CLI Tool | ❌ No | ✅ Yes |
| Email Forwarding | ❌ No | ✅ Yes |
| Sub-100ms Speed | ❌ No | ✅ Yes |
| Collections/Organization | ❌ No | ✅ Yes |
| Git Workflow | ❌ No | ✅ Yes |
Cost Comparison
Section titled “Cost Comparison”- Formspree: $8-19/month for basic custom domain features
- mailiam: Free tier includes custom domains, replies, and full CLI
Migration Strategy
Section titled “Migration Strategy”Phase 1: Parallel Setup (Zero Downtime)
Section titled “Phase 1: Parallel Setup (Zero Downtime)”- Set up mailiam alongside existing Formspree forms
- Test thoroughly with new endpoints
- Gradually migrate forms one by one
- Monitor performance and deliverability
Phase 2: Full Migration
Section titled “Phase 2: Full Migration”- Update all form endpoints to mailiam
- Configure domain-based infrastructure
- Enable advanced features (replies, collections)
- Decommission Formspree account
Step-by-Step Migration
Section titled “Step-by-Step Migration”Step 1: Install mailiam CLI
Section titled “Step 1: Install mailiam CLI”npm install -g mailiammailiam loginStep 2: Analyze Your Formspree Setup
Section titled “Step 2: Analyze Your Formspree Setup”Document your current Formspree forms:
# List your current forms# In Formspree dashboard, note:# - Form endpoints# - Notification emails# - Redirect URLs# - Any custom configurationStep 3: Set Up mailiam Domain
Section titled “Step 3: Set Up mailiam Domain”# Initialize with your domainmailiam init yoursite.comcd yoursite.comStep 4: Configure Equivalent Forms
Section titled “Step 4: Configure Equivalent Forms”Map your Formspree forms to mailiam configuration:
domains: yoursite.com: # Enable email forwarding forwarding: "*@yoursite.com": "your-email@gmail.com" "contact@yoursite.com": "contact@gmail.com" "support@yoursite.com": "support@gmail.com"
forms: # Map Formspree contact form contact: template: "professional" replies: true # Better than Formspree replyTo: "contact@yoursite.com" acknowledgment: true # Auto-reply to users
# Map Formspree newsletter form newsletter: template: "marketing" replyTo: "newsletter@yoursite.com" settings: customMessage: "Thanks for subscribing!"
# Map Formspree support form support: template: "technical" replies: true replyTo: "support@yoursite.com" settings: priority: "high"Step 5: Deploy Configuration
Section titled “Step 5: Deploy Configuration”# Deploy your configurationmailiam push
# Verify setupmailiam statusmailiam domains verify yoursite.comStep 6: Update Form HTML (Parallel Testing)
Section titled “Step 6: Update Form HTML (Parallel Testing)”Create test versions of your forms with mailiam endpoints:
<!-- Before: Formspree endpoint --><form action="https://formspree.io/f/xdoylzoo" method="POST"> <input type="email" name="email" required> <textarea name="message" required></textarea> <button type="submit">Send</button></form>
<!-- After: mailiam domain-based endpoint --><form action="https://api.mailiam.dev/v1/yoursite.com/send?form=contact" method="POST"> <input type="email" name="email" required> <textarea name="message" required></textarea> <button type="submit">Send</button></form>Step 7: Test Thoroughly
Section titled “Step 7: Test Thoroughly”# Test form submissionsmailiam forms test contact --data '{"email":"test@test.com","message":"Test message"}'
# Test email forwardingmailiam domains test yoursite.com contact@yoursite.com
# Check deliverabilitymailiam domains check-auth yoursite.comStep 8: Gradual Migration
Section titled “Step 8: Gradual Migration”Migrate forms one at a time:
- Start with low-traffic forms (like newsletter signup)
- Monitor for 24-48 hours
- Migrate medium-traffic forms (support, feedback)
- Finally migrate high-traffic forms (main contact form)
Step 9: Enable Advanced Features
Section titled “Step 9: Enable Advanced Features”Once basic migration is complete, enable mailiam’s advanced features:
domains: yoursite.com: forms: contact: # Enable replies (Formspree doesn't have this) replies: true replyTo: "contact@yoursite.com"
# Automatic acknowledgments acknowledgment: true acknowledgment: template: "contact-ack" delay: 0
# Advanced spam protection security: spamProtection: "strict" honeypotField: "_mailiam_trap" contentFiltering: trueCommon Formspree → mailiam Mappings
Section titled “Common Formspree → mailiam Mappings”Basic Contact Form
Section titled “Basic Contact Form”Formspree:
<form action="https://formspree.io/f/xdoylzoo" method="POST"> <input type="hidden" name="_subject" value="New Contact"> <input type="hidden" name="_next" value="/thank-you.html"> <input type="email" name="email" required> <textarea name="message" required></textarea> <button type="submit">Send</button></form>mailiam:
<form action="https://api.mailiam.dev/v1/yoursite.com/send?form=contact" method="POST"> <!-- mailiam handles subjects and redirects via configuration --> <input type="email" name="email" required> <textarea name="message" required></textarea> <button type="submit">Send</button></form># Configuration in mailiam.config.yamlforms: contact: subject: "New Contact" redirectUrl: "/thank-you.html" template: "professional"Ajax Forms
Section titled “Ajax Forms”Formspree:
fetch('https://formspree.io/f/xdoylzoo', { method: 'POST', body: formData, headers: { 'Accept': 'application/json' }});mailiam:
fetch('https://api.mailiam.dev/v1/yoursite.com/send?form=contact', { method: 'POST', body: formData, headers: { 'Accept': 'application/json' }});File Uploads
Section titled “File Uploads”Formspree:
<form action="https://formspree.io/f/xdoylzoo" method="POST" enctype="multipart/form-data"> <input type="file" name="upload"> <button type="submit">Upload</button></form>mailiam:
<form action="https://api.mailiam.dev/v1/yoursite.com/send?form=contact" method="POST" enctype="multipart/form-data"> <input type="file" name="attachment"> <button type="submit">Upload</button></form># Enable file uploads in configurationforms: contact: fileUploads: enabled: true maxSize: "10MB" allowedTypes: ["pdf", "doc", "jpg", "png"]Advanced Migration Scenarios
Section titled “Advanced Migration Scenarios”Multiple Formspree Forms
Section titled “Multiple Formspree Forms”If you have multiple Formspree forms, use mailiam collections:
# Create a collection for better organizationmailiam collections create "website" "Website Forms"
# Add forms to collectionmailiam collections add-form "website" "contact" "Contact Form"mailiam collections add-form "website" "newsletter" "Newsletter Signup"mailiam collections add-form "website" "support" "Support Request"This creates clean URLs:
https://api.mailiam.dev/f/website/contacthttps://api.mailiam.dev/f/website/newsletterhttps://api.mailiam.dev/f/website/support
Formspree Webhooks Migration
Section titled “Formspree Webhooks Migration”Formspree Webhook:
{ "_replyto": "user@example.com", "email": "user@example.com", "message": "Hello world", "_subject": "Contact form"}mailiam Webhook:
# Configure webhooks in mailiamforms: contact: webhooks: - url: "https://yourapp.com/webhook" method: "POST" headers: Authorization: "Bearer {{ env.WEBHOOK_TOKEN }}" events: ["submission"]Spam Protection Upgrade
Section titled “Spam Protection Upgrade”mailiam’s spam protection is more advanced than Formspree:
forms: contact: security: # Much more sophisticated than Formspree spamProtection: "strict" honeypotField: "_mailiam_trap" contentFiltering: true maxLinksAllowed: 2 blockedDomains: - "tempmail.org" - "10minutemail.com" customRules: - pattern: "buy now|act fast" action: "quarantine"Testing Your Migration
Section titled “Testing Your Migration”Form Submission Testing
Section titled “Form Submission Testing”# Test each migrated formmailiam forms test contact --data test-contact.jsonmailiam forms test newsletter --data test-newsletter.json
# Test with realistic dataecho '{"email":"john@example.com","name":"John Doe","message":"Testing migration from Formspree"}' > test-contact.jsonmailiam forms test contact --data-file test-contact.jsonEmail Deliverability Testing
Section titled “Email Deliverability Testing”# Test email forwardingmailiam domains test yoursite.com contact@yoursite.com
# Check spam scoremailiam domains check-deliverability yoursite.com
# Test reply functionalitymailiam forms test-reply contact test@example.comPerformance Comparison
Section titled “Performance Comparison”# Check mailiam response timesmailiam metrics performance --last 24h
# Compare with Formspree (you'll see significant improvement)# mailiam typically responds in 50-100ms vs Formspree's 200-500msPost-Migration Optimization
Section titled “Post-Migration Optimization”Enable Reply Conversations
Section titled “Enable Reply Conversations”One of mailiam’s best features that Formspree lacks:
domains: yoursite.com: forms: contact: replies: true replyTo: "contact@yoursite.com" acknowledgment: true acknowledgment: template: "contact-acknowledgment"
# Set up email forwarding for replies forwarding: "contact@yoursite.com": "your-personal-email@gmail.com"Set Up Professional Templates
Section titled “Set Up Professional Templates”domains: yoursite.com: templates: contact-acknowledgment: subject: "Thanks for contacting {{ company.name }}!" html: | <div style="font-family: Arial, sans-serif;"> <h2>Hi {{ form.name }},</h2> <p>Thanks for reaching out! We received your message:</p> <blockquote>{{ form.message }}</blockquote> <p>We'll get back to you within 24 hours.</p> <p>You can reply directly to this email if you have any questions.</p> <p>Best regards,<br>The {{ company.name }} Team</p> </div>Monitor and Optimize
Section titled “Monitor and Optimize”# Monitor form performancemailiam analytics forms --last 30d
# Check spam detection accuracymailiam analytics spam --accuracy
# Review response timesmailiam metrics response-time --all-formsRollback Plan
Section titled “Rollback Plan”If you need to rollback during migration:
- Keep Formspree active during parallel testing phase
- Document all changes made to form HTML
- Have backup of original code in version control
- Test rollback procedure in staging environment
# Quick rollback steps# 1. Revert form HTML to original Formspree endpoints# 2. Update DNS if you changed MX records# 3. Notify team of rollbackMigration Checklist
Section titled “Migration Checklist”Pre-Migration
Section titled “Pre-Migration”- Document all existing Formspree forms
- Install and configure mailiam CLI
- Set up domain in mailiam
- Configure equivalent forms in mailiam.config.yaml
- Test mailiam forms in staging environment
During Migration
Section titled “During Migration”- Deploy mailiam configuration
- Update form HTML with mailiam endpoints
- Test all forms thoroughly
- Monitor email deliverability
- Check spam folder rates
Post-Migration
Section titled “Post-Migration”- Enable advanced features (replies, collections)
- Set up professional email templates
- Configure monitoring and alerts
- Update documentation for team
- Cancel Formspree subscription
- Celebrate improved performance! 🎉
Common Issues and Solutions
Section titled “Common Issues and Solutions”Forms Not Submitting
Section titled “Forms Not Submitting”# Check domain verificationmailiam domains verify yoursite.com
# Test form endpointmailiam forms test contact --verbose
# Check CORS configurationmailiam domains update yoursite.com --cors-origins "https://yoursite.com"Emails Not Arriving
Section titled “Emails Not Arriving”# Check email forwarding setupmailiam domains test yoursite.com contact@yoursite.com
# Verify SPF/DKIM recordsmailiam domains check-auth yoursite.com
# Check spam folders and add to whitelistPerformance Issues
Section titled “Performance Issues”# Check response timesmailiam metrics performance --last 1h
# Enable cachingmailiam forms update contact --caching true
# Optimize configurationmailiam optimize analyzeMigrating from Formspree to mailiam gives you better performance, more features, and professional email infrastructure that scales with your business.