Email Deliverability — SMTP relay กับ Gmail (rlpd.go.th)¶
สถานะ 10 ก.ย. 2569: เมลจาก
@rlpd.go.thที่ส่งผ่าน relay ของ Workd ไปไม่ถึง Gmail / Google Workspace เลย — relay รับเมลปกติ (250 queued) แต่ Gmail ปฏิเสธด้วย550 5.7.26เพราะโดเมนไม่ผ่านทั้ง SPF และ DKIM สาเหตุอยู่ที่ DNS ของโดเมน rlpd.go.th ไม่ใช่โค้ดหรือ config relay ต้องให้เจ้าของโดเมนแก้ (ดู ทางแก้)
ค่าลับ (secrets) ไม่อยู่ในหน้านี้
รหัส SMTP ของ mailbox และของ relay คนละชุดกัน เก็บอยู่ที่
RLPD_BOX_HANDOFF (นอก git) และ GitHub secret WEBPORTAL_SMTP_PASSWORD
ใน rlpd-pipeline — หน้านี้บันทึกเฉพาะโครงสร้างและผลการตรวจ
ภาพรวม SMTP ที่ใช้อยู่¶
| ระบบ | SMTP host | Port | บัญชี / From | หมายเหตุ |
|---|---|---|---|---|
S9 Web Portal (UAT .155) |
mailrelay.uc-workd.com |
587 STARTTLS | noreply@rlpd.go.th |
ย้ายมาจาก outgoing 7 ก.ย. 2569 (rlpd-pipeline main 7e22078, redeploy v0.39.40) |
| S9 Web Portal (PRD) | outgoing.workd.go.th / webmail.workd.go.th |
587 | rlpdnotify@rlpd.go.th |
secret ระดับ repo ยังเป็นรหัส mailbox |
Keycloak realm rlpd (UAT) |
outgoing.workd.go.th |
465 SSL | rlpdnotify@rlpd.go.th |
ตั้งโดย kc-uat-smtp-forgot.sh — ยังไม่ได้ย้าย มา mailrelay |
relay 2 ตัว 2 รหัส
outgoing.workd.go.th(203.154.64.183) = mail server ของ mailbox Workd ใช้รหัส mailboxmailrelay.uc-workd.com(210.4.128.96, EHLOsmtp*.zone*.two-email.com) = บริการ relay ของ two-email มี user DB แยก ต้องใช้ รหัส relay ต่างหาก (ได้จากกรม 7 ก.ย. 2569) — ใช้รหัส mailbox จะได้535- relay รับ envelope sender ได้ยืดหยุ่น (
noreply@ใช้ได้ทั้งที่ mailbox จริงคือrlpdnotify@)
Firewall ขาออกจาก UAT box .155
| Port | ผล |
|---|---|
| 587 / 2525 STARTTLS | ผ่าน |
| 465 implicit SSL | Connection reset กลาง TLS handshake (ทั้ง outgoing และ mailrelay) — ห้ามใช้จาก .155 |
อาการที่ตรวจพบ (7 ก.ย. 2569, เช็คซ้ำ 10 ก.ย.)¶
- ส่งจาก BFF container
rlpd-webportal-beบน.155ผ่าน mailrelay →AUTH 235,250 queuedทุกฉบับ - ส่งไป mail-tester.com → ถึงภายใน 1 นาที ขาออกจริงคือ
210.4.139.67(mail-67.bit-zone.two-email.com, อยู่ใน_spf.uc-workd.com) และ IP ไม่ติด blacklist - Gmail ของผู้ทดสอบไม่มีเมลจาก
@rlpd.go.thแม้แต่ฉบับเดียว (ค้นin:anywhereรวม spam/trash ย้อนหลัง 30 วัน) - Bounce (
5.7.26) วิ่งกลับ mailboxnoreply@ซึ่งอ่านไม่ได้ — IMAP 993 ของ workd ทุก host timeout - ปัญหามีมาก่อนย้าย relay:
outgoing.workd.go.thก็ไม่อยู่ใน SPF ของโดเมนตั้งแต่แรก
สาเหตุ (DNS)¶
mail-tester รายงาน Received-SPF: Permerror — Gmail ต้องผ่าน SPF หรือ DKIM อย่างน้อยหนึ่ง แต่ตกทั้งคู่
1. SPF permerror¶
SPF ปัจจุบันของ rlpd.go.th (NS = ns1/ns2.gdcc.cattelecom.com):
_spf3.mail.go.th (MailGoThai กลาง) ประกาศ TXT เป็น หลาย string แยกกัน:
"v=spf1" "include:spf.protection.outlook.com" "include:mailgun.org" "include:_ipv4.mail.go.th" ... "~all"
ตาม RFC 7208 string เหล่านี้ต่อกัน โดยไม่มีช่องว่าง → record ใช้ไม่ได้ → permerror
ลามทั้งโดเมน (pyspf: No valid SPF record for included domain: _spf3.mail.go.th)
_ipv4/_ipv6.mail.go.th พังแบบเดียวกัน และ _netblocks3.mail.go.th include วนกลับ _spf3
นอกจากนี้จำนวน DNS lookup รวมยังเกินขีด 10 ของ SPF ด้วย
2. ไม่มี DKIM¶
ทั้ง mailrelay และ outgoing ไม่เซ็น DKIM และไม่มี selector ใด ๆ ใน _domainkey.rlpd.go.th
3. ไม่มี DMARC¶
ไม่มี _dmarc.rlpd.go.th — ไม่ใช่สาเหตุตรง แต่ Gmail ให้น้ำหนักในการตัดสินใจ
ทางแก้ (ต้องให้เจ้าของโดเมนทำ)¶
[OPEN] ยังไม่ได้ส่งคำขอถึงผู้ดูแล DNS ของกรม — ระหว่างนี้ผู้ใช้ Gmail/Google Workspace จะไม่ได้รับเมลจาก UAT เลย (เมลรหัสผ่าน AD, ลืมรหัสผ่าน, แจ้งเตือนจาก Web Portal)
- แก้ SPF ให้ไม่มี include ที่พัง (pyspf → pass, 2 lookups):
ถ้ายังต้องส่งผ่าน MailGoThai ให้ใส่ IP ตรง ๆ แทน include:
ip4:164.115.2.0/23 ip6:2401:9D00:0101:1::/64 ip6:2401:9D00:0101:2::/64 - ขอ DKIM จาก uc-workd / two-email ให้เซ็นโดเมน
rlpd.go.thแล้วลง selector ใน DNS - เพิ่ม DMARC เริ่มที่
v=DMARC1; p=none; rua=mailto:<mailbox ที่อ่านได้>แล้วค่อยเข้ม - (ทางเลือก) ย้าย Keycloak realm SMTP มา mailrelay 587 ด้วย เพื่อลดจุดต่าง UAT/PRD
วิธีทดสอบซ้ำ¶
- อย่าไล่ nodemailer / env / relay ซ้ำ ถ้าเมลไม่ถึงปลายทาง — ใช้ mail-tester ก่อน:
ส่งไป
test-<ชื่อ>@srv1.mail-tester.comแล้วเปิดhttps://www.mail-tester.com/test-<ชื่อ>จะเห็นAuthentication-Results(SPF/DKIM/DMARC) ทันที - ตรวจ DNS:
- ส่งจาก container บน UAT (path เดียวกับ
directSendMail):docker exec -w /usr/src/app rlpd-webportal-be node -e '<nodemailer script อ่าน env>'—POST /api/common/send-mailใช้ทดสอบบน UAT ไม่ได้ เพราะไม่มีแถว active ในPORTAL.ApiKey - Keycloak:
kc-uat-smtp-forgot.sh(repoRLPD_REPOS) ยิงexecute-actions-email UPDATE_PASSWORDไปหา user ทดสอบ แล้วเช็ค inbox ปลายทาง
ไทม์ไลน์¶
| วันที่ | เหตุการณ์ |
|---|---|
| 9 ส.ค. 2569 | กรมให้บัญชี rlpdnotify@ บน outgoing.workd.go.th — ตั้ง Keycloak forgot password + SMTP; พบ .155 ออก 465 ไม่ได้ |
| 1 ก.ย. 2569 | ลอง mailrelay ด้วยรหัส mailbox → 535 (คนละ user DB) |
| 7 ก.ย. 2569 | ได้รหัส relay; UAT Web Portal ย้ายไป mailrelay.uc-workd.com:587 เป็น noreply@; ตรวจพบ SPF permerror / ไม่มี DKIM → Gmail ไม่รับ |
| 10 ก.ย. 2569 | เช็ค DNS ซ้ำ ยังไม่เปลี่ยน; Gmail ยังไม่มีเมลจาก @rlpd.go.th |
ดูเพิ่ม: เครือข่ายและการเข้าถึง · UAT SSO Environment