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

Google Colab中Gmail API授权失败及安全发邮件方法问询

问题解答

一、授权重定向到localhost失败的原因

  • Colab是云端运行环境,代码默认指向的localhost是Colab服务器的本地端口,但你在本地Opera浏览器访问的是自己电脑的localhost,两者不属于同一环境,浏览器无法连接到Colab服务器的本地端口,导致授权回调失败。
  • 官方People API快速启动代码采用桌面应用OAuth2授权流程,该流程依赖本地端口接收授权回调,天生不适合Colab这类云端无图形界面的环境。

二、Colab中无需降低Gmail安全等级的发邮件方法

方法1:个人Gmail账号(开启2FA+App Password)

先给你的Google账号开启两步验证(2FA),然后生成一个专门用于发邮件的App Password(无需开启“不太安全的应用访问”),之后用SMTP协议发送:

import smtplib
from email.mime.text import MIMEText

# 配置信息
sender_email = "your-gmail-account@gmail.com"
app_password = "your-generated-app-password"
receiver_email = "recipient@example.com"
subject = "测试邮件"
body = "这是来自Colab的测试邮件内容"

# 构建邮件
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = sender_email
msg['To'] = receiver_email

# 发送邮件
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
    server.login(sender_email, app_password)
    server.send_message(msg)

方法2:Google服务账号(适合Workspace/企业账号)

在Google Cloud控制台创建服务账号,下载密钥文件,通过域范围授权让服务账号代表指定用户发送邮件,全程无需降低安全等级:

from google.oauth2 import service_account
from googleapiclient.discovery import build
from email.mime.text import MIMEText
import base64

# 加载服务账号密钥
credentials = service_account.Credentials.from_service_account_file(
    'service-account-key.json',
    scopes=['https://www.googleapis.com/auth/gmail.send'],
    subject='your-workspace-account@your-domain.com'  # 要代表发送的用户账号
)

# 初始化Gmail服务
service = build('gmail', 'v1', credentials=credentials)

# 构建邮件内容
msg = MIMEText("这是通过服务账号发送的测试邮件")
msg['Subject'] = "服务账号邮件测试"
msg['From'] = "your-workspace-account@your-domain.com"
msg['To'] = "recipient@example.com"

# 编码邮件为Gmail API要求的格式
raw_message = base64.urlsafe_b64encode(msg.as_bytes()).decode()

# 发送邮件
service.users().messages().send(userId='me', body={'raw': raw_message}).execute()

方法3:第三方SMTP服务(无需依赖Gmail)

使用SendGrid、Mailgun等第三方邮件服务,通过API或SMTP接口发送,安全便捷:
以SendGrid为例,先注册账号获取API密钥,再执行以下代码:

!pip install sendgrid
import sendgrid
from sendgrid.helpers.mail import Mail, From, To, Subject, PlainTextContent

# 初始化客户端
sg = sendgrid.SendGridAPIClient(api_key='your-sendgrid-api-key')
# 构建邮件
mail = Mail(
    From("your-sender-email@example.com"),
    To("recipient@example.com"),
    Subject("第三方邮件服务测试"),
    PlainTextContent("这是来自SendGrid的测试邮件")
)
# 发送邮件
response = sg.send(mail)

内容的提问来源于stack exchange,提问作者Igor Rocha Amorim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:20:37