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 ได้แก่:

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 ได้แก่:

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 ดังนี้:

วิธีแก้ปัญหา 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 อย่างต่อเนื่อง เครื่องมือที่ควรใช้:

# 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