วันเสาร์ที่ 1 ตุลาคม พ.ศ. 2559

ติดตั้ง SMTP Service สำหรับส่งอีเมล์บน Windows 7 (PHP,ASP.Net,IIS,Apache)

ติดตั้ง SMTP Service สำหรับส่งอีเมล์บน Windows 7 (PHP,ASP.Net,IIS,Apache) ในการเขียนโปรแกรมไม่ว่าจะรันด้วย Apache หรือ IIS ทั้งประเภทเว็บที่เขียนด้วย PHP , ASP หรือ ASP.net บน Windows 7 เราจะพบว่าไม่สามารถที่จะทดสอบการส่งอีเมล์ออกได้ อันเนื่องจาก ใน Windows7 Version ใหม่ จะมีการตัด Feature ตัว SMTP Service ออก จะไม่มีเหมือน Windows Server 2008 หรือ 2012 (ไม่รู้จะเอาออกไปทำไม เข้าใจว่าน่าจะลดปัญหา Spam อีเมล์ออกจากเครื่อง) ซึ่งบน IIS (Internet Information Services) จะมีแแค่เพียง SMTP E-Mail เป็นตัวระบุและชี้ Path IP ไปยัง SMTP Server ที่จะใช้เท่านั้น ฉะนั้นการที่จะส่งอีเมล์ออกจาก Windows 7 จะต้องหาดาวน์โหลดตัว SMTP Server มาติดตั้งบน Windows 7 ซะก่อน ซึ่งสาารถใช้ได้อยู่หลายตัว แต่ที่จะแนะนำให้ใช้คือ hMailServer เป็น Free SMTP Server และสามารถนำมาใช้กับ Windows 7 ได้ทั้งเว็บที่รันด้วย IIS และ Apache Web Server


SMTP E-Mail Windows 7

SMTP E-Mail Windows 7


บทความนี้อันเนื่องจากเห็นสมาชิกโพสในกระทู้บ่อย ๆ และก็ว่างพอดี เลยจัดให้ซะหน่อย มาลองดู Code ของ PHP ที่ใช้ส่งอีเมล์แบบง่าย ๆ

sendmail.php
01.<html>
02.<head>
03.<title>ThaiCreate.Com PHP Sending Email</title>
04.</head>
05.<body>
06.<?php
07.$strTo = "member@thaicreate.com";
08.$strSubject = "Test Send Email";
09.$strHeader = "From: webmaster@thaicreate.com";
10.$strMessage = "My Body & My Description";
11.$flgSend = mail($strTo,$strSubject,$strMessage,$strHeader);
12.if($flgSend)
13.{
14.echo "Email sending.";
15.}
16.else
17.{
18.echo "Cannot send Mail!";
19.}
20.?>
21.</body>
22.</html>

หลังจากที่ทดสอบรันดูด้วย Apache หรือ IIS จะมี Error ว่า

Error
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in D:\Appserv\www\sendmail.php on line 11
Cannot send Mail!

จาก Error นี้เข้าใจความหมายง่าย ๆ ว่า หาตัว SMTP ที่อยู่บน localhost ไม่เจอ ซึ่งปกติแล้วบน php.ini เราไม่จำเป็นจะต้องทำการ Config อะไรเพิ่มเติม เพราะค่า Default ของมันจะชี้ไปที่ localhost และ Port 25 อยู่แล้ว

กรณีที่รันด้วย IIS (ถ้ารันด้วย Apache เช่นพวก Appserv หรือ XAMPP ก็ข้ามขั้นตอนนี้ไปได้เลย)

ในกรณีที่รันด้วย IIS เราสามารถเปิด SMTP E-mail ที่อยู่บน IIS

SMTP E-Mail Windows 7

ซึ่งตัวนี้ไม่ใช่ SMTP Server แต่เป็นเพียงตัวชี้ไปยัง SMTP Server เท่านั้น

SMTP E-Mail Windows 7

ในกรณีที่มี SMTP Server อยู่แล้ว เราก็สามารถที่จะชี้ไปยัง IP ของ SMTP นั้น ๆ และเรียกใช้งานได้เลย

SMTP E-Mail Windows 7

หรือในกรณีที่ต้องการติดตั้ง SMTP บน local ก็จะต้องเลือกเป็นแบบ localhost และดาวน์โหลดตัว SMTP Server มา ติดตั้งซะก่อน (อย่าลืมวิธีนี้กรณีรัน PHP บน IIS เท่านั้น ถ้ารันด้วย Apache เช่นพวก Appserv หรือ XAMPP ก็ข้ามขั้นตอนนี้ไปได้เลย)


การติดตั้ง SMTP Server บน Windows 7 ใช้ส่งอีเมล์ทั้งบน IIS และ Apache (Appserv,XAMPP)

Download โปรแกรม hmailserver ซึ่งเป็น Freeware สามารถใช้งานได้ฟรี
https://www.hmailserver.com

วิธีติดตั้ง hMailServer 5.3.3 installation step by step by PlaKriM


SMTP E-Mail Windows 7

ติดตั้ง hMailServer

SMTP E-Mail Windows 7

เลือก Path ที่จัดเก็บไฟล์ ซึ่ง Path นี้จะไว้ดูพวก Queue หรืออีเมล์ที่ถูกส่งออกด้วย

SMTP E-Mail Windows 7

เลือกตั้ง 2 ตัว โดยในขั้นตอนการติดตั้ง อาจจะมีให้กำหนด Password ในการ Access เข้าจัดการกับ hMailServer

SMTP E-Mail Windows 7

เลือก Run hMailServer Administator

SMTP E-Mail Windows 7

เลือก Connect

SMTP E-Mail Windows 7

ขั้นตอนนี้ให้ใส่ Password ที่ได้จากขั้นตอนการติดตั้ง

SMTP E-Mail Windows 7

เลือก Add Domain

SMTP E-Mail Windows 7

ในนี้จะใส่เป็น thaicreate.com

SMTP E-Mail Windows 7

ได้โดเมนเรียบเร้อย จากนั้นให้คลิกที่ Accounts

SMTP E-Mail Windows 7

ทดสอบสร้าง Account ชื่อว่า webmaster@thaicreate.com พร้อมกับ Password (ซึ่ง Password เราจะใช้ในกรณีที่ Authen ผ่าน SMTP)

SMTP E-Mail Windows 7

ได้ Account ของ webmaster@thaicreate.com เรียบร้อยแล้ว จากนั้นใน Code ของ PHP เพิ่มคำสั่ง

1.ini_set("SMTP","localhost");
2.ini_set("sendmail_from","webmaster@thaicreate.com");

ไม่จำเป็นจะต้องใส่ Password เพราะเราไม่ได้ส่งผ่านการ Authen แบบ SMTP

Code ทั้งหมด
01.<html>
02.<head>
03.<title>ThaiCreate.Com PHP Sending Email</title>
04.</head>
05.<body>
06.<?php
07.ini_set("SMTP","localhost");
08.ini_set("sendmail_from","webmaster@thaicreate.com");
09. 
10.$strTo = "to-thaicreate@hotmail.com";
11.$strSubject = "Test Send Email";
12.$strHeader = "From: webmaster@thaicreate.com";
13.$strMessage = "My Body & My Description";
14.$flgSend = mail($strTo,$strSubject,$strMessage,$strHeader);
15.if($flgSend)
16.{
17.echo "Email Sending.";
18.}
19.else
20.{
21.echo "Cannot send Mail!";
22.}
23.?>
24.</body>
25.</html>

SMTP E-Mail Windows 7

ทดสอบรันใหม่ เราจะได้ผลลัพธ์ดังรูป

SMTP E-Mail Windows 7

การทดสอบว่าอีเเมล์ได้ถูกส่งออกไปหรือไม่ให้คลิกที่ Status -> Delivery queue -> Refresh ซึ่งเราจะพบกับอีเมล์ที่เตรียมถูกส่งออกไป

SMTP E-Mail Windows 7

รายละเอียดของอีเมล์

เพิ่มเติม
ในการส่งอีเมล์ด้วย PHP บน Windows 7 นั้น ถ้าอีเมล์ถูกส่งออกไปยัง Queue นั่นก็หมายความว่า PHP สามารถส่งอีเมล์ออกไปได้แล้ว แต่อีเมล์จะไปถึงปลายทางหรือไม่นั้น อันนี้อยู่ที่ระบบ Network ล้วน ๆ เช่นถ้าคุณต่ออินเตอร์เน็ตผ่านพวก ADSL ของ ISP หรืออินเตอร์เน็ต ทั่ว ๆ ไป หรือแม้กระทั่ง Network ในบริษัท หน่วยงานต่าง ๆ เข้าใจว่าผู้ให้บริการเหล่านี้จะ Block อีเมล์ที่ส่งมาจากเครื่องของคุณอย่างแน่นอน เพื่อเป็นการป้องกัน Spam ออกจากเครื่อง ฉะนั้นจะเห็นว่าอีเมล์จะไม่ถูกส่งออกไปจาก Queue แต่ถ้า IP อยู่ในระบบ Network อย่างเช่น IP ที่เช่าจาก Data Center โดยตรง อันนี้อีเมล์จะถูกส่งออกไปยังแน่นอน ส่วนจะถึงปลายทางหรือโดนตีกลับหรือไม่ ขึ้ออยู่กับปัจจัยอีกหลายตัว เช่น IP นี้มีความน่าเชื่อถือ หรือ ติด Black List หรือไม่

เพิ่มเติมสำหรับการ Config บน IIS

SMTP E-Mail Windows 7

ในส่วนของ SMTP E-Mail บน IIS ให้ Config ดังรูป โดยในส่วนของ Host ใส่เป็น 127.0.0.1 หรือ localhost (ถ้าไม่ได้ให้สลับกัน)

เพิ่มเติมหรับการ Authen แบบ SMTP
Go to : แจกฟรี Script ส่งอีเมล์แบบ SMTP / POP ของ PHP ที่สามารถใช้งานได้จริง ๆ

<?php require_once('class.phpmailer.php'); $mail = new PHPMailer(); $mail->IsHTML(true); $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->SMTPSecure = ""; $mail->Host = "127.0.0.1"; $mail->Port = 25; $mail->Username = "webmaster@thaicreate.com"; $mail->Password = "password"; $mail->From = "webmaster@thaicreate.com"; // "name@yourdomain.com"; //$mail->AddReplyTo = "support@thaicreate.com"; // Reply $mail->FromName = "Mr.Weerachai Nukitram"; // set from Name $mail->Subject = "Test sending mail."; $mail->Body = "My Body & <b>My Description</b>"; $mail->AddAddress("to-thaicreate@hotmail.com", "Mr.Adisorn Boonsong"); // to Address $mail->Send(); ?>

เพิ่มเติมอีกนิด

SMTP E-Mail Windows 7

ในกรณีที่ Authen ด้วย SMTP ผ่าน User/Password ในกรณีที่ Login ผิดเกิน 3 ครั้ง Account นั้น ๆ อาจจะถูก Auto Ban ได้

SMTP E-Mail Windows 7

ไปที่ Advanced -> IP Ranges จะพบกับรายการที่ถูก Ban เราสามารถยกเลิกด้วยการ Remove

SMTP E-Mail Windows 7

ในส่วน Auto-ban จะเป็นการกำหนดเงื่อนไข

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Set MongoDB in the windows path environment

  Let’s set MongoDB in the windows environment in just a few steps. Step 1: First download a suitable MongoDB version according to your mach...