YourTrend
电子邮件 API 和 SMTP 活动 自动化 短信 网页推送 消息应用 统一收件箱 安全邮件 分析
ENUKRUDEESFRITPLPTHIZH
登录 免费开始
API & SMTP

如何在Laravel中设置SMTP中继

简短回答

了解如何在Laravel中设置SMTP中继,包括逐步的.env配置、测试技巧和事务API替代方案。

什么是SMTP中继,为什么在Laravel中使用它

SMTP中继是一个第三方服务,它接受来自您应用程序的外发邮件,并代表您将其转发到收件人的收件箱。Laravel内置的mail()发送,或者您服务器上的本地Postfix安装,技术上也可以发送电子邮件。但它通常会被标记为垃圾邮件。快速。这篇文章将介绍如何在Laravel中设置SMTP中继,以便您的事务性消息实际上能够到达收件箱,而不是垃圾邮件文件夹。

问题在于声誉。一个共享主机IP,其他数十个应用程序也从中发送,没有与Gmail、Outlook或Yahoo的历史记录。垃圾邮件过滤器在决定消息是进入收件箱还是垃圾邮件文件夹之前,会查看发件人的声誉、认证记录和发送量。像Mailgun、SendGrid或Postmark这样的中继提供商已经建立了这种声誉,并且它管理重试、退信处理和IP预热,因此您不必自己编写这些逻辑。

每当应用程序发送任何事务性内容时,中继比本地邮件服务器更受欢迎:密码重置、发票、订单确认、注册验证链接。营销发送也有好处,但事务性电子邮件是一个类别,其中错过的投递会直接破坏用户流程——没有人会重置他们的密码两次。如果您想更全面地了解收件箱投递情况,这份关于电子邮件投递最佳实践的指南更深入地涵盖了声誉评分。

开始之前的先决条件

在接触任何配置文件之前,先收集一份简短的清单。跳过这一步是设置拖延一个下午而不是十分钟的最常见原因。

  • 一个正常工作的Laravel安装(Laravel 8到11都使用相同的邮件配置结构)。
  • 访问项目的.env文件,无论是在本地还是在已部署的服务器上。
  • 一个SMTP中继提供商的账户——Mailgun、SendGrid、Postmark、Amazon SES或类似服务。
  • 中继凭据:SMTP主机、端口、用户名和密码(或用作密码的API密钥)。
  • 提供商那边的已验证发送域,以便外发邮件在离开之前不会被拒绝。

大多数提供商在其仪表板的“SMTP”或“集成”部分直接显示这些凭据。将它们复制到安全的地方。您将需要每个字段。

Laravel SMTP 配置 — 步骤设置

Laravel 将邮件配置分为两个文件:config/mail.php,该文件定义了每个邮件发送器的结构,以及.env,该文件保存实际值。您几乎不需要直接编辑config/mail.php — 默认值已经从环境变量中读取。如果您从未这样做过,学习如何在 Laravel 中设置 SMTP 中继实际上只是填入正确的环境变量并按正确的顺序进行。

  1. 打开您的 .env 文件并设置 MAIL_MAILER=smtp。这告诉 Laravel 使用 SMTP 传输,而不是 log、sendmail 或 API 驱动程序。
  2. 将 MAIL_HOST 设置为中继的 SMTP 服务器地址,例如 smtp.mailgun.org 或 smtp.sendgrid.net。
  3. 设置 MAIL_PORT。常见值为 587(用于 TLS)、465(用于 SSL)或 2525(当 587 被阻止时的后备)。
  4. 将 MAIL_USERNAME 和 MAIL_PASSWORD 设置为您的提供商发放的凭据。对于某些提供商,“用户名”字面上就是单词 apikey,密码是您的实际 API 密钥。
  5. 将 MAIL_ENCRYPTION 设置为 tls,在大多数情况下。只有在提供商明确表示端口 25 不加密时,才将其留空。
  6. 设置MAIL_FROM_ADDRESS和MAIL_FROM_NAME。这些控制默认的“发件人”头部,它们应该与您已验证的域名匹配。
  7. 保存后运行php artisan config:clear。Laravel 会积极缓存配置,过时的值是新设置在第一次尝试时“无法工作”的主要原因。

填写后的典型块如下所示:

变量示例值目的
MAIL_MAILERsmtp选择传输驱动程序
MAIL_HOSTsmtp.mailgun.org中继服务器地址
MAIL_PORT587连接端口
MAIL_ENCRYPTIONtls加密 SMTP 会话
MAIL_USERNAMEpostmaster@yourdomain.com中继账户标识符
MAIL_PASSWORDyour-api-key中继身份验证密钥

这里没有什么特别的。主要是复制粘贴,错误通常来自于端口和加密组合不匹配,而不是拼写错误。

在 Laravel 中测试您的 SMTP 中继连接

在实际邮件到达之前,永远不要相信配置更改。测试一下。

  1. 使用php artisan tinker打开 Tinker 会话。
  2. 运行Mail::raw('来自 Laravel SMTP 中继的测试消息', function ($message) { $message->to('you@example.com')->subject('SMTP 测试'); });.
  3. 在一两分钟内检查您的收件箱——以及您的垃圾邮件文件夹,以防万一。
  4. 如果没有任何内容到达,请检查 storage/logs/laravel.log 以获取提供商返回的实际 SMTP 错误。
  5. 将结果与您提供商的仪表板进行交叉检查,仪表板通常会记录每次尝试发送的状态。

两个错误不断出现。连接超时通常意味着端口被您的托管提供商或防火墙阻塞,这在便宜的 VPS 计划中很常见,默认情况下阻止出站端口 25。身份验证失败几乎总是意味着用户名和密码被调换,或者 API 密钥后面粘贴了空格。如果您想要一种更系统的方法来验证可送达性,而不仅仅是单次测试发送,有专门的 电子邮件可送达性测试工具 可以在一次检查中检查垃圾邮件评分、身份验证和内容标志。

Laravel 事务电子邮件 API — SMTP 的替代方案

SMTP 不是唯一的选择。每个主要的中继提供商也提供 REST API,Laravel 对大多数提供商都有官方或社区驱动程序包 — Mailgun、SendGrid、Postmark 和 SES 都是这样工作的。

API 路由完全跳过 SMTP 握手。您的应用程序不是打开套接字连接、进行身份验证并逐行传输消息,而是发出一个带有电子邮件有效负载的单个 HTTPS POST 请求,负载以 JSON 附加。这很重要,因为许多托管环境会阻止或限制 SMTP 端口,而端口 443 几乎从不被阻塞。对于高流量的事务应用程序,API 发送通常也更快,因为每条消息不需要协商持久连接。

设置因提供商而异,但模式是一致的:

  1. 通过 Composer 安装提供商的 Laravel 包,例如 composer require symfony/mailgun-mailer symfony/http-client 用于 Mailgun。
  2. 在.env中设置MAIL_MAILER=mailgun(或等效的驱动程序名称)。
  3. 将 API 密钥和域名作为环境变量添加,遵循驱动程序期望的特定键。
  4. 清除配置缓存,并以与 SMTP 相同的方式发送测试消息。

SMTP 仍然有其存在的价值——它是通用的,无论提供商如何,它的工作方式都是一样的,这在你更换中继时非常方便。构建在 Laravel 之外的团队会遇到相同的端口阻塞问题;在这篇针对 Node.js 应用的 SMTP 中继指南 中的推理在概念上同样适用,尽管代码有所不同。

保护您的 SMTP 凭据

将 SMTP 密码和 API 密钥视为生产数据库凭据。因为它们本质上就是这样。

  • 绝不要将 .env 提交到版本控制中。确认它已列在 .gitignore 中——在 Laravel 中默认是这样,但在任何框架升级后请再次检查。
  • 为暂存和生产使用不同的凭据。泄露的暂存密钥不应能够从您的生产域发送邮件。
  • 定期轮换 API 密钥,特别是在团队成员离开或笔记本电脑丢失后。大多数提供商允许您生成新的密钥
并在不造成停机的情况下禁用旧密钥。

如果您的提供商支持 IP 白名单,请限制访问实际发送邮件的服务器。将其与云和部署工具中的最小权限访问结合使用,以便只有应用程序环境可以读取邮件机密。

排查常见的 SMTP 中继问题

即使一切配置正确,邮件投递仍可能因 Laravel 之外的原因而失败。当发生这种情况时,系统地解决问题:

  • 验证您的环境文件中的主机名、端口、加密设置、用户名和密码。
  • 检查您的提供商是否需要经过验证的发件人域或特定的发件地址。
  • 确保您的服务器防火墙或托管提供商允许出站 SMTP 流量。
  • 检查提供商的活动日志以查找拒绝消息、速率限制或身份验证失败。
  • 从 Laravel Tinker 或简单路由发送测试消息,以将问题与应用程序的其余部分隔离。

如果消息被接受但从未到达,问题可能在于可投递性而非投递。在这种情况下,请检查您的 SPF、DKIM 和 DMARC 设置,并确认您的 DNS 记录与您使用的 SMTP 服务匹配。

最终思考

在 Laravel 中设置 SMTP 中继主要是使用正确的凭据,选择可靠的提供商,并保持配置的清晰和安全。一旦它正常工作,您将获得比基本邮件服务器更好的可投递性、可见性和控制。

有了可靠的中继,您的应用程序可以在开发、预发布和生产环境中稳定地发送邮件,而无需不必要的麻烦。

术语在词汇表中解释: SPF · DKIM · DMARC
在此页面 ← 所有文章
这有用吗?

一键操作。它告诉我们接下来该写什么。

尚无评分 — 您的将是第一条。

评论

评论在显示之前会被阅读。
  1. 尚无评论。开始对话吧。
付诸实践

几分钟内开始发送

此页面是通过搜索找到的

真实的搜索查询将人们带到这里——高亮的查询打开匹配的页面。