使用队列发送邮件
php
Mail::to($user)->queue(new OrderShipped($order));
配置专用队列连接
.env
中设置专用邮件队列:
QUEUE_CONNECTION=redis
QUEUE_MAIL_CONNECTION=redis
优化队列工作进程
ini
[program:laravel-worker]
command=php /path/to/artisan queue:work redis --queue=emails --sleep=3 --tries=3 --max-jobs=1000
使用专业 SMTP 服务
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587
MAIL_USERNAME=your-mailgun-user
MAIL_PASSWORD=your-mailgun-password
本地 Postfix 配置优化
bash
sudo apt install postfix mailutils
/etc/postfix/main.cf
):
inet_protocols = ipv4
default_destination_concurrency_limit = 20
initial_destination_concurrency = 5
邮件驱动选择
smtp
或 mailgun
log
驱动设置邮件发送超时
config/mail.php
中:
php
'stream' => [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true,
'timeout' => 30,
],
],
批量邮件优化
Mail::bcc()
发送批量邮件:
php
Mail::bcc($users)->queue(new Newsletter($content));
调整 PHP 配置
php.ini
:
max_execution_time = 300
memory_limit = 256M
网络优化
监控与日志
bash
tail -f /var/log/mail.log
使用多 SMTP 账户轮询
Redis 管道优化
异步事件处理
通过以上优化措施,可以显著提高 Laravel 在 Linux 系统上的邮件发送性能和可靠性。根据实际业务需求和服务器资源,可以选择适合的优化组合方案。