SwiftMailer 已停维,新项目禁用;应改用 symfony/mailer + symfony/mime;旧项目若必须使用,仅限 composer require swiftmailer/swiftmailer:^6.3 并验证版本。

SwiftMailer 已停止维护,composer require swiftmailer/swiftmailer 在新项目中不推荐使用,多数情况下会安装失败或拉取到不兼容的版本(如 PHP 8.2+、Laravel 10+ 下无法运行)。
composer require swiftmailer/swiftmailer 为什么失败
不是网络问题,而是包本身已归档:官方自 2019 年起不再发布新版本,Packagist 上 swiftmailer/swiftmailer 的最新稳定版是 v6.3.0,之后所有尝试匹配 ^6.4、~6.0 或无版本约束的安装都会报错 Could not find package 或降级到不兼容旧版。
-
composer require swiftmailer/swiftmailer→ 默认找 latest,找不到,报错 -
composer require swiftmailer/swiftmailer:~6.0→ 波浪号会尝试6.4.x,但该版本不存在,失败 -
composer require swiftmailer/swiftmailer:^6.3→ 可行,但仅限老系统维护场景 - PHP 8.2+、Symfony 6.4+、Laravel 10+ 环境下,即使装上
v6.3.0,也可能因反射变更或废弃函数导致运行时 fatal error
新项目该用什么替代 SwiftMailer
直接换 symfony/mailer + symfony/mime,这是 Symfony 官方承接 SwiftMailer 职责的现代方案,更轻、更安全、持续维护。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 安装命令:
composer require symfony/mailer symfony/mime - 它原生支持 SMTP、Mailgun、Postmark、SES、Sendmail 等,API 更简洁,错误提示更明确
- 不依赖
ext-curl或guzzlehttp/guzzle(除非你用 API 驱动),纯 SMTP 场景只需配置 transport 即可发信 - Laravel 9+ 已默认切换至此方案;Yii3、CakePHP 4+ 也优先适配它
老项目必须用 SwiftMailer 怎么安全安装
只允许锁定 v6.3.0,并验证实际安装版本,跳过所有自动版本推导逻辑。
- 执行:
composer require swiftmailer/swiftmailer:^6.3 - 安装后立刻检查:
cat vendor/swiftmailer/swiftmailer/CHANGES.md | head -n 5,确认首行是Changelog for Swift Mailer v6.3.0 - 禁止在
composer.json中写"swiftmailer/swiftmailer": "^6"—— 这仍可能升级到不存在的6.4 - 若项目用 Yii2,应改用
yiisoft/yii2-swiftmailer:^2.1(对应 SwiftMailer 6.3),而非~2.0(那是 SwiftMailer 5,PHP 8 不兼容)
SMTP 连接失败时先别查代码,查 transport 配置
90% 的「connect timeout」「535 auth failed」不是 SwiftMailer 本身的问题,而是 transport 层与邮件服务商要求不匹配。
- Gmail 必须开「应用专用密码」,且用
tls+ port587;填账户密码或用ssl+465必挂 - 阿里云邮件推送只支持
tls+587,不支持ssl+465 - QQ 邮箱若坚持用
465,需显式加$transport->setStreamOptions(['ssl' => ['verify_peer' => false]])(仅测试环境;生产必须配 CA) - PHP 8.1+ 默认拒绝自签名证书,所以
verify_peer = false不是偷懒,是必要绕过项(但要清楚风险)
真正麻烦的从来不是装不上,而是装上了却在发信时卡在 TLS 握手或认证环节——这些细节不会报“SwiftMailer 错误”,只会抛出模糊的 Connection could not be established,得一层层比对服务商文档和 stream options。

















