กลับไปยังบล็อก
วิศวกรรม เผยแพร่ 16.09.2026 ใช้เวลาอ่าน 1 นาที

เมื่อแบบฟอร์มติดต่อบอกว่า “ขอบคุณ” แต่ไม่มีอีเมลมาถึง

แบบฟอร์มติดต่ออาจเสียโดยไม่มีใครเห็นข้อผิดพลาด ผู้เยี่ยมชมได้รับข้อความยืนยันอย่างเป็นมิตร แต่ผู้รับไม่ได้อะไรเลย ทำไมจึงเกิดขึ้น และจะสังเกตให้ทันได้อย่างไร

ลองนึกถึงคลินิกกายภาพบำบัดเล็ก ๆ เว็บไซต์มีแบบฟอร์มติดต่อซึ่งทำงานได้ หรืออย่างน้อยก็ดูเหมือนเช่นนั้น ผู้เยี่ยมชมกรอก คลิก “ส่ง” แล้วเห็นข้อความเป็นมิตรว่า “ขอบคุณ เราจะติดต่อกลับเร็ว ๆ นี้” สิ่งที่ไม่มีใครเห็นคือข้อความหยุดเข้ากล่องจดหมายของคลินิกมาพักหนึ่งแล้ว ไม่มีข้อผิดพลาด ไม่มีอีเมลตีกลับในกล่องจดหมายของใคร ไม่มีไฟแดงที่ไหน แบบฟอร์มล้มเหลวอย่างเงียบ ๆ

ทำไมไม่มีใครสังเกต

หน้า “ขอบคุณ” ของแบบฟอร์มมักหมายถึงเพียงอย่างเดียว: เว็บไซต์ส่งต่อข้อความแล้ว ส่วนเซิร์ฟเวอร์อีเมลจะรับ จัดเป็นสแปม หรือปฏิเสธระหว่างทางเกิดขึ้นภายหลัง นอกสายตาของแบบฟอร์ม ตัวอย่างเช่น ฟังก์ชัน mail() ของ PHP รายงานว่าสำเร็จทันทีที่ระบบในเครื่องรับข้อความไว้เพื่อนำส่ง ไม่ใช่เมื่อถึงผู้รับ ผู้เยี่ยมชมจึงได้รับคำยืนยันแล้วจากไป ขณะที่เจ้าของเห็นกล่องจดหมายว่างและคิดว่าเป็นเพียงเดือนที่เงียบ ข้อความสอบถามที่ลดลงแทบไม่ทำให้กังวลเมื่อมองลำพัง วันหยุด สภาพอากาศ เศรษฐกิจ มีคำอธิบายที่ดูเป็นไปได้มากกว่า “แบบฟอร์มเสีย” เสมอ

ลำดับเหตุการณ์สมมติ
  1. วันที่ 0
    มีการอัปเดตปลั๊กอินตามปกติในช่วงกลางคืน เว็บไซต์ดูเหมือนเดิมทุกอย่าง
  2. วันที่ 1
    ข้อความสุดท้ายมาถึง ไม่มีใครรู้ว่านี่คือฉบับสุดท้าย
  3. วันที่ 2–13
    ผู้เยี่ยมชมยังส่งแบบฟอร์มและเห็น “ขอบคุณ” ต่อไป แต่ไม่มีข้อความถึงกล่องจดหมาย
  4. วันที่ 14
    มีคนโทรมาถามด้วยความหงุดหงิดเล็กน้อยว่าทำไมไม่มีใครตอบคำถามเลย
  5. วันที่ 15
    พบสาเหตุภายในหนึ่งชั่วโมง ข้อความตลอดสองสัปดาห์นั้นหายไปแล้ว เว้นแต่แบบฟอร์มเก็บสำเนาไว้ด้วย
ไม่ใช่กรณีจริง แต่เป็นรูปแบบที่พบบ่อยมาก

สาเหตุที่พบบ่อย

  • รหัสผ่าน SMTP หรือผู้ให้บริการอีเมลเปลี่ยนไป แบบฟอร์มยังเข้าสู่ระบบด้วยข้อมูลเดิมและเซิร์ฟเวอร์อีเมลปฏิเสธ โดยผู้เยี่ยมชมมองไม่เห็นอะไรผิดปกติ
  • ใช้ PHP mail() โดยไม่มีการยืนยันตัวตน เว็บเซิร์ฟเวอร์ส่งอีเมลโดยตรงโดยไม่เข้าสู่เซิร์ฟเวอร์อีเมลที่เหมาะสม เซิร์ฟเวอร์ผู้รับจำนวนมากมองอีเมลแบบนี้ว่าน่าสงสัย จึงเข้าถังสแปมหรือถูกปฏิเสธทันที
  • SPF, DKIM และ DMARC ไม่สอดคล้องกัน แบบฟอร์มจำนวนมากใส่ที่อยู่ผู้เยี่ยมชมใน From ข้อความจึงอ้างว่ามาจากที่อยู่ เช่น gmail.com แต่ส่งโดยเว็บเซิร์ฟเวอร์ของเว็บไซต์ ซึ่งเป็นสิ่งที่ DMARC ออกแบบมาเพื่อหยุด
  • การอัปเดตปลั๊กอินหรือเปลี่ยนธีมทำให้แบบฟอร์มหรือ CAPTCHA เสีย เทมเพลตที่เปลี่ยนไปทำช่องหาย สคริปต์ไม่โหลดอีก หรือวิดเจ็ต CAPTCHA ปรากฏโดยไม่มีสคริปต์ ทำให้ทุกการส่งไม่ผ่านการตรวจสอบ
  • กล่องจดหมายผู้รับเต็ม เซิร์ฟเวอร์อีเมลปฏิเสธข้อความใหม่ และข้อความตีกลับถูกส่งไปยังที่อยู่ที่ไม่มีใครอ่าน
  • แบนเนอร์คุกกี้บล็อกสคริปต์แบบฟอร์ม หากเครื่องมือขอความยินยอมจัด CAPTCHA หรือสคริปต์แบบฟอร์มเป็น “การตลาด” ผู้เยี่ยมชมที่ปฏิเสธคุกกี้อาจได้แบบฟอร์มที่ส่งไม่ได้ หรือถูกปฏิเสธเพราะไม่มีโทเค็น
  • ใบรับรอง TLS หรือโดเมนหมดอายุ ผู้เยี่ยมชมเห็นคำเตือนของเบราว์เซอร์แล้วออกไป หรือไม่สามารถเชื่อมต่อเซิร์ฟเวอร์อีเมลอย่างปลอดภัยได้อีก หากโดเมนของกล่องจดหมายผู้รับหมดอายุ อีเมลที่ส่งไปก็หยุดลง
  • ชั้นแคชให้บริการหน้าที่ล้าสมัย แคชทั้งหน้าอาจส่งแบบฟอร์มพร้อมโทเค็นความปลอดภัยที่หมดอายุแล้ว เช่น ค่าที่ใช้ครั้งเดียวหรือโทเค็น CSRF เซิร์ฟเวอร์ปฏิเสธการส่ง และผู้เยี่ยมชมอาจไม่เห็นข้อผิดพลาดชัดเจนขึ้นอยู่กับการตั้งค่า

กับดักของที่อยู่ From

สาเหตุที่สามควรพิจารณาให้ละเอียด เพราะการตั้งค่าแบบฟอร์มจำนวนมากมีปัญหานี้เป็นค่าเริ่มต้น DMARC ตรวจว่าโดเมนในที่อยู่ From ที่มองเห็นตรงกับโดเมนที่ SPF หรือ DKIM รับรองหรือไม่ หากแบบฟอร์มส่งข้อความ “จาก” ที่อยู่ของผู้เยี่ยมชม เซิร์ฟเวอร์ไม่ได้รับอนุญาตให้ส่งแทนโดเมนนั้น การตรวจจึงล้มเหลว ข้อความจะเข้าถังสแปมหรือถูกปฏิเสธตามนโยบาย DMARC ของโดเมนผู้เยี่ยมชมและผู้ให้บริการอีเมลของเว็บไซต์ วิธีแก้ง่ายมาก: ส่งจากที่อยู่ในโดเมนของเว็บไซต์เอง และใส่ที่อยู่ผู้เยี่ยมชมใน Reply-To การคลิก “ตอบกลับ” ยังส่งถึงผู้เยี่ยมชมเหมือนเดิม

สองวิธีส่งข้อความแบบฟอร์มเดียวกัน
เปราะบาง
  • From: ที่อยู่ของผู้เยี่ยมชม
  • ไม่มี Reply-To
  • PHP mail() ส่งตรงจากเว็บเซิร์ฟเวอร์
  • ไม่มี SPF, DKIM หรือ DMARC สำหรับโดเมนผู้ส่ง
  • ข้อความมีอยู่ในรูปอีเมลเท่านั้น
ทนทาน
  • From: ที่อยู่ในโดเมนของเว็บไซต์เอง เช่น form@yourdomain
  • Reply-To: ที่อยู่ของผู้เยี่ยมชม
  • SMTP ที่มีการยืนยันตัวตนหรือบริการส่งอีเมล
  • ตั้งค่า SPF, DKIM และ DMARC ให้สอดคล้องกัน
  • เก็บสำเนาในฐานข้อมูลด้วย
คอลัมน์ขวาแทบไม่ได้เพิ่มงาน ส่วนใหญ่เป็นการตั้งค่า

ควรทำอย่างไร

  1. 1ส่งข้อความทดสอบผ่านแบบฟอร์มของตนเองเป็นประจำ อย่างน้อยเดือนละครั้ง และทุกครั้งหลังอัปเดต เปลี่ยนธีม หรือเปลี่ยนการตั้งค่าอีเมล ทำเครื่องหมายให้ชัดว่าเป็นการทดสอบเพื่อไม่ให้มีคนตอบ
  2. 2รู้จังหวะตามปกติ หากแบบฟอร์มมักมีข้อความสองสามฉบับต่อสัปดาห์ การเงียบไปสองสัปดาห์เป็นเหตุให้ตรวจ ไม่ใช่แค่เดือนที่เงียบ
  3. 3ส่งผ่าน SMTP ที่มีการยืนยันตัวตน โดยผ่านผู้ให้บริการอีเมลหรือบริการส่งเฉพาะ แทนการพึ่ง PHP mail()
  4. 4ใช้โดเมนของเว็บไซต์เองใน From และที่อยู่ผู้เยี่ยมชมใน Reply-To แล้วตั้งค่า SPF, DKIM และ DMARC สำหรับโดเมนนั้นเพื่อให้ข้อความผ่านการตรวจสอบ
  5. 5เก็บสำเนาทุกการส่งไว้ในฐานข้อมูล ปลั๊กอินแบบฟอร์มจำนวนมากมีตัวเลือกนี้ บางครั้งเป็นส่วนเสริม หากอีเมลล้มเหลว ข้อความสอบถามยังอยู่
  6. 6ตรวจแบบฟอร์มหลังอัปเดตปลั๊กอินทุกครั้ง รวม CAPTCHA และกรณีปฏิเสธคุกกี้ด้วย

การตรวจแบบนี้ลืมได้ง่าย จึงควรทำให้เป็นอัตโนมัติ เมื่อมีบัญชีและโดเมนที่ยืนยันแล้ว formexposed สามารถส่งข้อความทดสอบที่ทำเครื่องหมายชัดเจนและตรวจว่าส่งถึงจริงหรือไม่ (การตรวจสอบการส่งถึง ต้องเลือกเปิดใช้เท่านั้น) ระบบยังตรวจจับความเงียบเมื่อแบบฟอร์มที่ปกติมีข้อความกลับไม่มีเลย และตรวจ SPF, DKIM และ DMARC ของอีเมลแจ้งเตือน รวมถึงวันหมดอายุใบรับรอง TLS และโดเมน โดยแจ้งเตือนเฉพาะเมื่อมีการเปลี่ยนแปลง

หากต้องการดูเบื้องต้น การตรวจสอบฟรีที่ formexposed.com ไม่ต้องมีบัญชีและไม่ส่งข้อมูลใด ๆ หนึ่งในสิ่งที่แสดงคือมี CAPTCHA แต่ทำงานผิดหรือไม่ เช่น วิดเจ็ตไม่มีสคริปต์ คีย์ทดสอบสาธารณะ หรือข้อผิดพลาดในเบราว์เซอร์ ซึ่งเป็นสาเหตุที่แบบฟอร์มหยุดทำงานอย่างเงียบ ๆ การยืนยันว่าข้อความส่งถึงจริงทำได้ด้วยข้อความทดสอบจริงเท่านั้น จึงควรส่งทดสอบวันนี้