Email Bounce คือสถานการณ์ที่อีเมลที่คุณส่งออกไปไม่สามารถไปถึงกล่องจดหมายของผู้รับได้ และถูกส่งกลับมาพร้อมข้อความแจ้งเหตุขัดข้อง ปัญหานี้ดูเหมือนเรื่องเล็กน้อย แต่หากปล่อยทิ้งไว้ Bounce Rate ที่สูงจะกระทบต่อ Sender Reputation โดยตรง ส่งผลให้อีเมลของคุณถูกกรองลงถังขยะหรือถูกปฏิเสธโดยอัตโนมัติมากขึ้นเรื่อย ๆ บทความนี้จะอธิบายความแตกต่างระหว่าง Hard Bounce กับ Soft Bounce อย่างละเอียด พร้อมวิธีอ่าน Log วิเคราะห์ต้นตอ และขั้นตอนแก้ไขที่นำไปใช้ได้จริง
Email Bounce คืออะไร และเกิดขึ้นได้อย่างไร
เมื่อคุณส่งอีเมล กระบวนการที่เกิดขึ้นเบื้องหลังคือ Mail Transfer Agent (MTA) ของคุณจะเชื่อมต่อกับเซิร์ฟเวอร์ปลายทางผ่านโปรโตคอล SMTP (Simple Mail Transfer Protocol) โดยเซิร์ฟเวอร์ปลายทางจะตอบกลับด้วย Response Code ที่บอกว่าส่งสำเร็จ ชั่วคราวล้มเหลว หรือถาวรล้มเหลว ถ้าเซิร์ฟเวอร์ปลายทางไม่สามารถรับอีเมลได้ ระบบจะส่ง Non-Delivery Report (NDR) หรือที่เรียกว่า Bounce Message กลับมาหาผู้ส่ง
Bounce Message จะมีข้อมูลสำคัญ 3 ส่วน ได้แก่ SMTP Status Code, Enhanced Status Code และ Diagnostic Info ซึ่งบอกสาเหตุที่แท้จริงของปัญหา ความสามารถในการอ่านและตีความข้อมูลเหล่านี้จึงเป็นทักษะสำคัญสำหรับผู้ดูแลระบบอีเมลทุกคน
Hard Bounce คืออะไร และเกิดจากอะไร
Hard Bounce คือความล้มเหลวในการส่งอีเมลแบบถาวร เซิร์ฟเวอร์ปลายทางส่งสัญญาณกลับว่าไม่สามารถรับอีเมลนี้ได้ไม่ว่าจะลองส่งใหม่กี่ครั้ง MTA ของผู้ส่งจึงหยุดลองและบันทึกว่าเป็น Hard Bounce ทันที รหัส SMTP ที่พบบ่อยคือกลุ่ม 5xx
สาเหตุหลักของ Hard Bounce ได้แก่:
- อีเมลปลายทางไม่มีอยู่จริง — เช่น พิมพ์ผิด (gmial.com แทน gmail.com) หรืออีเมลนั้นถูกลบไปแล้ว ระบบจะตอบกลับด้วย
550 5.1.1 User Unknown - โดเมนปลายทางไม่มีอยู่ — ไม่พบ MX Record หรือโดเมนหมดอายุ เซิร์ฟเวอร์จะไม่รู้ว่าจะส่งไปที่ไหน
- ถูกบล็อกถาวรโดยนโยบาย — เซิร์ฟเวอร์ปลายทางมีนโยบายปฏิเสธอีเมลจาก IP หรือโดเมนของผู้ส่งอย่างถาวร ตัวอย่าง
550 5.7.1 Message rejected due to policy - ที่อยู่อีเมลถูก Deactivate — บัญชีผู้ใช้หมดอายุหรือองค์กรปิดบัญชีนั้นไปแล้ว
Hard Bounce เป็นสัญญาณอันตราย เพราะแต่ละ Hard Bounce ที่เกิดขึ้นจะบั่นทอน Sender Score ของโดเมนคุณโดยตรง ผู้ให้บริการอย่าง Google, Microsoft และ Yahoo จะเริ่มมองว่าคุณส่ง Spam หรือไม่ได้ดูแล List คุณภาพอีเมลที่ดี
Soft Bounce คืออะไร และแตกต่างจาก Hard Bounce อย่างไร
Soft Bounce คือความล้มเหลวในการส่งอีเมลแบบชั่วคราว เซิร์ฟเวอร์ปลายทางบอกว่าตอนนี้ไม่สามารถรับได้ แต่อาจลองใหม่ได้ในภายหลัง MTA จะบันทึกและลองส่งซ้ำตามตารางที่กำหนด (retry schedule) โดยทั่วไปจะลองนาน 24-72 ชั่วโมงก่อนยอมแพ้และส่ง Bounce Notice รหัส SMTP คือกลุ่ม 4xx
สาเหตุหลักของ Soft Bounce ได้แก่:
- กล่องจดหมายเต็ม — Mailbox ของผู้รับเต็ม Quota แล้ว ตัวอย่าง
452 4.2.2 Mailbox fullMTA จะรอให้กล่องว่างก่อนส่งซ้ำ - เซิร์ฟเวอร์ไม่พร้อมชั่วคราว — เซิร์ฟเวอร์ปลายทางอยู่ระหว่าง Maintenance หรือ Load สูงเกินไป ตัวอย่าง
421 Service temporarily unavailable - ขนาดอีเมลเกินที่กำหนด — ผู้รับหรือเซิร์ฟเวอร์ปลายทางตั้งค่าจำกัดขนาดอีเมลไว้ต่ำกว่าขนาดที่คุณส่ง ตัวอย่าง
552 Message size exceeds limit - Rate Limiting จากเซิร์ฟเวอร์ปลายทาง — ถ้าคุณส่งอีเมลปริมาณมากในช่วงเวลาสั้น บางเซิร์ฟเวอร์จะจำกัด Connection ชั่วคราว ตัวอย่าง
421 Too many connections
Soft Bounce น้อยครั้งเป็นเรื่องปกติ แต่ถ้า Soft Bounce เดิมเกิดซ้ำกับที่อยู่อีเมลเดิมหลายครั้งติดต่อกัน หลายระบบจะ Automatically Upgrade เป็น Hard Bounce เพื่อป้องกันการส่งซ้ำโดยไม่มีประโยชน์
เปรียบเทียบ Hard Bounce vs Soft Bounce และ SMTP Code ที่พบบ่อย
| ประเภท | SMTP Code | ตัวอย่าง Enhanced Code | ความหมาย | การจัดการ |
|---|---|---|---|---|
| Hard Bounce | 550 |
5.1.1 |
User Unknown / อีเมลไม่มีอยู่ | ลบออกจาก List ทันที |
| Hard Bounce | 551 |
5.1.6 |
User not local / ไม่ใช่ผู้ใช้โดเมนนี้ | ลบออกจาก List |
| Hard Bounce | 554 |
5.7.1 |
Rejected — Policy / Spam | ตรวจ Blacklist + SPF/DKIM |
| Soft Bounce | 421 |
4.3.2 |
Service unavailable / Rate Limit | รอ MTA Retry อัตโนมัติ |
| Soft Bounce | 452 |
4.2.2 |
Mailbox full / Over quota | รอ Retry หรือแจ้งผู้รับ |
| Soft Bounce | 452 |
4.3.1 |
Insufficient system storage | รอ Retry |
วิธีอ่านและวิเคราะห์ Bounce Log จาก Mail Server
การแก้ปัญหา Bounce Rate ต้องเริ่มจากการอ่าน Log ของ MTA โดยตรง ตัวอย่างเซิร์ฟเวอร์ที่ใช้บ่อยในสภาพแวดล้อม Linux คือ Postfix และ Exim บทบาทของ Log ไม่ใช่แค่บอกว่า Bounce แต่บอกสาเหตุเฉพาะที่นำไปแก้ไขได้
อ่าน Postfix Log
Log ของ Postfix อยู่ที่ /var/log/maillog หรือ /var/log/mail.log แต่ละบรรทัดที่เกี่ยวกับ Bounce จะมีสถานะ status=bounced
# ดู Bounce ทั้งหมดจาก Postfix Log grep "status=bounced" /var/log/maillog | tail -50 # ตัวอย่างผลลัพธ์: # Jun 9 10:23:11 mailserver postfix/smtp[1234]: ABC123: to=<[email protected]>, # relay=mail.example.com[93.184.216.34]:25, # status=bounced (host mail.example.com[93.184.216.34] said: # 550 5.1.1 The email account that you tried to reach does not exist (in reply to RCPT TO command)) # นับ Bounce แยกตามโดเมน grep "status=bounced" /var/log/maillog | grep -oP 'to=<[^@]+@\K[^>]+' | sort | uniq -c | sort -rn | head -20
อ่าน Exim Log
Exim ใช้ใน Hosting หลายเจ้า (รวมถึง DirectAdmin) Log หลักอยู่ที่ /var/log/exim_mainlog
# ดู Bounce จาก Exim Log grep " ** " /var/log/exim_mainlog | tail -50 # ตัวอย่างผลลัพธ์: # 2026-06-09 10:25:00 [2345] 1lOXxx-0000YY-00 ** [email protected] # R=dnslookup T=remote_smtp: SMTP error from remote mail server # after RCPT TO:<[email protected]>: # 550 5.1.1 User unknown # ดูอัตรา Bounce ย้อนหลัง 1 วัน grep "$(date '+%Y-%m-%d')" /var/log/exim_mainlog | grep " ** " | wc -l
วิเคราะห์หา Pattern
หลังจากรวบรวม Bounce Log แล้ว ให้มองหา Pattern ดังนี้:
- Bounce กระจุกอยู่ที่โดเมนเดียว — อาจหมายถึงโดเมนนั้นบล็อก IP ของคุณ หรือนโยบาย DMARC ปฏิเสธอีเมลที่ไม่มี DKIM ที่ถูกต้อง
- Bounce เกิดจากหลายที่อยู่ในโดเมนเดียวกัน — อาจเป็น Bulk Import ที่อีเมลไม่ถูกต้องหลายตัว หรือ List เก่าที่ไม่ได้ Verify
- Bounce เพิ่มขึ้นกะทันหันหลังส่ง Campaign — อาจเป็นสัญญาณว่า List ของคุณมีคุณภาพต่ำ หรือ IP ติด Blacklist ใหม่
- Bounce เฉพาะอีเมลขนาดใหญ่ — ตรวจสอบขนาดไฟล์แนบและ Limit ของเซิร์ฟเวอร์ปลายทาง
วิธีแก้ปัญหา Hard Bounce อย่างเป็นระบบ
Hard Bounce ต้องจัดการอย่างจริงจังเพราะกระทบ Reputation โดยตรง ขั้นตอนที่แนะนำ:
ขั้นที่ 1 — ลบที่อยู่ที่ Bounce ออกจาก List ทันที
อีเมลที่เกิด Hard Bounce ต้องถูกลบออกจาก Mailing List ทันทีโดยไม่ลองส่งซ้ำ การส่งซ้ำหาที่อยู่ที่ไม่มีอยู่จริงซ้ำ ๆ คือสัญญาณที่ชัดเจนว่าผู้ส่งไม่ดูแล List — เป็นตัวชี้วัดที่ Spam Filter ใช้ตัดสิน
# ตัวอย่าง Script Python ง่าย ๆ เพื่อดึงรายการ Bounce จาก Log
import re
bounced_emails = set()
with open('/var/log/maillog') as f:
for line in f:
if 'status=bounced' in line:
match = re.search(r'to=<([^>]+)>', line)
if match:
bounced_emails.add(match.group(1).lower())
# บันทึกออกเป็นไฟล์เพื่อนำไป Unsubscribe
with open('hard_bounce_list.txt', 'w') as out:
for email in sorted(bounced_emails):
out.write(email + '\n')
print(f"พบ {len(bounced_emails)} อีเมล Hard Bounce")
ขั้นที่ 2 — ตรวจสอบและแก้ไข DNS Records
Hard Bounce จำนวนหนึ่งเกิดจาก SPF, DKIM หรือ DMARC ที่กำหนดค่าผิด ซึ่งทำให้เซิร์ฟเวอร์ปลายทางปฏิเสธอีเมลตามนโยบาย ตรวจด้วย:
# ตรวจ SPF Record dig TXT yourdomain.com | grep "v=spf1" # ตรวจ DKIM Public Key dig TXT selector._domainkey.yourdomain.com # ตรวจ DMARC Policy dig TXT _dmarc.yourdomain.com
ขั้นที่ 3 — ตรวจสอบ Blacklist
ถ้า Hard Bounce เกิดกับหลายโดเมน โดยเฉพาะเมื่อเห็น code 554 5.7.1 ให้ตรวจทันที:
# ตรวจ IP ว่าติด Blacklist หรือไม่ (ผ่าน MXToolbox API หรือ dig) # เช็ค Spamhaus ZEN dig 34.216.184.93.zen.spamhaus.org A # (สลับ Octet ของ IP ก่อน: 93.184.216.34 → 34.216.184.93) # ถ้าตอบกลับด้วย 127.0.0.x = ติด Blacklist # ไม่ตอบกลับ (NXDOMAIN) = ไม่ติด
วิธีแก้ปัญหา Soft Bounce และลด Retry ที่ไม่จำเป็น
Soft Bounce ส่วนใหญ่หายไปเองเมื่อ MTA Retry แต่ถ้าเห็นว่า Soft Bounce บางประเภทเกิดซ้ำบ่อย ควรจัดการเชิงรุก:
แก้ปัญหากล่องจดหมายเต็ม (452 Mailbox Full)
ถ้าผู้รับเป็นลูกค้าหรือผู้ติดต่อสำคัญ และเห็น Soft Bounce เพราะกล่องเต็มซ้ำหลายครั้ง ให้ติดต่อผ่านช่องทางอื่น (โทรศัพท์, Line, SMS) เพื่อแจ้งให้เขาล้างกล่องจดหมาย ฝั่งผู้ดูแลระบบ ถ้าเป็น User บนเซิร์ฟเวอร์ของคุณเองสามารถเพิ่ม Quota ได้:
# DirectAdmin — เพิ่ม Quota ผู้ใช้ผ่าน Command Line # แก้ไขไฟล์ quota ของ user # หรือผ่าน DirectAdmin API: curl -k "https://hostname:2222/CMD_API_EMAIL_QUOTA" \ -u admin:password \ -d "domain=yourdomain.com&user=username"a=500" # quota ในหน่วย MB
แก้ปัญหา Rate Limiting (421)
ถ้าส่ง Bulk Email และเจอ 421 Too many connections บ่อย ให้ตั้งค่า Throttling ใน MTA เพื่อจำกัดจำนวน Connection ต่อวินาทีไปยังแต่ละโดเมน:
# Postfix — ตั้งค่า Transport Rate ไปยัง gmail.com # แก้ไฟล์ /etc/postfix/transport gmail.com smtp:[smtp.gmail.com]:587 # แก้ไฟล์ /etc/postfix/main.cf transport_maps = hash:/etc/postfix/transport smtp_destination_rate_delay = 1s # หน่วงเวลา 1 วิ ต่อ Message smtp_extra_recipient_limit = 10 # ไม่เกิน 10 Recipient ต่อ Connection default_destination_concurrency_limit = 2 # Connection พร้อมกันสูงสุด 2
เคล็ดลับ: ก่อนส่ง Email Campaign ใหญ่ ควรทำ Email List Hygiene ก่อนเสมอ — ใช้ Double Opt-In เพื่อยืนยันที่อยู่อีเมล และรัน Email Verification Service เพื่อกรองที่อยู่ที่ไม่มีอยู่จริงออก เป้าหมายคือ Hard Bounce Rate ต่ำกว่า 2% และ Soft Bounce Rate ต่ำกว่า 5% ก่อนกด Send
การตั้งค่า SPF, DKIM, DMARC เพื่อลด Bounce จาก Policy Rejection
Bounce จำนวนมากในปัจจุบันมาจาก Policy Rejection ซึ่งเซิร์ฟเวอร์ปลายทางปฏิเสธอีเมลเพราะไม่ผ่านการตรวจสอบ Authentication การตั้งค่า 3 Record นี้ให้ถูกต้องจะลด Bounce ประเภทนี้ได้มาก:
SPF Record
SPF (Sender Policy Framework) ระบุว่า IP หรือ Host ใดมีสิทธิ์ส่งอีเมลในนามโดเมนของคุณ:
# ตัวอย่าง SPF Record พื้นฐาน yourdomain.com. IN TXT "v=spf1 mx a ip4:192.168.1.0/24 include:mailprovider.com ~all" # คำอธิบาย: # v=spf1 = เวอร์ชัน SPF # mx = อนุญาต IP จาก MX Record ของโดเมน # a = อนุญาต IP จาก A Record ของโดเมน # ip4:x.x.x.x = อนุญาต IP โดยตรง # include: = อ้างถึง SPF ของ Domain อื่น (เช่น ESP) # ~all = Softfail — อนุญาตแต่ Marking ว่าน่าสงสัย # -all = Hardfail — ปฏิเสธทันทีถ้าไม่ตรงกฎ
DKIM Signature
DKIM (DomainKeys Identified Mail) เซ็นชื่อดิจิทัลในอีเมลเพื่อพิสูจน์ว่ามาจากโดเมนนั้นจริง:
# ตรวจสอบ DKIM ใน Header ของอีเมลที่ได้รับ: # DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; # d=yourdomain.com; s=selector1; # bh=BASE64HASH; # h=From:To:Subject:Date:MIME-Version; # b=SIGNATURE_BASE64 # ตรวจ DKIM DNS Record: dig TXT selector1._domainkey.yourdomain.com # ผลลัพธ์ที่ถูกต้องควรมี: # "v=DKIM1; k=rsa; p=MIGfMA0GCSq..."
DMARC Policy
DMARC กำหนดนโยบายว่าควรทำอย่างไรกับอีเมลที่ Fail SPF หรือ DKIM และส่ง Report กลับมาให้คุณ:
# DMARC Record พื้นฐาน (เริ่มต้นด้วย p=none เพื่อ Monitor ก่อน) _dmarc.yourdomain.com. IN TXT "v=DMARC1; p=none; rua=mailto:[email protected]" # หลังตรวจ Report แล้ว เข้มขึ้นเป็น quarantine: "v=DMARC1; p=quarantine; pct=50; rua=mailto:[email protected]" # เข้มสุด — Reject ทันที: "v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected]"
การติดตาม Bounce Rate และ Sender Reputation อย่างต่อเนื่อง
การแก้ปัญหา Bounce ไม่ใช่งานครั้งเดียวจบ ต้องมีระบบ Monitoring อย่างต่อเนื่อง เครื่องมือที่ควรใช้:
- Google Postmaster Tools — ติดตาม Domain Reputation, IP Reputation, Spam Rate สำหรับการส่งไปยัง Gmail
- Microsoft SNDS (Smart Network Data Services) — ติดตาม Reputation สำหรับการส่งไปยัง Outlook/Hotmail
- MXToolbox Email Health — ตรวจสอบ Blacklist, DNS Records, SMTP Diagnostics รวมในที่เดียว
- Log Monitoring Script — ตั้ง Cron Job รัน Script สรุป Bounce Rate ทุกวัน แจ้งเตือนถ้าเกิน Threshold
# Cron Job ตรวจ Bounce Rate ทุกวัน เวลา 08:00 0 8 * * * /usr/local/bin/check_bounce_rate.sh | mail -s "Daily Bounce Report" [email protected] # ตัวอย่าง check_bounce_rate.sh #!/bin/bash DATE=$(date '+%Y-%m-%d' -d "yesterday") TOTAL=$(grep "$DATE" /var/log/maillog | grep "status=" | wc -l) BOUNCED=$(grep "$DATE" /var/log/maillog | grep "status=bounced" | wc -l) if [ "$TOTAL" -gt 0 ]; then RATE=$(echo "scale=2; $BOUNCED * 100 / $TOTAL" | bc) echo "Date: $DATE | Total: $TOTAL | Bounced: $BOUNCED | Rate: ${RATE}%" if (( $(echo "$RATE > 5" | bc -l) )); then echo "WARNING: Bounce Rate สูงเกิน 5% กรุณาตรวจสอบ!" fi fi
คำถามที่พบบ่อย (FAQ)
Hard Bounce กับ Soft Bounce ต่างกันอย่างไร
Hard Bounce คือความล้มเหลวถาวร เซิร์ฟเวอร์ตอบกลับด้วย SMTP 5xx และไม่มีทางส่งสำเร็จแม้ลองใหม่ สาเหตุหลักคืออีเมลไม่มีอยู่ โดเมนไม่มีจริง หรือถูกบล็อกถาวร ต้องลบออกจาก List ทันที ส่วน Soft Bounce คือความล้มเหลวชั่วคราว เซิร์ฟเวอร์ตอบ SMTP 4xx MTA จะลองส่งซ้ำตามตารางก่อนยอมแพ้ สาเหตุเช่นกล่องเต็ม เซิร์ฟเวอร์ไม่พร้อม หรือไฟล์แนบใหญ่เกิน
Bounce Rate เท่าไรถือว่าปกติ และเมื่อไรควรเป็นห่วง
โดยทั่วไป Hard Bounce Rate ที่ยอมรับได้ควรต่ำกว่า 2% หาก Hard Bounce เกิน 2% ถือว่าน่าเป็นห่วง เพราะจะกระทบ Sender Reputation ทันที ผู้ให้บริการอย่าง Gmail และ Outlook จะเริ่มมองว่าคุณส่ง Spam หรือไม่ดูแล List ถ้า Hard Bounce เกิน 5% อาจถูกจำกัดการส่งหรือโดนใส่ Blacklist ควรทำความสะอาด List อีเมลทุก 3-6 เดือน
วิธีอ่าน Bounce Error Code จาก SMTP Log
SMTP Error Code แบ่งเป็น 2 กลุ่มหลักคือ 4xx (ชั่วคราว/Soft Bounce) และ 5xx (ถาวร/Hard Bounce) ตัวอย่างที่พบบ่อย: 421 = เซิร์ฟเวอร์ปฏิเสธชั่วคราว (Rate Limit), 452 = กล่องเต็มหรือ Resource ไม่พอ, 550 = อีเมลไม่มีอยู่หรือถูกบล็อก, 554 = ถูก Reject เพราะ Spam หรือ Policy วิธีอ่านคือดูที่ Enhanced Status Code หลัง 3 หลักแรก เช่น 550 5.1.1 หมายถึง User Unknown
แก้ปัญหา Bounce Rate สูงจาก Blacklist ทำอย่างไร
ขั้นแรกตรวจสอบว่า IP หรือโดเมนของคุณติด Blacklist หรือไม่ผ่านเครื่องมืออย่าง MXToolbox หรือ MultiRBL ถ้าติดให้ตรวจสาเหตุก่อน เช่น Spam Complaint หรือ Botnet แล้วส่ง Delisting Request พร้อมอธิบายมาตรการที่แก้ไขแล้ว ควรตรวจ SPF/DKIM/DMARC ให้ถูกต้อง ทำความสะอาด Email List และตั้ง Double Opt-In เพื่อป้องกันซ้ำในอนาคต
Email Hosting ธุรกิจ @โดเมนตัวเอง
AsiaGB Email พร้อม SPF DKIM DMARC Deliverability สูง เริ่มต้น 200 บาท/ปี
ดูแพ็กเกจ Email