ปัญหา 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
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 ตามวิธีที่ผมเขียนไว้ด้านบนสุด เท่านั้นแหละครับ อย่างอื่นไม่ต้องทำอะไรเลย
สุดท้าย
ผมอยากให้คนไทยเขียนบล้อกกันเยอะๆครับ ปัญหาแทบทุกปัญหา หาในภาษาไทยยากมาก เพราะเราไม่ค่อยช่วยกันเขียน บล้อกฟรีก็มีให้บริการ ถ้าเราไม่ช่วยกันเขียน คนข้างหลังก็จะเจอปัญหาเหมือนที่เราเคยเจอ ผมเชื่อว่าถ้าคนไทยเขียนมากกว่านี้ มันจะส่งผลรวมไปถึงวงการโปรแกรมมิ่งของไทยเลยทีเดียว เสียสละเวลากันคนละนิดเขียนวิธีแก้ปัญหาที่เราเจอ แม้มันจะเป็นเรื่องเล็กก็ต้องเขียนไว้ สำหรับคนที่กำลังเจอปัญหา อะไรๆมันก็มืดไปหมด บางครั้งหมดหนทางจริงๆ ก็ต้องมั่วเอา มันยิ่งออกทะเลไปไกล
ช่วยกันเขียนเถอะครับ คนข้างหลังจะได้เดินเร็วขึ้นอีกหน่อย
kongtoonarmy says:
23/09/2553 at 23/09/2553
ขอบคุณครับ
ปัญหาที่ผมเจอคือ SMTP Error: Could not connect to SMTP host
เหมือนกัน เพราะ่ส่งผ่าน SMTP ของ HOST เลย (เพราะส่งผ่าน google มันได้อยู่แล้ว ) ไม่ทราบว่าต้องแก้ยังไงบ้างครับ
เด็กมฟล. says:
08/02/2554 at 08/02/2554
พอจะมีวิธีแก้ วดป ใน appserve มั้ยคับ
mod says:
10/03/2554 at 10/03/2554
ลองเอาออกแล้วอะค่ะ ยังไม่ได้เหมือนเดิม แนะนำหน่อยค่ะ :(
ต้น says:
10/03/2554 at 10/03/2554
ลองเอาออกแล้วก็ไม่ได้เหมือนกันอะ ใช้เวอร์ 2.5.10
administrator says:
10/03/2554 at 10/03/2554
จริงๆแล้วบทความนี้ ผมเขียนขึ้นมาเพื่อต้องการตอบปัญหาบทความ เขียนโค้ดส่ง SMS เข้ามือถือแบบฟรีๆ
สำหรับท่านที่ถามปัญหาไว้ด้านบนนั้น ผมเดาเอาเองว่าท่านไม่ได้ติดตั้ง mailserver มันจึงเกิดปัญหานั้นขึ้นมา
วิธีการติดตั้งและใช้งานเมล์เซิฟเวอร์ ให้ท่านค้นหาในเว็บผมนี้แหละครับด้วยคำว่า hmail server ผมเขียนวิธีติดตั้งและใช้งานไว้แล้วอย่างละเอียด
ถ้าท่านไม่ได้ติดตั้ง mailserver ไว้ ต่อให้ท่านเปิด ssl ตามบทความด้านบน ท่านก็ยังส่งเมล์ไม่ได้และเกิดเออเร่ออยู่ดีครับ
bill says:
16/03/2554 at 16/03/2554
Appserv 2.5.10 อยากให้ joomla ส่งเมล์ไป gmail ต้องทำไงบ้างลองหลายอย่างวิธีแล้วยังส่งไม่ได้ fake sendmail << ก็ยังไม่ได้
Bill says:
04/05/2554 at 04/05/2554
เจอแล้ว ผมไผตั้งค่า Gmail ผิดเลยทำให้ลองวิธีไหนก็ใช้ไม่ได้หมด
nut says:
04/05/2554 at 04/05/2554
ผมติดที่ smtp
jax says:
15/11/2556 at 15/11/2556
php.ini ผมก็แก้แล้ว แต่ก็ยังติดปัญหา SMTP Error: Could not connect to SMTP host. อยู่ครับ ไม่รู้จะทำยังไงดี ใครพอมีวิธี รบกวนหน่อยนะครับ
require ‘../class.phpmailer.php’;
try {
$mail = new PHPMailer(true); //New instance, with exceptions enabled
$body = file_get_contents(‘contents.html’);
$body = preg_replace(‘/\\\\/’,”, $body); //Strip backslashes
$mail->IsSMTP(); // tell the class to use SMTP
$mail->SMTPAuth = true; // enable SMTP authentication
//$mail->Port = 25; // set the SMTP server port
//$mail->Port = 465;
//$mail->Host = “ssl://smtp.gmail.com:465”; // SMTP server
$mail->Username = “[email protected]”; // SMTP server username
$mail->Password = “mypass”; // SMTP server password
//$mail->IsSendmail(); // tell the class to use Sendmail
$mail->Mailer=”smtp”;
//$mail->SMTPSecure = “tls”;
$mail->SMTPSecure = “ssl”;
$mail->Host = “smtp.gmail.com”;
$mail->Port = 465;
$mail->AddReplyTo(“[email protected]”,”First Last”);
$mail->From = “[email protected]”;
$mail->FromName = “Wiwat”;
$to = “[email protected]”;
$mail->AddAddress($to);
$mail->Subject = “First PHPMailer Message”;
$mail->AltBody = “To view the message, please use an HTML compatible email viewer!”; // optional, comment out and test
$mail->WordWrap = 80; // set word wrap
$mail->MsgHTML($body);
$mail->IsHTML(true); // send as HTML
$mail->Send();
echo ‘Message has been sent.’;
} catch (phpmailerException $e) {
echo $e->errorMessage();
}
amy k says:
17/03/2557 at 17/03/2557
ขอบคุณมากๆนะคะ ตอนนี้ได้แล้วค่ะ ^^
นาย เจ says:
30/04/2557 at 30/04/2557
ครับ พี่ ผมเจนะครับคนที่โทรหาพี่ ปรึกษาการส่ง e-mail นะครับ ขอบคุณมากที่ให้คำปรึกษา ครับ
วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย says:
01/05/2557 at 01/05/2557
ไม่เป็นไรครับผม ยินดีครับ