ปัญหา SMTP Error: Could not connect to SMTP host ตัวนี้ผมใช้เวลาหาวิธีแก้มัน 2 วัน appseve ที่ใช้คือเวอร์ชั่น appseve 2.5.10

วิธีแก้

1. ไปที่ Start > Run

2. พิมพ์ php.ini แล้วกด Enter เพื่อเปิดไฟล์คอนฟิก php ขึ้นมา

3. หา ;extension=php_openssl.dll แล้วเอาเครื่องหมาย ; ออกซะเหลือเป็น extension=php_openssl.dll เพื่อใช้งาน ssl
php-ini

4. บันทึกแล้วรีสตาร์ท Apache

เท่านี้แหละครับ

ที่มาที่ไปของปัญหา

ทีนี้ผมจะเล่าที่มาของปัญหาให้ฟังครับ เพื่อเป็นบันทึกความทรงจำของผมเองด้วย

ปกติผมจะใช้ appserv 2.5.8 ทั้งที่ทำงานและที่่บ้าน เมื่อวันเสาร์ 22 พ.ค 2553 ซึ่งถ้านับจากวันที่เขียนบทความนี้ (23 พ.ค 2553 23:25) ก็ตก 2 วันพอดี เพื่อนผม มิสเตอร์สิงห์ให้ช่วยดูโค้ด php ให้หน่อย นัดเจอกันที่ร้านกาแฟแถวๆงามวงวาน เวลาสักประมาณ บ่าย 2 ไปถึงที่นัดเจอสั่งกาแฟเอสเปรสโซ่เย็นมากินกันเป็นที่เรียบร้อยก็เริ่มเข้าเรื่อง

ปัญหาคือที่บริษัทของเขาจ้างคนเขียนโปรแกรม php ขึ้นมาตัวหนึ่ง เขาก็เขียนให้เสร็จ ติดตั้งไว้ในโน๊ตบุ๊ก ทำงานเป็นที่เรียบร้อย การทำงานของโปรแกรมคือเลือกภาพภายในโปรแกรม ป้อนรายละเอียดการสั่งซื้อภาพ กดปุ่มส่งปุ๊บ มันจะส่งเมล์ไปยังอีเมล์ที่ป้อนไว้ การทำงานมันเป็นอย่างนี้ ทีนี้เมื่อมิสเตอร์สิงห์เอาโปรแกรมตัวนี้ไปติดตั้งที่เครื่องอื่น กดปุ่มให้มันส่งอีเมล์แล้วมันไม่ส่ง นี่แหละปัญหา ที่เรานัดเจอกันวันนี้

ผมลองเอาโปรแกรมตัวนี้มาลงในโน๊ตบุ๊กของผมซึ่งติดตัวไปด้วย อา… มันไม่ส่งจริงๆด้วย พอไปลองที่เครื่องที่มิสเตอร์สิงห์หิ้วมา มันส่งได้ เอาแล้วไง .

แว้บแรกผมคิดเลย เพราะเครื่องผมไม่ได้ติดตั้ง mailserver ไว้ ก็จัดการติดตั้ง hmailserver มันก็ส่งไม่ได้อีก เลยไปนั่งสำรวจที่เครื่องมิสเตอร์สิงห์ว่าเขาติดตั้ง mailserver ตัวไหน หาไม่เจอครับ ไม่ปรากฎว่าเขาติดตั้ง mailserver

แว้บต่อมา เอ… หรือว่าเป็นเพราะ appserv ผมก็ดู เขาลง appserv 2.5.10 ไว้ ตัดสินใจเอา appserv 2.5.8 ประจำกายออกแล้วติดตั้ง appserv 2.5.10 ลองส่งเมล์ก็ไม่ได้อีก เริ่มปวดหัวละ เอสเปรสโซ่ เอาไม่อยู่แล้ว คิดไรไม่ออก ก็เลยเอาคอนฟิก apache ของเขามาดูเทียบกับในเครื่องผมว่ามันต่างกันตรงไหน ปรากฎว่า เหมือนกันเด๊ะๆ จวนค่ำ วันนี้เขาประกาศเคอฟิวส์เสียด้วยต้องรีบกลับบ้าน

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

เขียน php ส่งเมล์ด้วย PHPMailer ด้วย Gmail Account
การ ส่งเมล์ผ่านบริการของ gmail ด้วย phpmailer – Goragod.com

เขาบอกว่ามันจะต้องเปิด ssl แล้วมันเปิดยังไงละหว่า (เคยแต่เปิดซิง) ดึกมากมายแล้ว ง่วงนอน ไม่ไหวนอนก่อน

ตื่นเช้ามาหาในกูเกิลต่อ ด้วยคีย์เวิร์ด appserv ssl ลองทำตามบทความ จาก http สู่ https ด้วย SSL secure « บทความ Comsci9 ทำผ่านทุกอย่าง ก็ยังส่งเมล์ไม่ได้อีก แล้วก็หาๆๆๆๆๆๆ ไปกินข้าวเช้า กลับมาหา ไปกินข้าวเย็น กลับมาหาต่อ อะไรที่มันพอเข้าเค้าอ่านแหลก ทั้งไทยทั้งเทศ ก็ยังไม่ได้ จนล่วงเลยมาดึกดื่น แล้วผมก็ไปเจอบทความนี้เข้า Unable to find socket transport ssl while using PHPMailer
ปัญหามันคนละอย่าง แต่ทำให้ผมสังเกตุเห็นว่า ในไฟล์ php.ini มันมีที่ให้เซ็ต ssl ด้วย โอ้ว… ผมนึกว่ามันจะต้องเซ็ตในไฟล์คอนฟิกของ apache อย่างเดียวเสียอีก แล้วผมก็จัดการตามที่แนะนำท่านไว้ด้านบนนั้นแหละ

ส่งอีเมล์ผ่านแล้วครับ ใช้ phpmailer ส่งผ่านแอคเค้าของกูเกิลได้แล้วครับ

เมื่อได้แล้วยังไม่จบ ต้องทดสอบต่อ ผมลองถอด appserv ออก แล้วลงใหม่ ลองทดสอบปรับค่าต่างๆ เท่าที่อ่านมาสองวัน จนได้ข้อสรุปที่แน่นอนว่า แค่ไปเอา ; ออกในไฟล์ php.ini เท่านั้นแหละ อย่างอื่นไม่ต้องทำเลย

ผมโง่อยู่สองวัน กะอีแค่เครื่องหมายเซมิคอล่อนตัวเดียว

สรุป

ถ้าท่านจะเขียนโค้ดส่งเมล์ด้วย phpmailer โดยใช้แอคเค้าของ gmail และใช้ appserv 2.5.10 (ที่ผมระบุเวอร์ชั่นไว้ชัดเจน เพราะเวอร์ชั่นอื่นมันจะต้องแก้อย่างนี้หรือเปล่า ไม่รู้ ไม่ได้ทดสอบ ท่านใดมีเวลา ช่วยทดสอบหน่อยละกัน แล้วแจ้งไว้ในคอมเม้นท์) ท่านแค่ไปเอาเครื่องหมาย ; ออกในไฟล์ php.ini ตามวิธีที่ผมเขียนไว้ด้านบนสุด เท่านั้นแหละครับ อย่างอื่นไม่ต้องทำอะไรเลย

สุดท้าย

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

ช่วยกันเขียนเถอะครับ คนข้างหลังจะได้เดินเร็วขึ้นอีกหน่อย