跳轉至

建立 2026-09-14 更新 2026-09-14

郵件設定

開發環境用 MailCatcher 只把信攔在本機,避免測資寄到真實客戶。正式環境要寄發票與通知,必須改成公司或第三方的 SMTP(Gmail、Microsoft 365、SendGrid 等)。

開發堆疊的 MailCatcher 接法見 Docker 部署


Odoo 郵件設定位置

Odoo 的寄信設定在 odoo.conf 或 Web 後台 Settings → Technical → Outgoing Mail Servers。 在 Docker Compose 架構裡,我們建議先寫在 odoo.conf,讓容器啟動就能用。

[options]
; 其他設定...

; ======= 郵件設定 =======
smtp_server = smtp.yourcompany.com
smtp_port = 587
smtp_ssl = True
smtp_user = no-reply@yourcompany.com
smtp_password = yourStrongPassword123

⚠️ 注意:smtp_password 會明文存放在檔案裡,建議在 Docker Compose 裡用 環境變數 + 掛載 odoo.conf,或用 Odoo 後台 GUI 輸入(密碼會加密存在 DB)。


常見 SMTP 範例

(A) Gmail Workspace / 個人 Gmail

smtp_server = smtp.gmail.com
smtp_port = 587
smtp_ssl = True
smtp_user = yourname@gmail.com
smtp_password = <App Password>

👉 Gmail 不接受一般密碼登入,要先在 Google 帳號開啟 App Password(兩步驗證之後才能生成)。


(B) Microsoft 365 / Outlook

smtp_server = smtp.office365.com
smtp_port = 587
smtp_ssl = True
smtp_user = yourname@yourcompany.com
smtp_password = <你的郵件密碼 或 App Password>

(C) SendGrid / Mailgun / Postmark 等第三方寄信服務

smtp_server = smtp.sendgrid.net
smtp_port = 587
smtp_ssl = True
smtp_user = apikey
smtp_password = <你的API金鑰>

(這種通常用於大批量寄信,比較穩定)


Docker Compose 搭配方式

你可以在 prod/.env 放郵件帳號密碼,再在 odoo.conf 用環境變數展開:

.env

SMTP_SERVER=smtp.office365.com
SMTP_PORT=587
SMTP_USER=no-reply@yourcompany.com
SMTP_PASSWORD=SuperSecret123

odoo/config/odoo.conf

[options]
; ... 其他設定
smtp_server = ${SMTP_SERVER}
smtp_port = ${SMTP_PORT}
smtp_ssl = True
smtp_user = ${SMTP_USER}
smtp_password = ${SMTP_PASSWORD}

Odoo 支援 ${ENV_VAR} 展開,因此只要 docker compose 有載入 .env,Odoo 就會抓到。


正式寄信前建議測試

  1. 在 Odoo → Settings → Technical → Outgoing Mail Servers → 測試連線。
  2. 寄一封測試信到 Gmail / Yahoo / 公司外部信箱,確認沒被擋。
  3. 建議設定 SPF / DKIM / DMARC,在公司 DNS 裡設定 TXT 紀錄,避免信件被 Gmail/Outlook 當垃圾信。

👉 總結:

  • 是的,正式環境要用公司 SMTP 帳號密碼
  • 推薦方式是 .env 管理帳號密碼,odoo.conf 用環境變數展開,避免硬寫密碼。
  • 外部郵件要配合 DNS(SPF/DKIM/DMARC),這部分要 IT 部門幫忙。

關於 App Password

對,你理解的很對 👍 App Password(應用程式密碼) 就是專門讓應用程式(像 Odoo、Outlook、Thunderbird 或 Docker 裡的服務)使用你郵件帳號寄信的一組「專用密碼」。

它的用途就是:

  • 避免把你的「主要帳號密碼」暴露給第三方應用。
  • 適用於開啟了 兩步驟驗證 (2FA / MFA) 的帳號,因為一般應用程式(例如 Odoo SMTP)不會跑手機驗證。
  • 一個 App Password 只綁定在一個應用程式上,用起來更安全。

如何申請 App Password?

A. Google / Gmail Workspace

  1. 登入 Google 帳號:https://myaccount.google.com/
  2. 確保帳號已開啟 兩步驟驗證(2-Step Verification)。

  3. 這是必要條件,否則看不到 App Password 選項。

  4. 進入 安全性 (Security)登入 Google (Signing in to Google)應用程式密碼 (App Passwords)
  5. 選擇應用程式類型(例如 Mail)+裝置(例如 Other → Odoo),Google 會生成一組 16 碼密碼。
  6. 在 Odoo 的 odoo.conf 或 Mail Server 設定,把這組密碼填到 smtp_password

B. Microsoft 365 / Outlook

  1. 登入 Microsoft 帳號:https://account.microsoft.com/
  2. 開啟 兩步驟驗證 (2FA)
  3. 進入 安全性 (Security)進階安全性選項 (Advanced Security Options)
  4. 找到 應用程式密碼 (App Passwords) → 新增 App 密碼。
  5. 系統會給你一組隨機密碼,把它用在 smtp_password

C. Yahoo / 其他郵件供應商

大部分供應商流程都類似:

  1. 開啟 兩步驟驗證
  2. 在「帳號安全」裡找到 應用程式密碼 / App Password 功能。
  3. 生成密碼,複製下來貼進 Odoo SMTP 設定。

範例(Odoo 配合 Gmail App Password)

smtp_server = smtp.gmail.com
smtp_port = 587
smtp_ssl = True
smtp_user = yourname@gmail.com
smtp_password = abcd efgh ijkl mnop   ; (Google 生成的16碼)

⚠️ 注意:Google 生成的 App Password 中間會有空格,你在 Odoo 設定時可以直接輸入不帶空格的版本(Odoo 也能接受)。


👉 總結:

  • App Password = 專用於應用程式的帳號密碼,不等於你平常登入 Gmail / Outlook 的密碼。
  • 要開 兩步驟驗證 才能申請。
  • 在 Odoo / Docker SMTP 設定中,就用這個 App Password。

避免垃圾信件三大關鍵

以下是「DNS 郵件三兄弟」SPF / DKIM / DMARC 的範例與操作方式:


DNS 郵件三兄弟簡介

協議 功能 目的
SPF (Sender Policy Framework) 限定哪些伺服器可以幫你的網域寄信 防止「冒名寄信」
DKIM (DomainKeys Identified Mail) 信件簽章(私鑰簽、公開金鑰驗證) 確保內容沒被竄改
DMARC (Domain-based Message Authentication, Reporting & Conformance) 規範收件伺服器遇到 SPF / DKIM 驗證失敗時該怎麼做 增加信件信任度、可要求回報

1. SPF 設定範例

在 DNS 加 TXT 記錄:

主機名:@ 
類型:TXT  
值:v=spf1 include:_spf.google.com include:spf.protection.outlook.com -all

解釋:

  • v=spf1 → SPF 協議版本。
  • include:_spf.google.com → 允許 Google (Gmail Workspace) 伺服器代你寄信。
  • include:spf.protection.outlook.com → 允許 Microsoft 365 代你寄信。
  • -all → 其他伺服器寄出的信一律拒收(最嚴格)。

  • 可改成 ~all(SoftFail,對方可能會當垃圾信,但不會直接拒收)。

👉 若你公司只用 Gmail,就留:

v=spf1 include:_spf.google.com -all

2. DKIM 設定範例

  1. 在郵件系統(例如 Gmail Workspace 或 Microsoft 365 管理後台)產生 DKIM 金鑰

  2. 會得到一組 公開金鑰(TXT 放到 DNS)和 私鑰(存在郵件伺服器,Odoo 透過 SMTP 自動簽)。

  3. DNS 新增 TXT 記錄,通常格式像這樣:
主機名:google._domainkey
類型:TXT
值:v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A...

解釋:

  • google._domainkey → selector,一般由系統產生(如 selector1._domainkey)。
  • v=DKIM1 → DKIM 協議版本。
  • p=... → 公鑰(很長一串)。

👉 Gmail Workspace 預設會建議 google._domainkey。 👉 Microsoft 365 預設會用 selector1._domainkeyselector2._domainkey


3. DMARC 設定範例

DNS TXT 記錄:

主機名:_dmarc
類型:TXT
值:v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@yourcompany.com; ruf=mailto:dmarc-forensic@yourcompany.com; pct=100; adkim=s; aspf=s

解釋:

  • v=DMARC1 → 協議版本。
  • p=quarantine → SPF/DKIM 驗證失敗的信件,放垃圾信。

  • 可設為 none(觀察模式)、quarantine(隔離)、reject(直接拒收)。

  • rua → Aggregate reports(每日統計報告寄到這個信箱)。
  • ruf → Forensic reports(每次失敗都寄報告)。
  • pct=100 → 100% 的信件都套用此政策。
  • adkim=s → DKIM 驗證要求嚴格(域名必須完全匹配)。
  • aspf=s → SPF 驗證要求嚴格。

最簡上線版本(先求可用)

如果你只是要 Odoo 正常寄信,最低限度可以這樣設:

  1. SPF(允許 Gmail 或 M365 代寄)
v=spf1 include:_spf.google.com -all
  1. DKIM(用 Google 或 M365 後台產生金鑰,放 TXT)
google._domainkey   TXT   v=DKIM1; k=rsa; p=MIIBIjANBgkqh...
  1. DMARC(先觀察模式,不拒信)
_dmarc   TXT   v=DMARC1; p=none; rua=mailto:dmarc-reports@yourcompany.com

等你確認寄信正常、沒有 legit 郵件被擋,再把 DMARC 的 p=none 改成 quarantinereject


檢查方法

設定好後可以用:

進一步學習