ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home ตั้งค่า WordPress ให้ส่งอีเมลผ่าน SMTP

ตั้งค่า WordPress ให้ส่งอีเมลผ่าน SMTP

โดยค่าเริ่มต้น WordPress ส่งอีเมล เช่น อีเมลรีเซ็ตรหัสผ่าน อีเมลแจ้งเตือนคำสั่งซื้อของ WooCommerce หรืออีเมลจากฟอร์มติดต่อ ผ่านฟังก์ชัน mail() ของ PHP ซึ่งส่งโดยไม่มีการยืนยันตัวตน อีเมลจึงมักไม่ผ่านการตรวจ SPF และ DMARC ของผู้รับ ทำให้เข้า Spam หรือถูกปฏิเสธ และบางเซิร์ฟเวอร์ไม่ได้ติดตั้ง Mail Server ไว้เลย อีเมลจึงไม่ถูกส่งออกไปเลย

ทางแก้ที่แนะนำคือให้ WordPress ส่งอีเมลผ่าน SMTP ของบัญชีอีเมลจริงที่ยืนยันตัวตนด้วยชื่อผู้ใช้และรหัสผ่าน คู่มือนี้ใช้ปลั๊กอิน WP Mail SMTP เป็นตัวอย่าง และกล่าวถึง FluentSMTP ซึ่งเป็นทางเลือกฟรีอีกตัว

สิ่งที่ต้องเตรียม

  • สิทธิ์ Administrator ใน WordPress
  • บัญชีอีเมลที่จะใช้ส่ง เช่น [email protected] พร้อมรหัสผ่าน ควรสร้างบัญชีเฉพาะสำหรับเว็บไซต์ ดูวิธีสร้างที่ สร้างบัญชีอีเมลบน Plesk หรือ บน DirectAdmin
  • ชื่อเซิร์ฟเวอร์ SMTP ตามที่ผู้ให้บริการอีเมลแจ้ง ในคู่มือนี้ใช้ mail.example.com เป็นตัวอย่าง
  • SPF Record ของโดเมนที่ครอบคลุมเซิร์ฟเวอร์ SMTP ที่ใช้ ดู ตั้งค่า SPF, DKIM และ DMARC

ขั้นตอนที่ 1: ติดตั้งปลั๊กอิน

  1. ใน /wp-admin ไปที่ Plugins > Add New Plugin
  2. ค้นหา WP Mail SMTP (ผู้พัฒนาคือ WP Mail SMTP by WPForms)
  3. คลิก Install Now แล้วคลิก Activate

หลังเปิดใช้งาน ปลั๊กอินจะเปิด Setup Wizard ให้ สามารถใช้ Wizard หรือกดออกแล้วไปตั้งค่าที่เมนู WP Mail SMTP > Settings ก็ได้ ติดตั้งปลั๊กอินส่งอีเมลเพียงตัวเดียว เพราะหลายตัวพร้อมกันจะขัดแย้งกัน

ขั้นตอนที่ 2: ตั้งค่า Mailer เป็น Other SMTP

ในหน้า WP Mail SMTP > Settings แท็บ General กำหนดดังนี้

  • From Email: [email protected] ต้องเป็นอีเมลเดียวกับบัญชีที่ใช้ยืนยันตัวตน ติ๊ก Force From Email เพื่อให้ปลั๊กอินอื่นใช้อีเมลนี้เสมอ
  • From Name: ชื่อที่ผู้รับเห็น เช่น ชื่อบริษัท
  • Mailer: เลือก Other SMTP
  • SMTP Host: mail.example.com
  • Encryption: SSL คู่กับ SMTP Port 465 หรือ TLS คู่กับพอร์ต 587
  • Auto TLS: เปิดไว้
  • Authentication: เปิด
  • SMTP Username: ที่อยู่อีเมลเต็ม
  • SMTP Password: รหัสผ่านของบัญชีอีเมล

คลิก Save Settings

ขั้นตอนที่ 3 (แนะนำ): เก็บรหัสผ่านไว้ใน wp-config.php

ปลั๊กอินเก็บรหัสผ่านไว้ในฐานข้อมูล ถ้าต้องการไม่ให้รหัสผ่านอยู่ในฐานข้อมูล WP Mail SMTP รองรับการกำหนดค่าด้วยค่าคงที่ใน wp-config.php เพิ่มบรรทัดต่อไปนี้เหนือบรรทัด /* That's all, stop editing! */

define( 'WPMS_ON', true );
define( 'WPMS_MAILER', 'smtp' );
define( 'WPMS_SMTP_HOST', 'mail.example.com' );
define( 'WPMS_SMTP_PORT', 465 );
define( 'WPMS_SSL', 'ssl' );
define( 'WPMS_SMTP_AUTH', true );
define( 'WPMS_SMTP_USER', '[email protected]' );
define( 'WPMS_SMTP_PASS', 'รหัสผ่านอีเมล' );
define( 'WPMS_SMTP_AUTOTLS', true );

หากใช้พอร์ต 587 ให้เปลี่ยน WPMS_SMTP_PORT เป็น 587 และ WPMS_SSL เป็น 'tls' เมื่อใช้ค่าคงที่แล้ว ช่องในหน้า Settings จะถูกล็อกและแสดงว่าค่ามาจาก wp-config.php

ขั้นตอนที่ 4: ส่งอีเมลทดสอบ

  1. ไปที่ WP Mail SMTP > Tools แท็บ Email Test
  2. กรอกอีเมลภายนอกของคุณในช่อง Send To เช่น บัญชี Gmail
  3. คลิก Send Email

หากสำเร็จ จะมีข้อความว่าส่งอีเมลทดสอบแล้ว และอีเมลจะเข้า Inbox ของผู้รับ หากล้มเหลว ปลั๊กอินจะแสดง Debug log ซึ่งบอกสาเหตุ เช่น เชื่อมต่อไม่ได้ หรือยืนยันตัวตนไม่ผ่าน

กรณีใช้ Microsoft 365 หรือ Google Workspace

บริการทั้งสองกำลังเลิกใช้หรือจำกัดการส่งอีเมลผ่าน SMTP ด้วยรหัสผ่านอย่างเดียว (Basic authentication) จึงควรใช้ Mailer ที่เชื่อมต่อแบบ OAuth ของผู้ให้บริการนั้นแทน

  • ใน WP Mail SMTP เลือก Mailer Google / Gmail แล้วสร้าง OAuth Client ใน Google Cloud Console ตามคำแนะนำของปลั๊กอิน ส่วน Mailer Microsoft 365 / Outlook ในบางเวอร์ชันของปลั๊กอินอาจต้องใช้รุ่น Pro
  • ปลั๊กอิน FluentSMTP (ฟรี) มีตัวเลือกเชื่อมต่อ Gmail/Google Workspace และ Outlook/Microsoft 365 แบบ OAuth

ขั้นตอนการสร้าง OAuth App เปลี่ยนแปลงตามหน้าจอของผู้ให้บริการ ให้ทำตามเอกสารของปลั๊กอินเวอร์ชันที่ติดตั้ง

ตรวจสอบผลลัพธ์

  • เปิดอีเมลทดสอบใน Gmail คลิกจุดสามจุด แล้วเลือก Show original ตรวจว่า SPF และ DMARC แสดง PASS
  • ทดสอบการทำงานจริง เช่น ส่งฟอร์มติดต่อ หรือกดลืมรหัสผ่านที่หน้าเข้าสู่ระบบ
  • ถ้าต้องการเก็บประวัติการส่ง FluentSMTP มี Email Logging ในรุ่นฟรี ส่วน WP Mail SMTP มีในรุ่น Pro

ปัญหาที่พบบ่อย

Could not connect to SMTP host หรือ Connection timed out

เซิร์ฟเวอร์ของเว็บเชื่อมต่อไปยัง SMTP ไม่ได้ ทดสอบจากเซิร์ฟเวอร์เว็บด้วยคำสั่ง

nc -vz mail.example.com 465

หากไม่สำเร็จ ให้ตรวจ Firewall ขาออกของเซิร์ฟเวอร์ หากเซิร์ฟเวอร์มี Security Group หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้เปิดพอร์ตนั้นเพิ่มด้วย และหลีกเลี่ยงพอร์ต 25 ซึ่งมักถูกบล็อก บน AlmaLinux หรือ Rocky Linux ที่เปิด SELinux ต้องอนุญาตให้ Web Server เชื่อมต่อพอร์ต SMTP ด้วย

sudo setsebool -P httpd_can_sendmail on

SMTP Error: Could not authenticate

ชื่อผู้ใช้หรือรหัสผ่านผิด ตรวจว่า Username เป็นอีเมลเต็ม และลองเข้าสู่ระบบเว็บเมลด้วยรหัสผ่านเดียวกัน ถ้าบัญชีเปิด MFA อยู่ (Microsoft 365, Google) ให้ใช้วิธี OAuth ตามหัวข้อด้านบน

ส่งได้ แต่ผู้รับได้เข้า Spam

ตรวจว่า From Email ตรงกับบัญชีที่ยืนยันตัวตน และ SPF ของโดเมนครอบคลุมเซิร์ฟเวอร์ SMTP ที่ใช้ ตั้งค่า DKIM และ DMARC เพิ่มเติม ดูแนวทางตรวจสอบเพิ่มเติมที่ อีเมลส่งไม่ออกหรือไม่ได้รับ: วิธีตรวจสอบเบื้องต้น

certificate verify failed

SMTP Host ที่กรอกไม่ตรงกับชื่อในใบรับรอง SSL ของเซิร์ฟเวอร์อีเมล ให้ใช้ชื่อโฮสต์ที่ผู้ให้บริการอีเมลแจ้ง แทนการใช้ IP หรือชื่อโดเมนอื่น

หากตั้งค่าตามขั้นตอนแล้วยังส่งอีเมลไม่ได้ ติดต่อทีมซัพพอร์ต THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ พร้อมแนบข้อความ Debug จากหน้า Email Test (ลบรหัสผ่านออกก่อนส่ง)

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security