IMAP / SMTP — thật
provider: imap_smtp. Test connection thật sự mở kết nối IMAP
(ImapFlow) và liệt kê folder thật. Đây là con đường chính để nhận
email vào Helpdesk (inbound_provider: imap).


IMAP / SMTP — thật
provider: imap_smtp. Test connection thật sự mở kết nối IMAP
(ImapFlow) và liệt kê folder thật. Đây là con đường chính để nhận
email vào Helpdesk (inbound_provider: imap).
Forward / Twilio WhatsApp — lưu cấu hình
forward chỉ lưu 1 địa chỉ forward; twilio_whatsapp lưu Account SID
OAuth — Gmail / Outlook / Custom
provider: gmail | outlook | custom_oauth. Mô hình “bring your own
app”: admin nhập client ID/secret + endpoint của OAuth app ngay trong
wizard (Gmail/Outlook có sẵn preset, Custom nhập tay). Mailbox được poll
qua IMAP XOAUTH2 — dùng chung pipeline inbound. Thêm bao nhiêu
connection cũng được, mỗi cái một app riêng.
Đây là cách thêm một hộp thư (Gmail, Outlook/365, hay bất kỳ provider OAuth2 + IMAP nào) làm nguồn inbound mà không lưu mật khẩu — dùng OAuth chính chủ của provider. Client ID/secret + endpoint lưu trên chính connection (mã hoá at rest), không phải biến môi trường — nên một admin có thể thêm nhiều mailbox, mỗi cái backing bởi một OAuth app khác nhau.
Thiết lập OAuth app (ví dụ Google — một lần cho mỗi app):
Vào Google Cloud Console → tạo/chọn project → APIs & Services → OAuth consent screen: thêm scope https://mail.google.com/, thêm tài khoản Gmail cần kết nối vào Test users (nếu app chưa verify).
Credentials → Create credentials → OAuth client ID → loại Web application. Ở Authorized redirect URIs, dán đúng URI mà wizard hiển thị:
http://localhost:8888/api/helpdesk/oauth/callbackhttps://<admin-domain>/api/helpdesk/oauth/callbackBật IMAP trong hộp Gmail (Gmail → Settings → Forwarding and POP/IMAP → Enable IMAP).
(Tuỳ chọn, chỉ khi prod) đặt redirect URI chuẩn cho backend — mặc định dev đã đúng:
HELPDESK_OAUTH_REDIRECT_URI=https://<admin-domain>/api/helpdesk/oauth/callbackKhông cần set client ID/secret ở env nữa — chúng nhập trong wizard.
Kết nối (agent/admin):
Wizard New inbox → Connect a new channel → chọn Gmail, Outlook, hoặc Custom OAuth (IMAP).
Form OAuth hiện ra với redirect URI cần whitelist (copy vào app ở bước trên) + các field: tên connection, địa chỉ mailbox, Client ID, Client secret. Gmail/Outlook đã điền sẵn authorize/token URL + scope + IMAP host; Custom thì mở Edit endpoints / scopes để nhập tay. Riêng Outlook có thêm ô Tenant (xem note dưới).
Bấm Connect & authorize → chuyển sang trang đồng ý của provider → đồng ý quyền → quay về Settings → Connections với connection đã connected.
Tạo inbox trên connection vừa kết nối (nhánh existing connection của cùng wizard này).
Không có nút “Tạo connection” độc lập — connection luôn được tạo trong lúc tạo inbox đầu tiên dùng nó.
Vào Settings → Connections → bấm Connect channel (hoặc bắt đầu trực tiếp từ New inbox).
Chọn Channel (Email/WhatsApp) → chọn Provider. Với Email, chọn IMAP/SMTP.
Nhập thông tin IMAP (incoming): Host, Port, Username, Password, SSL/TLS. Nhập SMTP (outgoing): có thể tick “Use the same credentials as IMAP” để dùng chung tài khoản, hoặc nhập riêng Host/Port/Username/Password/STARTTLS.
Bấm Test connection. Bước này chỉ kiểm tra IMAP thật (kết nối + liệt kê folder) — SMTP không được test ở bước này, chỉ được lưu kèm theo. Test thành công mới cho phép Continue.
Tiếp tục các bước tạo inbox (routing/folder, đặt tên) — xem chi tiết ở Tạo inbox & định tuyến. Khi bấm Create inbox ở bước cuối, connection và mật khẩu IMAP/SMTP vừa nhập được lưu (mã hoá) cùng lúc.
Settings → Connections → bấm biểu tượng bút chì trên connection cần sửa.
Với provider IMAP/SMTP, slideover hiện 2 khối Incoming (IMAP) và Outgoing (SMTP). Trường Password luôn để trống khi mở (không hiện lại mật khẩu cũ) kèm ghi chú “Leave blank to keep the current password.”
Có thể bấm Test IMAP ngay trong màn hình sửa để kiểm tra thông tin vừa gõ.
Bấm Save để lưu.
Mask khi đọc
Các trường nhạy cảm (imap_password, smtp_password, oauth_token,
oauth_refresh_token, twilio_auth_token, webhook_secret) luôn trả
về *** nếu đã có giá trị, hoặc null nếu chưa từng đặt — không bao
giờ lộ giá trị thật qua API.
Mã hoá khi ghi
Trước khi ghi xuống DB, các trường trên được mã hoá AES-256-GCM bằng khoá suy ra từ secret của ODP. Chỉ backend Helpdesk giải mã được (lúc IMAP connect / gửi SMTP).
SMTP thực sự chỉ được test tại tab Outbound của từng inbox (không phải ở màn hình Connection), vì mỗi inbox có thể dùng SMTP dùng chung (Shared — theo connection) hoặc SMTP riêng (Custom). Nút Test SMTP chỉ hiện khi chọn mode Custom. Xem chi tiết mục outbound override ở Tạo inbox & định tuyến.
Danh sách folder IMAP hiển thị ở tab Folder của inbox không phải nhập tay — nó được lưu tự động mỗi lần Test IMAP thành công (test = tiện thể fetch danh sách folder). Nếu đổi mật khẩu hộp thư ngoài đời và cần cập nhật lại danh sách folder, chạy lại Test IMAP để làm mới.