WooCommerce Troubleshooting

WooCommerce Email ไม่ส่ง เกิดจากอะไร แก้ยังไง

WooCommerce Email ไม่ส่ง เกิดจากอะไร แก้ยังไง

สรุปคำตอบ

WooCommerce Email ไม่ส่ง ส่วนใหญ่เกิดจาก WordPress ส่งเมลผ่าน wp_mail() ซึ่งใช้ PHP mail() ของ Hosting เป็นค่าเริ่มต้น ฟังก์ชันนี้มักถูกจำกัดหรือบล็อกและไม่มีการยืนยันตัวตน เมลจึงไม่ออกหรือตก Spam สาเหตุอื่นคือโดเมนไม่มี SPF/DKIM, From Email ไม่ตรงโดเมน, Plugin ขัดกับ wp_mail() หรือปิด Email ไว้ใน WooCommerce → Settings → Emails วิธีแก้ถาวรคือติดตั้ง SMTP Plugin เช่น WP Mail SMTP หรือ FluentSMTP ตั้ง From Email เป็นอีเมลโดเมนตัวเอง และเพิ่ม SPF กับ DKIM ใน DNS

อีเมลแจ้งการสั่งซื้อ ยืนยัน Order หรือแจ้งสถานะ — ถือเป็นส่วนสำคัญของระบบ WooCommerce ที่ลูกค้าคาดหวังจะได้รับทันทีหลังชำระเงิน ถ้าเมลเหล่านี้ไม่ออก ลูกค้าสับสน เจ้าของร้านต้องตอบคำถามซ้ำ ๆ และอาจเสียความน่าเชื่อถือโดยไม่รู้ตัว ปัญหานี้แก้ได้ แต่ต้องระบุสาเหตุให้ถูกก่อน

ถ้าตั้งค่า SMTP ครบแล้วแต่อีเมลยังเด้งกลับพร้อมข้อความเรื่องชื่อเสียงของ IP อาจเป็นเพราะเซิร์ฟเวอร์ถูกใช้ส่งสแปม อ่านวิธีตรวจได้ที่ อีเมลส่งไม่ออก อาจเพราะเว็บโดนฝัง Spam Mailer

อาการที่พบบ่อย

ปัญหา WooCommerce Email ไม่ส่ง มักแสดงออกใน 3 รูปแบบหลัก:

  • ลูกค้าไม่ได้รับเมลยืนยัน Order แต่ระบบบันทึก Order ไว้ในหน้า Admin ปกติ
  • แอดมินไม่ได้รับอีเมลแจ้ง Order ใหม่ ทั้งที่เปิดการแจ้งเตือนไว้แล้ว
  • เมลเข้า Spam / Junk ของลูกค้า ทำให้ดูเหมือนไม่ถึง

อาการเหล่านี้อาจเกิดจากคนละสาเหตุ จึงต้องตรวจสอบเป็นขั้นตอน ก่อนลงมือแก้

WooCommerce Checkout / จ่ายเงินไม่ได้ — WP Doctor Thailand
ปัญหาหน้า Checkout และการจ่ายเงินใน WooCommerce

สาเหตุหลักที่ทำให้ Email ไม่ส่ง

WordPress ส่งเมลผ่านฟังก์ชัน wp_mail() ซึ่งอาศัย PHP mail() ของ Hosting เป็นค่าเริ่มต้น Hosting ส่วนใหญ่จำกัด หรือบล็อกฟังก์ชันนี้เพื่อป้องกัน Spam ทำให้เมลไม่ออก นอกจากนี้ยังมีสาเหตุอื่น ๆ ได้แก่:

  • ไม่ได้ตั้งค่า SMTP — PHP mail() ถูก Disable หรือถูกบล็อกโดย Hosting
  • ไม่มี SPF / DKIM / DMARC — เมลถูก Spam filter ของปลายทางปฏิเสธ
  • ที่อยู่ From ไม่ตรงโดเมน — เช่น ส่งจาก noreply@woocommerce.com แต่โดเมนเว็บคือ myshop.co.th
  • Plugin ขัดแย้งกัน — บาง Plugin hooking wp_mail() แล้ว Throw error เงียบ ๆ
  • WooCommerce Email ถูก Disable ในการตั้งค่า WooCommerce เอง
  • Email ของลูกค้ากรอกผิด หรือเมลนั้นถูก Bounce ครั้งก่อน

วิธีตรวจสอบเบื้องต้น

ก่อนแก้ไข ให้ตรวจสอบ 3 จุดนี้ก่อน:

  • ตรวจสอบการตั้งค่า WooCommerce Email: เข้า WooCommerce → Settings → Emails แล้วคลิก Email แต่ละประเภท ตรวจว่าเปิด Enable อยู่ และอีเมลผู้รับถูกต้อง
  • ทดสอบส่ง Test Email: ในหน้า Email นั้น คลิก “Send test email” แล้วดูว่าเมลถึงหรือไม่ รวมถึงเช็ค Spam folder
  • ติดตั้ง Plugin Log เมล: ใช้ Plugin เช่น WP Mail Log หรือ Mail Log อื่น ๆ เพื่อดูว่า wp_mail() ถูกเรียกหรือเปล่า และ Return ค่าอะไร

ถ้า Log แสดงว่า wp_mail() ถูกเรียกแต่เมลไม่ถึง แสดงว่าปัญหาอยู่ที่ SMTP หรือ DNS Record ถ้าไม่ถูกเรียกเลย ปัญหาอยู่ที่ WooCommerce หรือ Plugin ขัดแย้ง

สิ่งสำคัญที่ต้องรู้: PHP mail() ที่ Hosting ให้มาไม่เหมาะกับการส่ง Transactional Email เพราะขาด Authentication ทำให้เมลโดน Spam filter จับได้บ่อย วิธีแก้ที่ได้ผลถาวรคือเปลี่ยนไปใช้ SMTP ผ่าน Plugin
แก้ปัญหา WooCommerce — WP Doctor Thailand
ตรวจสอบและแก้ปัญหาระบบร้านค้า WooCommerce

วิธีแก้ไขทีละขั้นตอน

ขั้นที่ 1 — ติดตั้ง SMTP Plugin

ติดตั้ง Plugin เช่น WP Mail SMTP หรือ FluentSMTP (ฟรีทั้งคู่) แล้วตั้งค่าส่งผ่าน SMTP Server จริง เช่น:

  • Gmail SMTP (ผ่าน Google App Password หรือ OAuth)
  • SendGrid / Mailgun / Brevo (รองรับปริมาณเมลสูง เหมาะกับร้านค้า)
  • SMTP ของ Hosting (เช่น mail.yourdomain.com port 465 SSL)

หลังตั้งค่า ให้กด “Send Test Email” ใน Plugin นั้นเพื่อยืนยันว่าเชื่อมต่อสำเร็จ

ขั้นที่ 2 — ตั้งค่า From Name และ From Email ให้ตรงโดเมน

ใน WP Mail SMTP ตั้งค่า From Email เป็น noreply@yourdomain.com หรืออีเมลของโดเมนตัวเอง เพราะถ้า From Email ไม่ตรงกับโดเมนที่ส่ง เมลจะถูก Reject หรือตก Spam

ขั้นที่ 3 — เพิ่ม SPF และ DKIM Record ใน DNS

เข้า DNS ของโดเมน (ผ่าน Cloudflare, cPanel, หรือ Registrar) แล้วเพิ่ม:

  • SPF Record (TXT): v=spf1 include:_spf.google.com ~all (ตัวอย่างสำหรับ Gmail SMTP)
  • DKIM Record: ได้จาก SMTP Provider ที่ใช้ เช่น SendGrid จะให้ CNAME หรือ TXT มาเพิ่ม

DNS อาจใช้เวลา propagate 1–24 ชั่วโมง หลังจากนั้นทดสอบส่งเมลอีกครั้ง

ขั้นที่ 4 — ตรวจสอบ Plugin Conflict

ถ้ายังไม่ได้ผล ให้ลอง Deactivate Plugin ทีละตัว โดยเฉพาะ Plugin ที่ Hook กับเมล หรือ Cache Plugin บาง Plugin ขัดกับ wp_mail() เงียบ ๆ โดยไม่มี Error ปรากฏ อ่านเพิ่มเติมเรื่อง Plugin Conflict ใน WooCommerce แก้ยังไง

การป้องกันในระยะยาว

  • ใช้ SMTP ที่มี Dashboard Log เมื่อส่งสำเร็จหรือล้มเหลว (SendGrid, Brevo ทำได้)
  • ตั้ง Alert ให้แอดมินรับเมลสำรองเมื่อ Order ใหม่เข้า
  • ทดสอบส่ง Test Email หลัง Update WordPress / WooCommerce ทุกครั้ง
  • ตรวจสอบ Bounce Rate ใน SMTP Dashboard เป็นประจำ

ปัญหาเมลมักเกิดร่วมกับปัญหาอื่น เช่น WooCommerce Order ไม่เข้า หรือ WooCommerce Checkout ไม่ได้ กดสั่งซื้อไม่ทำงาน ซึ่งควรตรวจสอบพร้อมกัน

เมื่อไหร่ควรเรียกผู้เชี่ยวชาญ

ถ้าตั้งค่า SMTP แล้วแต่เมลยังไม่ออก DNS Record ถูกต้องแล้วแต่ยัง Spam อยู่ หรือไม่แน่ใจว่าปัญหาอยู่ที่จุดไหน บริการ แก้ปัญหา WooCommerce ของเราตรวจสอบและแก้ไขได้ตั้งแต่ต้นจนจบ รวมถึงการตั้งค่า SMTP, DNS Record และ Log การส่งเมลให้ครบถ้วน

คำถามที่พบบ่อย

WooCommerce ส่งเมลผ่าน PHP mail() ได้ไหม ทำไมต้องใช้ SMTP?

PHP mail() ส่งได้ แต่ขาด Authentication (SPF/DKIM) ทำให้เมลโดน Spam filter ของปลายทางจับบ่อยมาก การใช้ SMTP ผ่าน Plugin เช่น WP Mail SMTP ช่วยให้เมลถึงกล่องรับจริงได้ดีกว่าอย่างเห็นได้ชัด

ติดตั้ง WP Mail SMTP แล้ว Test Email ผ่าน แต่เมล WooCommerce ยังไม่ออก เกิดจากอะไร?

อาจเกิดจาก WooCommerce Email บางประเภทถูก Disable ในหน้า WooCommerce → Settings → Emails ให้เข้าไปเปิดใหม่ หรือตรวจดูว่ามี Plugin อื่น override การส่งเมลอยู่หรือเปล่า

เมลถึงแต่ตก Spam ของลูกค้า แก้ยังไง?

ให้ตรวจสอบว่าโดเมนมี SPF Record และ DKIM Record ครบหรือยัง และ From Email ต้องเป็นอีเมลของโดเมนตัวเองเท่านั้น ไม่ใช่ noreply@woocommerce.com หลังแก้ DNS แล้วรอ propagate และทดสอบใหม่

จะรู้ได้ยังไงว่า wp_mail() ถูกเรียกหรือเปล่า?

ติดตั้ง Plugin เช่น WP Mail Log แล้วดูใน Log จะเห็นว่า WordPress พยายามส่งเมลไปหรือไม่ ถ้าไม่มี Log เลยแสดงว่า WooCommerce ไม่ได้ Trigger เมล ต้องตรวจที่ตั้งค่า WooCommerce ก่อน

SMTP คืออะไร ต่างจาก PHP mail() อย่างไร?

SMTP คือการส่งอีเมลผ่าน Mail Server จริงที่ต้องล็อกอินยืนยันตัวตน เช่น Gmail SMTP, SendGrid หรือ SMTP ของ Hosting ต่างจาก PHP mail() ที่ส่งตรงจากเซิร์ฟเวอร์โดยไม่มีการยืนยันตัวตน เมลที่ส่งผ่าน SMTP จึงถูก Spam filter ปฏิเสธน้อยกว่า

เพิ่ม SPF และ DKIM ใน DNS แล้วต้องรอนานไหมถึงจะมีผล?

การเปลี่ยน DNS อาจใช้เวลา propagate ประมาณ 1–24 ชั่วโมง หลังจากนั้นให้ทดสอบส่ง Test Email อีกครั้งและเช็ก Spam folder ของผู้รับ

อ่านบทความหลักของหมวดนี้ WooCommerce Checkout ไม่ได้ เกิดจากอะไร

บทความอื่นในหมวดนี้

LINE ส่งปัญหา