使用 Azure OAuth 将 Microsoft Outlook 365 连接至 Odoo

Odoo 兼容 Microsoft 的 Azure OAuth,用于 Microsoft 365。要通过自定义域名安全收发邮件,只需在 Azure 平台和 Odoo 数据库后端完成少量设置。此配置可用于个人邮箱或自定义域名创建的邮箱。

::: seealso Microsoft Learn: 在 Microsoft 身份平台注册应用 :::

::: seealso - /applications/general/users/azure - /applications/productivity/calendar/outlook :::

首先,访问 Microsoft Azure 门户。使用 Microsoft Outlook Office 365 账户登录(若有),否则使用个人 Microsoft 账户 登录。需要具有 Azure 设置管理权限的用户进行以下配置。随后进入标记为 管理 Microsoft Entra ID(原 Azure Active Directory)的章节。

点击顶部菜单中的 Add (+),选择 App registration。在 注册应用 页面,将 Name 重命名为 [Odoo] 或其他易识别的名称。 在 Supported account types 中选择
任何组织目录中的账户(Any Microsoft Entra ID directory - Multitenant)以及个人 Microsoft 账户(如 Skype、Xbox)

Redirect URL 部分,平台选择 Web,然后在 URL 栏中输入 [https://<web base url>/microsoft_outlook/confirm][web.base.url] 会随登录数据库的 URL 而变化。

:::: note ::: title 注意 :::

关于 web.base.url <domain-name/web-base-url> 的文档说明了如何冻结唯一 URL。也可以在 Microsoft 应用中添加多个重定向 URL。 ::::

将 URL 填入后,点击 Register 创建应用。

接下来需要设置 API permissions。Odoo 需要特定的 API 权限才能在 Microsoft 365 中读取(IMAP)和发送(SMTP)邮件。点击左侧菜单中的 API permissions,再点击 (+ ) Add a Permission,在 Commonly Used Microsoft APIs 下选择 Microsoft Graph,随后选择 Delegated Permissions

在搜索框中搜索以下 Delegated permissions,并逐一点击 Add permissions

  • SMTP.Send
  • IMAP.AccessAsUser.All

:::: note ::: title 注意 :::

默认会添加 User.Read 权限。 ::::

{.align-center}

添加完 API 权限后,返回左侧侧栏顶部的 Application Overview

Essentials 概览表中,点击 Managed Application in Local Directory 链接(表格右下角的最后一个选项)。

{.align-center}

在左侧侧栏选择 Users and Groups,再点击 (+) Add User/Group。根据账户类型,可添加 GroupUser,或仅添加 User(个人账户只能添加用户)。

UsersGroups 中点击 None Selected,选择将用于 Odoo 中发送邮件的用户或用户组。点击 Add,随后 Select,最后 Assign 将其分配给该应用。

现在 Azure 应用已完成设置,需要为 Odoo 创建凭证,包括 Client IDClient Secret

  • Client ID(或 Application ID)可在应用的 Overview 页面复制,位于 Essentials 概览的 Display Name 下方。

{.align-center}

  • Client Secret Value 需要在左侧侧栏的 Certificates & Secrets 中获取。点击 (+) New Client Secret

在弹出的右侧窗口中,点击 Add a client secret。在 Description 中填写 [Odoo Fetchmail] 或其他易识别的描述,并设置 expiration date

:::: important ::: title 重要 :::

若首个密钥过期,需要重新生成新的 Client Secret,否则会导致服务中断。请将到期日期设为可能的最远时间并记录。 ::::

填写完毕后点击 Add,系统会生成 Client Secret ValueSecret ID。务必在离开页面前将 Value(即 Client Secret Value)复制到记事本,因为离开后会被加密。Secret ID 不必使用。

{.align-center}

完成上述步骤后,以下两项即可在 Odoo 中使用:

  • 客户端 ID(Client ID / Application ID)
  • 客户端密钥(Value / Client Secret Value)

至此,Microsoft Azure 门户的设置已完成。

打开 Odoo 数据库,进入 Apps 模块。去除搜索栏中的 Apps 过滤器,搜索 Outlook,安装名为 Microsoft Outlook 的模块。

随后前往 Settings → General Settings,在 Discuss 部分确保勾选 Custom Email Servers,此时会出现 Outlook Credentials 选项。

点击 Save 保存。

将前面获取的 Client ID(Application ID)和 Client Secret(Client Secret Value)分别粘贴到对应字段,保存设置。

{.align-center}

General Settings 页面,Custom Email Servers 区域点击 Outgoing Email Servers 链接,配置 Microsoft 账户。

创建新邮件服务器并勾选 Outlook。填写 Name(任意),以及 Microsoft Outlook 邮箱的 Username

From Filter 为空,填写 域名或邮箱地址(如 <email-outbound-unique-address>)。

点击 Connect your Outlook account

此时会弹出 Microsoft 窗口,完成 授权过程。选择在 Odoo 中配置的相应邮箱地址。

{.align-center}

点击 Yes 允许 Odoo 访问该 Microsoft 账户。页面会返回 Odoo 已配置的 Outgoing Mail Server,系统自动加载 token,并显示绿色的 Outlook Token Valid 标识。

{.align-center}

最后点击 Test Connection,若出现确认信息则说明成功。至此,Odoo 数据库即可通过 OAuth 认证使用 Microsoft Outlook 发送安全邮件。

单一外发服务器是最简配置,无需为数据库中的用户分配大量访问权限。

使用一个通用邮箱向数据库中所有用户发送邮件,例如使用 notifications@example.comcontact@example.com 作为别名。该地址必须在服务器的 FROM Filtering 中设置,并且在系统参数中对应 {mail.default.from}@{mail.catchall.domain}

::: seealso 访问 From Filtering 文档 <email-outbound-different-servers-personalized-from-filtering> 获取更多信息。 :::

:::: note ::: title 注意 :::

系统参数可在 Settings → Technical → Parameters → System Parameters 中通过开启 developer-mode 访问。 ::::

使用此配置时,所有发送的邮件都会使用配置的通知邮箱地址,但发送者的名称仍会显示真实姓名,只是邮箱地址会被替换为通知邮箱。

::: example 单一外发邮件服务器配置示例:

  • 外发邮件服务器 用户名(登录) = notifications@example.com
  • 外发邮件服务器 FROM Filtering = notifications@example.com
  • 系统参数 mail.catchall.domain = example.com
  • 系统参数 mail.default.from = notifications :::

除了通用邮箱外,还可以为数据库中的每个用户单独设置邮件服务器。每个服务器的 FROM Filtering 必须对应该用户的邮箱地址,只有匹配的用户才能使用该服务器。

设置步骤

为每位用户分别创建邮件服务器,并将 FROM Filtering 设置为该用户的邮箱。需要为发送 通知 的通用邮箱建立 fallback server,其 FROM Filtering 应为 {mail.default.from}@{mail.catchall.domain}

:::: note ::: title 注意 :::

系统参数同样可在 Settings → Technical → Parameters → System Parameters 中通过开启 developer-mode 访问。 ::::

::::: important ::: title 重要 :::

此事务性邮件服务器可与外发群发邮件服务器并存。群发邮件服务器的 FROM Filtering 可保持为空,但需在 Email Marketing 应用的设置中配置。 :::

::: seealso 了解如何在群发邮件服务器中设置自定义域名 SMTP 服务器,请访问 email-outbound-custom-domain-smtp-server。 :::

::: example 多用户外发邮件服务器配置示例:

  • 用户 #1 邮箱
    • 外发邮件服务器 #1 用户名 = john@example.com
    • 外发邮件服务器 #1 FROM Filtering = john@example.com
  • 用户 #2 邮箱
    • 外发邮件服务器 #2 用户名 = jane@example.com
    • 外发邮件服务器 #2 FROM Filtering = jane@example.com
  • 通知邮箱
    • 外发邮件服务器 #3 用户名 = notifications@example.com
    • 外发邮件服务器 #3 FROM Filtering = notifications@example.com
  • 系统参数
    • mail.catchall.domain = example.com
    • mail.default.from = notifications :::

收件账户的配置方式与外发类似。进入 Technical → Incoming Mail Servers,点击 Create 新建配置。勾选 Outlook OAuth Authentication,填写 Microsoft Outlook 用户名,点击 Connect your Outlook account。Odoo 会显示 Outlook Token Valid。随后 Test and Confirm,即可开始接收邮件到 Odoo 数据库。