郵件設定
開發環境用 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 就會抓到。
正式寄信前建議測試
- 在 Odoo → Settings → Technical → Outgoing Mail Servers → 測試連線。
- 寄一封測試信到 Gmail / Yahoo / 公司外部信箱,確認沒被擋。
- 建議設定 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
- 登入 Google 帳號:https://myaccount.google.com/
-
確保帳號已開啟 兩步驟驗證(2-Step Verification)。
-
這是必要條件,否則看不到 App Password 選項。
- 進入 安全性 (Security) → 登入 Google (Signing in to Google) → 應用程式密碼 (App Passwords)。
- 選擇應用程式類型(例如 Mail)+裝置(例如 Other → Odoo),Google 會生成一組 16 碼密碼。
- 在 Odoo 的
odoo.conf或 Mail Server 設定,把這組密碼填到smtp_password。
B. Microsoft 365 / Outlook
- 登入 Microsoft 帳號:https://account.microsoft.com/
- 開啟 兩步驟驗證 (2FA)。
- 進入 安全性 (Security) → 進階安全性選項 (Advanced Security Options)。
- 找到 應用程式密碼 (App Passwords) → 新增 App 密碼。
- 系統會給你一組隨機密碼,把它用在
smtp_password。
C. Yahoo / 其他郵件供應商
大部分供應商流程都類似:
- 開啟 兩步驟驗證。
- 在「帳號安全」裡找到 應用程式密碼 / App Password 功能。
- 生成密碼,複製下來貼進 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 記錄:
解釋:
v=spf1→ SPF 協議版本。include:_spf.google.com→ 允許 Google (Gmail Workspace) 伺服器代你寄信。include:spf.protection.outlook.com→ 允許 Microsoft 365 代你寄信。-
-all→ 其他伺服器寄出的信一律拒收(最嚴格)。 -
可改成
~all(SoftFail,對方可能會當垃圾信,但不會直接拒收)。
👉 若你公司只用 Gmail,就留:
2. DKIM 設定範例
-
在郵件系統(例如 Gmail Workspace 或 Microsoft 365 管理後台)產生 DKIM 金鑰。
-
會得到一組 公開金鑰(TXT 放到 DNS)和 私鑰(存在郵件伺服器,Odoo 透過 SMTP 自動簽)。
- DNS 新增 TXT 記錄,通常格式像這樣:
解釋:
google._domainkey→ selector,一般由系統產生(如selector1._domainkey)。v=DKIM1→ DKIM 協議版本。p=...→ 公鑰(很長一串)。
👉 Gmail Workspace 預設會建議 google._domainkey。
👉 Microsoft 365 預設會用 selector1._domainkey 和 selector2._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 正常寄信,最低限度可以這樣設:
- SPF(允許 Gmail 或 M365 代寄)
- DKIM(用 Google 或 M365 後台產生金鑰,放 TXT)
- DMARC(先觀察模式,不拒信)
等你確認寄信正常、沒有 legit 郵件被擋,再把 DMARC 的 p=none 改成 quarantine 或 reject。
檢查方法
設定好後可以用:
- https://mxtoolbox.com/SuperTool.aspx → 查 SPF/DKIM/DMARC
- 寄一封信到 Gmail,點「顯示原始郵件 (Show Original)」檢查 SPF: PASS / DKIM: PASS / DMARC: PASS。
進一步學習
- Odoo 18 文件:電子郵件
- Google 應用程式密碼
- MXToolbox 查 SPF/DKIM/DMARC
- 本站:Docker 部署、完整堆疊