使用 Cloudflare Workers 实施 Gmail 发送 – 设置指南

使用 cloudflare workers 实施 gmail 发送 - 设置指南

这是使用 Cloudflare Workers 实施 Gmail 发送系列的第 1 部分:

第 1 部分:设置(当前)第 2 部分:开发环境(即将推出)第 3 部分:实施(即将推出)

介绍

在 Cloudflare Pages 托管的静态网站上实施联系表单时,电子邮件发送功能需要无服务器解决方案。本指南演示了如何使用 Cloudflare Workers 设置 Gmail API 来处理表单提交

Cloudflare Workers 限制

使用 Cloudflare Workers 时,需要考虑两个主要限制:

Google API 包不可用

Cloudflare Workers 不是 Node.js 环境必须使用对 Google API REST 端点的直接 HTTP 请求,而不是 Node.js 客户端库

Nodemailer 软件包不可用:

Nodemailer 依赖 Node.js 环境不能在 Cloudflare Workers 中使用

设置过程

1. 创建服务帐号

访问 Google Cloud Console创建一个新项目或选择现有项目导航到“IAM 和管理” > “服务帐户”点击“创建服务帐户”输入服务帐户名称和描述跳过可选设置并单击“完成”记下 OAuth2 客户端 ID 供以后使用

2. 分配所需的角色

导航到“IAM 和管理” >“IAM”选择相关主体点击“授予访问权限”将服务帐户添加为新主体分配以下角色:服务帐户管理员服务帐户密钥管理员服务帐户令牌创建者IAP 政策管理员保存更改

3.启用Gmail API

导航至“API 和服务”>“库”搜索“gmail”选择“Gmail API”点击“启用”

4. 添加组织策略管理员角色

导航到“IAM 和管理” >“IAM”编辑组织管理员添加“组织政策管理员”角色保存更改

5.禁用服务帐户密钥创建策略

导航至“IAM 和管理” > “组织政策”过滤“iam.disableServiceAccountKeyCreation”点击政策链接点击“管理政策”选择“覆盖家长政策”添加规则并设置为“强制”点击“完成”

6. 生成服务帐户密钥

导航到“IAM 和管理” > “服务帐户”选择创建的服务帐户转到“按键”选项卡点击“添加密钥” > “创建新密钥”选择 JSON 格式创建并安全存储下载的 JSON 文件

7. 配置域范围委派

访问 Google Workspace 管理控制台导航至安全 > 访问和数据控制 > API 控件点击“管理域范围委托”添加新的客户端 ID:输入服务帐户的客户端 ID添加范围:https://www.googleapis.com/auth/gmail.send点击“授权”

注意:由于安全隐患,应在较大的组织中仔细考虑域范围的委派。

附加配置

使用 Gmail 别名发送电子邮件时,请记得添加别名地址:

转到 Gmail 设置 > 帐户通过“添加其他电子邮件地址”添加别名电子邮件地址

关于免费电子邮件服务的重要说明

此前,MailChannels Send API 被广泛推荐为 Cloudflare Workers 的免费电子邮件发送解决方案。但是,自 2024 年 6 月 30 日起,MailChannels 和 Cloudflare 之间的集成已停止。这影响了许多依赖此服务来满足电子邮件发送需求的开发人员。

许多 AI 语言模型仍然建议使用 MailChannels 作为解决方案,因为它们的训练数据早于该服务终止。这种情况凸显了验证当前服务可用性的重要性,尤其是在使用第三方集成时。

本指南中描述的 Gmail API 实现是一个可靠的替代方案,尽管与之前的 MailChannels 解决方案相比,它需要更多的初始设置。

下一步

本系列的下一篇文章将介绍将 Gmail API 与 Cloudflare Workers 结合使用的开发环境设置和实现细节。

以上就是使用 Cloudflare Workers 实施 Gmail 发送 – 设置指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1498494.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 20:30:50
下一篇 2025年12月19日 20:31:11

相关推荐

  • JavaScript的debugger语句是什么?如何调试代码?

    javascript的debugger语句是一种内置调试工具,能在代码执行到该行时强制暂停并打开开发者工具以检查变量和流程。1. 使用时只需在目标代码行插入debugger;,程序运行至此会暂停,便于查看变量值和执行上下文;2. 除debugger外,常用技巧包括断点、有条件断点、日志点等,均无需修…

    2025年12月20日 好文分享
    000
  • JavaScript的delete操作符是什么?如何使用?

    delete操作符用于删除对象的属性,但不直接销毁变量或释放内存。①它仅能移除对象上可配置的自有属性,若属性不可配置或不存在,则返回false(非严格模式),严格模式下抛出typeerror;②删除数组元素时不会改变数组长度,仅将该位置设为undefined,形成稀疏数组;③无法删除let、cons…

    2025年12月20日 好文分享
    000
  • 使用PHP和AJAX动态更新数据库表数据:从数组值到SQL操作

    本文详细阐述了如何通过PHP和AJAX实现数据库表的动态更新。内容涵盖前端HTML表单(特别是动态生成的下拉菜单)的数据收集、JavaScript将数据封装成数组并通过AJAX发送,以及PHP后端如何接收并安全地处理这些数组值来构建和执行SQL更新语句。重点讲解了SQL字符串的正确引用方式、调试技巧…

    2025年12月20日
    000
  • BOM中如何检测用户的HID设备支持?

    1.检测webhid支持的方法是检查navigator.hid是否存在;2.若存在则使用requestdevice()请求设备并需用户手势触发;3.可通过getdevices()获取已授权设备;4.处理权限拒绝需捕获错误并提供反馈;5.不支持时应提供替代方案。通过if(‘hid&#821…

    2025年12月20日 好文分享
    000
  • 使用 PHP 和 AJAX 更新数据库:处理数组数据与 SQL 语句构建

    本教程详细阐述如何利用 PHP 和 AJAX 技术,将前端收集的表单数据(特别是来自下拉列表的数组值)高效且安全地更新到数据库。文章将涵盖从前端数据收集、通过 AJAX 异步传输到后端 PHP 接收处理,到构建正确的 SQL UPDATE 语句的关键步骤,并强调 SQL 字符串引号处理、调试技巧及数…

    2025年12月20日
    000
  • Node.js模块与局部window变量:理解作用域限制与解决方案

    本教程探讨Node.js环境中,如何让第三方模块(如@braze/web-sdk)使用局部定义的window变量,而非全局window,以避免并发问题。文章深入解析JavaScript的词法作用域原理,解释为何模块无法直接访问调用函数内的局部变量,并指出在不修改模块源码的前提下,此需求通常无法实现。…

    2025年12月20日
    000
  • BOM中如何检测用户的邮件客户端支持?

    浏览器无法直接检测用户电脑上的邮件客户端,根本原因在于安全沙箱和隐私保护机制。1. 浏览器被设计为高度隔离的沙箱环境,禁止网页代码访问本地系统信息,如安装的应用程序。2. 用户隐私受到严格保护,网站不得未经授权获取用户的软件使用情况。3. 邮件处理由操作系统控制,浏览器仅负责将mailto:请求转发…

    2025年12月20日 好文分享
    000
  • JavaScript的XMLHttpRequest是什么?怎么用?

    xmlhttprequest(xhr)在前端与服务器交互中依然有其价值,主要原因有三点:1. 浏览器兼容性极佳,适用于维护老旧项目;2. 提供底层控制能力,如请求进度监听,适合大文件上传等场景;3. 许多旧库基于xhr封装,理解其原理有助于调试和深入掌握网络请求机制。 谈到前端与服务器交互,XMLH…

    2025年12月20日 好文分享
    000
  • JavaScript的querySelectorAll方法是什么?如何使用?

    queryselectorall方法返回静态nodelist集合,支持复杂css选择器,不会随dom变化更新。1. 它接受css选择器作为参数,能精准定位元素;2. 返回的nodelist是静态的,文档结构变化不影响其内容;3. 相比getelementsbyclassname/tagname,功能…

    2025年12月20日 好文分享
    000
  • 使用 HTMX 和 JavaScript 实现表单提交前更新隐藏字段

    本文介绍了如何使用 HTMX 和 JavaScript,在用户点击按钮后,更新表单中的隐藏字段,并立即提交表单。通过结合 JavaScript 的事件监听和 HTMX 的表单提交功能,可以实现无需延迟的、更加优雅的表单提交方案。文章提供了详细的代码示例,并解释了关键步骤,帮助开发者更好地理解和应用这…

    2025年12月20日
    000
  • location对象的作用是什么?如何用它操作URL?

    location对象是浏览器提供的全局接口,用于操作和获取当前页面url的信息。它包含属性和方法:1.属性包括href、protocol、host、hostname、port、pathname、search、hash、origin,分别用于获取或设置url各部分;2.方法有assign()(跳转并记…

    2025年12月20日 好文分享
    000
  • 使用 HTMX 和 JavaScript 实现点击按钮更新表单并提交

    本文介绍了如何利用 HTMX 和 JavaScript,在点击按钮时动态更新表单隐藏字段的值,并立即提交表单。通过避免使用延迟,提供了一种更简洁高效的实现方案,提升用户体验。 动态更新表单并提交:HTMX 与 JavaScript 的结合 在Web开发中,经常需要根据用户的交互行为动态修改表单数据并…

    2025年12月20日
    000
  • 动态表单输入更新与无缝提交的纯JavaScript实践

    本文旨在探讨在HTML表单中,如何通过点击按钮动态更新隐藏输入字段的值,并随后无缝提交表单,避免使用带有延迟的HTMX触发器。我们将对比一种常见的“hacky”HTMX方法,并提出一种更简洁、高效且无需延迟的纯JavaScript解决方案,从而实现更清晰的代码结构和更好的用户体验。 原始实现及其局限…

    2025年12月20日
    000
  • async和await在JavaScript中怎么用?有什么作用?

    async和await是javascript中处理异步操作的语法糖,它们简化了promise的使用,使异步代码更直观、可读性更强。1. async函数默认返回一个promise;2. await用于等待promise解决或拒绝,只能在async函数内部使用;3. 使用try…catch可…

    2025年12月20日 好文分享
    000
  • HTMX与JavaScript协同:优化动态表单提交与隐藏输入更新

    在Web开发中,我们常遇到需要根据用户交互动态更新表单数据并立即提交的场景。例如,用户点击不同的按钮,每个按钮代表一种“状态”,我们需要将这种状态值赋给表单中的一个隐藏输入字段,然后提交表单。本文将探讨在HTMX(HTML Over The Wire)环境中实现这一功能的两种常见方法,并重点推荐一种…

    2025年12月20日
    000
  • JavaScript的Reflect对象是什么?如何使用?

    reflect对象是javascript中用于元编程的静态工具类,提供了一系列与内部操作对应的方法。1. reflect方法覆盖了属性读取、设置、函数调用等常见操作,并提供更明确的返回结果和错误处理机制;2. 与object方法不同,reflect操作大多返回布尔值指示成功与否,避免抛错或静默失败;…

    2025年12月20日 好文分享
    000
  • Prisma groupBy 结合关联数据获取:实现聚合与关联字段的查询

    本文旨在解决Prisma中groupBy聚合查询无法直接包含关联字段的限制。通过一个实际案例,详细阐述如何利用Prisma的groupBy功能进行数据聚合,并结合二次查询和JavaScript的异步处理能力,有效地将聚合结果与相关联的实体信息(如用户姓名)合并,从而获取一个既包含聚合数据又包含关联实…

    2025年12月20日
    000
  • Prisma 中关联字段聚合求和与数据整合的实践指南

    本文旨在探讨在 Prisma 中如何对关联数据进行分组聚合(如求和),并同时获取关联表的额外字段信息。由于 Prisma 的 groupBy 操作当前不支持直接使用 include 或 select 来引入关联数据,因此文章将详细介绍一种分步查询的解决方案。该方案通过首先执行 groupBy 聚合,…

    2025年12月20日
    000
  • BOM中如何操作浏览器的地址栏?

    操作浏览器地址栏的核心在于window.location对象及history api。1. window.location提供了读取和修改url的功能,其属性如href、protocol、host等可获取或设置url各部分,方法如assign()、replace()、reload()能实现页面跳转或…

    2025年12月20日 好文分享
    000
  • Web应用中Excel导出功能的最佳实践:后端生成与前端处理的权衡

    在Web应用中实现Excel导出功能时,开发者常面临前端或后端处理的选择。本文将深入探讨这两种方案的优劣,并基于数据处理复杂性、浏览器兼容性、性能及职责分离等多个维度进行分析。通常,后端生成Excel文件并提供下载是更优的选择,因为它能更好地处理大量数据、复杂格式,并避免前端的浏览器兼容性问题,符合…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信