如何在Laravel中通过Google Workspace OAuth发送邮件?已获Access Token
在Laravel中通过Google Workspace OAuth2实现SMTP邮件发送
1. 确保获取到Refresh Token
你用Socialite获取access token时,默认仅能拿到短期有效(1小时)的access token,必须在授权请求中添加offline scope,才能获取到可用来自动刷新token的refresh token:
修改Socialite授权跳转代码:
return Socialite::driver('google') ->scopes([ 'https://www.googleapis.com/auth/gmail.send', // 仅申请发邮件所需的最小权限 'offline' // 必须添加该scope才能获取refresh token ]) ->redirect();
回调时获取并保存关键信息:
$user = Socialite::driver('google')->user(); // 将以下信息存入数据库或加密配置: // $user->token(当前access token) // $user->refreshToken(用于刷新token的凭证) // $user->expiresIn(token剩余有效期,单位秒)
若你是Google Workspace管理员,还需在Admin Console中给应用开启域范围委派,这样应用可代表域内任意用户发送邮件(按需开启)。
2. 配置Laravel邮件驱动
Laravel默认集成了symfony/google-mailer组件,可直接配置SMTP结合OAuth2认证。先修改.env文件:
MAIL_MAILER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_ENCRYPTION=tls MAIL_USERNAME=你的Workspace邮箱@域名.com MAIL_PASSWORD=null # 此处无需填写密码 MAIL_FROM_ADDRESS=你的Workspace邮箱@域名.com MAIL_FROM_NAME="${APP_NAME}" # Google OAuth2 参数 GOOGLE_CLIENT_ID=你的客户端ID GOOGLE_CLIENT_SECRET=你的客户端密钥 GOOGLE_REFRESH_TOKEN=你保存的refresh token
再修改config/mail.php中smtp驱动的配置,添加OAuth认证参数:
'smtp' => [ 'transport' => 'smtp', 'host' => env('MAIL_HOST', 'smtp.gmail.com'), 'port' => env('MAIL_PORT', 587), 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, 'auth_mode' => 'oauth', 'oauth' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'refresh_token' => env('GOOGLE_REFRESH_TOKEN'), 'token_uri' => 'https://oauth2.googleapis.com/token', ], ],
3. 自动刷新Access Token
无需手动处理token刷新逻辑,symfony/google-mailer组件会在access token过期时,自动使用refresh token获取新的access token。
4. 测试邮件发送
编写简单测试代码验证功能,比如在路由中:
Route::get('/test-email', function () { Mail::raw('这是OAuth2认证的测试邮件', function ($message) { $message->to('测试邮箱@example.com') ->subject('Laravel Google Workspace 邮件测试'); }); return '邮件发送成功'; });
注意事项
- 最小权限原则:仅申请
gmail.send权限,避免不必要的权限请求提升安全性。 - Token安全存储:refresh token需加密存储,禁止明文暴露在代码或配置文件中。
- 内部应用豁免审核:若仅为Workspace内部使用的应用,无需通过Google OAuth公开应用审核流程。
内容的提问来源于stack exchange,提问作者henrikhannewijk
相关产品推荐
相关产品推荐

