Laravel后端发送邮件时出现CORS错误求助
解决Laravel后端CORS跨域错误
先看你遇到的错误信息:
Access to fetch at 'https://api.domain.com/public/api/v1/auth/verifyEmailForReset' from origin 'https://domian.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
注意:这个错误和你用Gmail/cPanel邮箱发邮件的SMTP配置完全无关,是前端页面(https://domian.com)跨域请求后端API(https://api.domain.com)时的权限问题,和邮件发送逻辑本身没关系。
下面是Laravel环境下的具体解决步骤:
方法1:用Laravel自带的CORS配置(Laravel 7+默认支持)
- 打开项目根目录下的
config/cors.php文件,调整以下配置:- 给
paths数组加上你的API路由前缀:'paths' => ['api/*', 'sanctum/csrf-cookie'], - 修改
allowed_origins,允许你的前端域名:'allowed_origins' => ['https://domian.com'], // 生产环境不建议用通配符,若临时测试可改成 'allowed_origins' => ['*'], - 确保
allowed_methods和allowed_headers覆盖你需要的请求方式和头信息:'allowed_methods' => ['*'], 'allowed_headers' => ['*'],
- 给
- 保存配置后清除缓存:
php artisan config:clear - 重启Laravel服务(若使用了缓存或队列,同步重启)
方法2:使用第三方CORS包(适配旧版Laravel或复杂场景)
- 安装barryvdh/laravel-cors包:
composer require barryvdh/laravel-cors - 在
app/Http/Kernel.php中,将CORS中间件加入全局中间件或API中间件组:// 全局生效(所有请求都处理CORS) protected $middleware = [ // ...其他中间件 \Barryvdh\Cors\HandleCors::class, ]; // 或仅对API请求生效 protected $middlewareGroups = [ 'api' => [ // ...其他中间件 \Barryvdh\Cors\HandleCors::class, ], ]; - 发布配置文件:
php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider" - 同样修改
config/cors.php里的allowed_origins等配置,清缓存后重启服务
额外检查项
- 确认后端服务器(Nginx/Apache)没有覆盖Laravel返回的CORS头,比如Nginx配置里的
add_header Access-Control-Allow-Origin *;可能和Laravel配置冲突,需统一配置 - 检查前端请求是否携带自定义头、或使用PUT/DELETE等非简单请求,这类请求需要后端在OPTIONS预请求的响应中返回正确CORS头
- 注意域名拼写:错误信息里的
domian.com是否少了字母a?若实际域名是domain.com,要确保配置里写对
内容的提问来源于stack exchange,提问作者Rajesh Roshan
相关产品推荐
相关产品推荐

