A Laravel-based application for sending personalized event invitations in safe, throttled batches via SMTP (e.g., ZeptoMail, SendGrid, Mailgun).
Ideal for events requiring unique RSVP links or QR codes per guest, while avoiding spam filters through controlled sending.
- Throttled batch email sending to prevent spam flags
- Fully personalized email content for each guest
- Unique QR code or RSVP image attached per recipient
- Supports any SMTP provider (ZeptoMail, SendGrid, Mailgun, Gmail, etc.)
- Artisan command for easy, controlled execution
- Database tracking of sent status (
sent,sent_at) - Clean, extensible Laravel structure
- Laravel 10+ (recommended)
- PHP 8.1+
- SMTP provider of your choice
- MySQL or PostgreSQL
app/
├── Console/Commands/SendRsvpInvites.php
├── Mail/RsvpInvitation.php
└── Models/RsvpGuest.php
resources/views/emails/rsvp.blade.php
storage/app/rsvp-images/
-
Create a new Laravel project (or integrate into an existing one):
composer create-project laravel/laravel event-invite-sender cd event-invite-sender -
Copy or clone the project files (commands, mailables, models, views, etc.) into your app.
-
Install dependencies:
composer install
Update your .env file with your SMTP settings:
MAIL_MAILER=smtp
MAIL_HOST=smtp.yourprovider.com
MAIL_PORT=587
MAIL_USERNAME=your-email@example.com
MAIL_PASSWORD=your-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=no-reply@yourdomain.com
MAIL_FROM_NAME="Event Organizer"Tip: Use a transactional email service like ZeptoMail or SendGrid for better deliverability.
-
Create and run migrations:
php artisan migrate
-
Example structure for the
rsvp_gueststable:Column Type Description id bigint Primary key full_name string Guest's full name email string Guest's email address rsvp_image string Filename of QR/RSVP image (e.g., 12.png)sent boolean Whether email has been sent (default: false) sent_at timestamp Timestamp when email was sent (nullable) created_at timestamp updated_at timestamp
Populate the table with your guest data.
Use the Artisan command to send emails in controlled batches:
php artisan rsvp:send --limit=25- Sends up to 25 emails per execution
- Includes delays between sends for throttling
- Updates database records (
sent = true,sent_at = now())
Recommendation: Schedule via cron every 30–60 minutes, depending on your SMTP provider's rate limits.
*/30 * * * * cd /path/to/your/project && php artisan rsvp:send --limit=25 >> /dev/null 2>&1Place unique images in:
storage/app/rsvp-images/
Example filenames: 1.png, 2.png, 3.png, ...
Each rsvp_guests record should reference its corresponding filename in the rsvp_image column.
The images are attached to individual emails.
- Never use CC or BCC for multiple recipients
- Always respect throttling to avoid spam complaints
- Verify your sender domain with SPF, DKIM, and DMARC
- Use production-grade SMTP credentials
- Test deliverability with a small batch first
- Embed QR codes inline (instead of attachments)
- CSV import for bulk guest addition
- Retry logic for failed deliveries
- Tracking for opens/clicks
- Queue-based sending with Laravel Horizon
Feel free to contribute or extend!
This project is ideal for:
- Weddings
- Birthdays
- Corporate events
- Private parties
- Invitation-only gatherings
This project is licensed under the MIT License - see the LICENSE file for details.