You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9升级后Gmail/Yahoo邮件链接失效问题求助(多租户场景)

解决Laravel 9升级后多租户邮件链接失效问题

问题原因

Laravel 9默认启用了邮件链接跟踪功能,会自动替换邮件内的链接为带跟踪参数的短链接。但在archtechx/tenancy多租户环境下,跟踪链接的生成未适配当前租户域名,导致生成了错误的全局跟踪域名(如https://email.mail.mydomain.io/c/...),进而在Gmail/Yahoo等邮箱中无法正常跳转。

解决方案

1. 全局关闭邮件链接跟踪

如果不需要邮件链接跟踪功能,直接修改config/mail.php配置文件,禁用该功能:

'link_tracking' => false,

2. 仅针对特定邮件关闭跟踪

若需要保留全局跟踪,仅关闭特定邮件的链接跟踪,可在对应邮件类的build方法中添加withoutLinkTracking()调用:

class NotificationMail extends Mailable
{
    public function build()
    {
        return $this->view('emails.notification')
            ->withoutLinkTracking(); // 关闭此邮件的链接跟踪
    }
}

3. 适配多租户环境的链接跟踪(保留跟踪功能)

如果需要继续使用链接跟踪,需确保跟踪域名使用当前租户的域名,可通过监听邮件发送事件修改跟踪链接:

  • 首先在app/Providers/EventServiceProvider.php中注册事件监听:
protected $listen = [
    \Illuminate\Mail\Events\MessageSending::class => [
        \App\Listeners\FixTenantMailLinkTracking::class,
    ],
];
  • 然后创建监听类app/Listeners/FixTenantMailLinkTracking.php:
namespace App\Listeners;

use Illuminate\Mail\Events\MessageSending;

class FixTenantMailLinkTracking
{
    public function handle(MessageSending $event)
    {
        // 确保当前处于租户上下文
        if (!tenant()) {
            return;
        }

        $message = $event->message;
        $body = $message->getBody();
        
        // 将默认跟踪域名替换为当前租户域名
        $body = str_replace('https://email.mail.mydomain.io/c/', tenant()->domain . '/c/', $body);
        
        $message->setBody($body);
    }
}

内容的提问来源于stack exchange,提问作者Farzan Badakhshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:27:19