为GitLab配置Microsoft Graph作为邮件收发工具

news/2025/2/7 8:41:58/文章来源:https://www.cnblogs.com/qyqj/p/18701995

先决条件


  1. Microsoft/Office 365订阅(Exchange是必须的)并添加一个gitlab专用的账户,本文使用E5开发者订阅
  2. 部署好的GitLab,参考上一篇文章

步骤


一、 配置Microsoft Entra

1. 注册应用程序

登录Azure门户,进入Microsoft Entra ID,选择管理-应用注册-新注册
image

填写你想要的名称,点击注册
image

2. 配置应用程序权限

进入新注册的应用程序,选择API
权限-添加权限,选择Microsoft Graph
image

选择应用程序权限下的并添加权限

MailboxFolder.ReadWrite.All
Mail.ReadWrite
Mail.Send

image

代表组织授管理员同意

image

3. 生成密钥

选择左侧的证书和密码,选择客户端密码-新客户端密码并添加一个客户端密码

image

即时记下值中的内容,离开页面后将不可见

二、 配置GitLab

1. 通用配置

gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'  
#这里发件人的显示名称对于Microsoft Graph无效,需要在Exchange中手动修改
gitlab_rails['gitlab_email_display_name'] = 'Example Gitlab' 
gitlab_rails['gitlab_email_reply_to'] = 'gitlab@example.com'

2. GitLab发件配置

gitlab_rails['microsoft_graph_mailer_enabled'] = true  
gitlab_rails['microsoft_graph_mailer_user_id'] = "发件用户ID"  
gitlab_rails['microsoft_graph_mailer_tenant'] = "租户ID"  
gitlab_rails['microsoft_graph_mailer_client_id'] = "应用程序(客户端) ID"  
gitlab_rails['microsoft_graph_mailer_client_secret'] = "客户端密码值"
gitlab_rails['microsoft_graph_mailer_azure_ad_endpoint'] = "https://login.microsoftonline.com"  
gitlab_rails['microsoft_graph_mailer_graph_endpoint'] = "https://graph.microsoft.com"

其中,发件用户ID可以在Microsoft Entra ID中选择管理-用户-所有用户-发件用户-对象ID获取
image

租户ID和应用程序ID在刚刚注册的应用程序概述中获取
image

3. GitLab收件自动化配置

gitlab_rails['incoming_email_enabled'] = true  
gitlab_rails['incoming_email_address'] = "gitlab+%{key}@example.com"  
gitlab_rails['incoming_email_email'] = "gitlab@example.com"
gitlab_rails['incoming_email_mailbox_name'] = "收件箱名称"  
gitlab_rails['incoming_email_inbox_method'] = 'microsoft_graph'  
gitlab_rails['incoming_email_inbox_options'] = {  'azure_ad_endpoint': 'https://login.microsoftonline.com',  'graph_endpoint': 'https://graph.microsoft.com',  'tenant_id': '租户ID',  'client_id': '应用程序(客户端) ID',  'client_secret': '客户端密码值',  'poll_interval': 60  # Optional  }

其中,收件箱名称在使用非默认的inbox(收件箱)时需要手动获取收件箱的ID,例如在邮箱新建了一个文件夹ABC,这里不能填ABC否则Graph Api会报错

接下来在Postman中调用Microsoft Graph手动获取邮箱文件夹ID

先登录获取token

GET https://login.microsoftonline.com/5bbef931-9b10-4928-834d-92698bc78da7/oauth2/v2.0/token

Body选择x-www-form-urlencoded,添加如下参数

参数
grant_type client_credentials
client_id 应用程序(客户端)ID
client_secret 客户端密码值
scope https://graph.microsoft.com/.default

请求后获取access_token

然后获取邮箱文件夹ID

GET https://graph.microsoft.com/v1.0/users/gitlab@example.com/mailFolders

Header中添加Authorization 值为刚刚获取的token

请求后得到所有文件夹的信息,记录下我们所需的文件夹的ID填入配置中

{"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('gitlab@example.com')/mailFolders","value": [{"id": "xxx","displayName": "ABC","parentFolderId": "xxx","childFolderCount": 0,"unreadItemCount": 0,"totalItemCount": 0,"sizeInBytes": 0,"isHidden": false},{"id": "xxx","displayName": "发件箱","parentFolderId": "xxx","childFolderCount": 0,"unreadItemCount": 0,"totalItemCount": 0,"sizeInBytes": 0,"isHidden": false},...]
}

4. 重新应用GitLab配置并测试

进入GitLab容器并运行命令gitlab-ctl reconfigure

等待配置重新应用后运行命令gitlab-rails console进入GitLab命令行,可能需要几分钟进行初始化

执行测试命令

Notify.test_email('your-email@example.com', 'Test Email', 'This is a test email.').deliver_now

若配置正常会提示邮件发送成功


本文可能随时更新,原始地址:https://blog.akadot.net/post/2025/2/6/config-microsoft-graph-as-the-send-and-incoming-email-tool

欢迎转载、引用,请务必申明出处与作者

园子博客是为了优化SEO,最新文章请访问我的博客:https://blog.akadot.net

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/879928.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 深度学习框架 TorchSharp 原生训练模型和图像识别-自定义网络模型和识别手写数字

目录使用 Torch 训练模型定义神经网络加载数据集创建网络模型定义损失函数训练识别手写图像 教程名称:使用 C# 入门深度学习 作者:痴者工良 教程地址:https://torch.whuanle.cn 电子书仓库:https://github.com/whuanle/cs_pytorch Maomi.Torch 项目仓库:https://github.co…

ZW3D二次开发_入门_Action与Ribbon菜单定制--转自 知乎 捣蛋龙

ZW3D二次开发_入门_Action与Ribbon菜单定制捣蛋龙 ​关注他5 人赞同了该文章​ 目录收起ZW3D二开入门目录 - 知乎 (zhihu.com)最新测试环境:2025 SP前言定制Ribbon菜单1.新建工作区2.定义"行为"3.定义自定义Ribbon文件4.编写策略文件5.编写引导程序6.多环境差异化策…

day4

简单图论与构造 A 考虑把权值为 2 的点看作给权值为 1 的点加一, 所以整个问题被拆成了两个部分:构造树和给节点加一 事实上,在第一部分时我们将树构造的尽量平衡是有好处,这个结论在第二个步骤中会得到证明 构造: Process DFS(father,ch,u,size):if size==0 then returnso…

Omnissa Horizon Windows OS Optimization Tool 2412 - Windows 系统映像优化工具

Omnissa Horizon Windows OS Optimization Tool 2412 - Windows 系统映像优化工具Omnissa Horizon Windows OS Optimization Tool 2412 - Windows 系统映像优化工具 Optimizing Images Using Omnissa Horizon Windows OS Optimization Tool 请访问原文链接:https://sysin.org/…

BOM最全基础信息:标准件、通用件、替换件、必选件

在生产制造领域,物料清单(BOM)是产品设计、生产计划和供应链管理的核心基础。本文系统梳理了BOM中各类零部件的分类方法,供大家参考。在生产制造的复杂领域中,我们会与各式各样的产品组成部分打交道。清晰、准确地对它们进行分类,并实施有效的管理,对于提升生产效率、保…

人工智能辅助芯片设计

芯片设计:一个近乎无限的问题空间 设计复杂性呈指数级增长 设计复杂性的含义 一连串棘手的问题 贯穿整个流程优化 HDL生成研究 使用GCN加速设计评估 人工智能辅助验证 参考文献链接https://www.hc2024.hotchips.org/assets/program/tutorials/3-HC24.synopsys.SteliosDiaman…

应用随机过程 | 期末 cheat sheet

出分后发布笔记……这篇博客汇总了「应用随机过程」2018 - 2022 的期末试题,并根据题型分类总结。 本站相关博客:应用随机过程 | 期末知识点总结特别鸣谢:知乎 | 九一居士 |《应用随机过程》课程笔记系列目录1 马尔可夫链计算题2 常返的马尔可夫链3 连续时间参数的马尔可夫链…

推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》4本书,非常感谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

OpenVX基本原理与历史

OpenVX基本原理 2.1 引言 2.1.1 摘要 OpenVX 是一个低级编程框架域,用于支持软件开发人员,可高效访问计算机视觉硬件加速功能和性能的可移植性。OpenVX 旨在支持现代硬件架构,例如,移动和嵌入式 SoC 以及桌面系统。其中许多系统是并行和异构的:多个处理器类型包括多核 CPU…

L4D2自制角色Mod - HUI篇

如何以相对简易的思路自制求生之路2求生者头像Mod本文是笔者尝试制作 求生之路2 角色 Mod 的过程中编写的笔记,笔者的背景是有基础的计算机知识和图像处理软件的使用经验,相信大多数读者朋友都有同样的水平。本文面向希望能快速简单地自定义游戏内角色图像/模型,但对更深层次…

使用Netty与前端请求进行交互实现实时通讯

引言因为不满足与一般的SpringBoot CRUD开发(太无聊了)所以去学一下网络编程,第一站就是通过B站老罗的EasyChat项目了解到了Netty这个网络框架,在学习这个项目之前也是去学习了一下Netty框架的使用以及相关的原理知识所以是有一定了解的,但是只是一味的学习不去实践总感觉是空中…