ส่งอีเมลไม่ไปจะทำอย่างไร

สอบสัมภาษณ์เข้ารับราชการ
สอบสัมภาษณ์เข้ารับราชการ
23 มีนาคม 2559 อ.อนุชิต ชวนผมจัดการความรู้ส่วนบุคคล (PKM)
มี K มากมายที่ท่านฝากไว้ ก็จะค่อย ๆ ถอดบทเรียนมาแบ่งปันทีละเรื่อง
โดยท่าน share ให้ฟัง ที่ถือเป็นการถอดบทเรียน ที่เล่าให้นักศึกษาฟังได้
ประสบการณ์ที่ท่านไปรับการสัมภาษณ์เข้ารับราชการที่กรมฯ
เล่าว่ามีคำถามมากมายเกี่ยวกับทัศนคติของคนทำงาน
เช่น ถ้าเจ้านายให้ทำผิด เราจะทำผิดตามที่ถูกสั่งไหม
แต่มีคำถามสำคัญเกี่ยวกับไอทีเพียงคำถามเดียว
คือ “ถ้าทำเครื่องบริการอีเมล แล้วส่งอีเมลไม่ออกจะทำอย่างไร
ผมก็คิดว่าจะทำ check list ให้นักศึกษาได้เรียนรู้
เผื่อว่านักศึกษาต้องไปเข้ารับการสัมภาษณ์ในอนาคต
1. ตรวจยืนยันว่าปัญหานั้นเกิดขึ้นจริง ให้เห็นกับตา
2. ตรวจ email client program ติดต่อกับ email server ได้ปกติ
3. ตรวจ junk mail ใน receiver ของผู้รับว่ามีหรือไม่
4. ตรวจ port 25 + 110 หรือ service start ไว้หรือไม่
5. ตรวจ ip, dns, firewall, network, switch ว่าทำงานกันปกติ
6. ตรวจ mail log ว่ามี error ว่าอย่างไร (มีหลายแบบ)
7. ตรวจ relay sever ที่ใช้งานอยู่ ทำงานปกติ
8. ตรวจ black list ว่าติดร่างแหไปหรือไม่
9. ตรวจ script และ data เพราะ php อาจมีปัญหากับ unicode
10. ตรวจองค์ประกอบอื่น ๆ ที่เกี่ยวข้องทั้งเครือข่าย และระบบปฏิบัติการ
ตรวจพบอะไรก็แก้ไข และทดสอบใหม่จนกว่าจะส่งอีเมลได้สำเร็จ
สอดคล้องกับเพื่อนที่โรงพยาบาล สอบถามเรื่องการออกข้อสอบ
ผมก็แนะนำไปว่าไม่ต้องถามเยอะ ไม่ต้องถามลึก ๆ
หาคำถามที่ใช่สัก 2 – 3 ข้อก็รู้แล้ว
เช่น “เล่าขั้นตอนการวางเครื่องข่ายที่เคยทำมาให้ฟังหน่อย”
แต่เรื่องเครือข่ายนี่เป็นคำถามกว้างไป ตอบได้กว้าง ๆ ตามทฤษฎีได้เลย
ถ้าถามลึกเลยก็ต้องแบบที่ถาม อ.อนุชิต เรื่องส่งอีเมลไม่ออกนี่หละ
เลี้ยงส่งท่านไปรับราชการที่กรมฯ

ทดสอบการทำงานของเครื่องบริการ กับเครื่องลูก

การเชื่อมต่อเข้ามาพร้อมกัน 10 connection
การเชื่อมต่อเข้ามาพร้อมกัน 10 connection

ที่มา ที่ไป
เตรียมสอนนักศึกษาเรื่องศักยภาพของเครื่องบริการ
ไม่ได้อยู่ที่ RAM อย่างเดียว ยังมีรายละเอียดอีกมาก
แม้เครื่องจะอยู่ใน Cloud ก็ยังสุ่มเสี่ยงต่อการเดี้ยงกลางอากาศได้เช่นกัน
เพราะเวลาเช่าเครื่องบริการใน Cloud ก็ต้องกำหนดว่าจะจ่ายให้กับอะไรอยู่ดี

การเชื่อมต่อเข้ามา 1 connection ก็ยังรับไหว
การเชื่อมต่อเข้ามา 1 connection ก็ยังรับไหว

การทดสอบเครื่องที่ทำงาน
ทดลองใช้เครื่องหนึ่งร้องขอบริการจากอีกเครื่องหนึ่ง
ในที่นี้ desktop2 คือ เครื่องบริการเว็บและอีเมล
ส่วนเครื่อง notebook คือ เครื่องลูกที่ส่ง request ไปยังเครื่องบริการ
ด้วยการเปิดเว็บเพจเดียวกันพร้อม ๆ กัน 10 iframe ใน 1 หน้าต่าง
แต่ละ iframe เรียกไปยัง url แบบส่งค่า get ที่แตกต่าง
และ url คือ php ที่เรียกใช้ smtp ก็จะ load เครื่องบริการเกือบ 50 Kbps
โปรแกรมที่ monitor ใช้ tcpview for windows ซึ่ง download ได้ฟรี
จาก https://technet.microsoft.com/en-us/library/bb897437.aspx
และใช้ task manager ดู performance ของ ethernet ว่าขึ้นลงอย่างไร
เมื่อเครื่อง notebook ส่งคำขอใช้บริการไปยัง desktop2
เครื่องบริการทดสอบเปิดบริการด้วย xampp เฉพาะส่วนของ apache
ถ้าเปิด mercury ก็คงจะทำให้เกิดภาระกับเครื่อง desktop2 ขึ้นอีกเยอะ

ในขณะที่เครื่องลูกยังไม่ได้เชื่อมต่อเข้ามาผ่าน port 80
ในขณะที่เครื่องลูกยังไม่ได้เชื่อมต่อเข้ามาผ่าน port 80

สรุปผลการทดสอบเครื่องที่ทำงาน
เครื่อง desktop2 เป็นเพียงเครื่อง PC ที่มีทรัพยากรต่ำ
และ Bandwidth ต่ำ รองรับการ download ได้ไม่มาก
และไม่ได้ออกแบบให้ทำงานกับ Cache server : Static file แต่อย่างใด
ถ้ามี request เข้ามาสัก 20 – 30 คน พร้อม ๆ กัน
เครื่องนี้ก็คงจะรองรับการเชื่อมต่อไม่ไหวเป็นแน่ เพราะคอขวดเยอะครับ

ตรวจสอบเครื่องบริการ SMTP

postfix for SMTP service
postfix for SMTP service

26 ก.ย.56 เล่าสู่กันฟัง
หนึ่งในกิจกรรมของการทำงานกับเครื่องบริการ คือ Monitor
1. เข้าตรวจสอบ ติดตามเครื่องบริการเกี่ยวกับ SMTP
ว่าบริการถูกเรียกใช้ตามปกติหรือไม่
#netstat -na |grep 25 ก็พบว่า port นี้เปิดบริการอยู่
#netstat -na |grep LISTEN ก็พบว่าเปิดบริการอยู่
#cat /etc/redhat-release ดูรุ่นที่ใช้อยู่ พบว่าเก่าอยู่สักหน่อย ปัจจุบันสิบกว่าแล้ว
Fedora Core release 4 (Stentz)
#ps -aux|grep postfix พบว่า postfix เปิดบริการ smtp อยู่
#/etc/init.d/postfix status พบว่า running
#/etc/init.d/postfix stop เมื่อต้องการปิดบริการ

2. เหตุที่สนใจเรื่องนี้
เพราะเป็นการเฝ้าตรวจการทำงานของเครื่องบริการตามปกติ
#ls /var/log/maillog* -al ดูปริมาณของแต่ละแฟ้ม
#tail /var/log/maillog –lines=300 ดูรายการ 300 บรรทัดล่างสุด
#cat /etc/postfix/main.cf |grep relayhost กำหนดไว้แล้ว
สรุปว่ามีการกำหนด relay ใน main.cf ซึ่งสัมพันธ์กับ maillog ที่บันทึกไว้

config smtp server on win2003

smtp server
smtp server

การตั้งค่าของ smtp server บน windows server 2003

ปรับระบบ smtp server ซึ่งเป็น SMTP Virtual Server ใน IIS บน Windows 2003
1. เปิดบริการ
2. ปรับ Properties, Delivery
– First,Second,Third retry interval เป็น 1, 2 และ 3
3. เปิด firewall ของเครื่อง ยอมรับ port 25
4. เปิด firewall ขององค์กร ยอมรับ port 25
5. telnet localhost 25 ตรวจสอบว่าส่งออกหรือไม่
HELO localhost.localdomain
MAIL FROM: from_who@domain.com
RCPT TO: to_who@domain.com
DATA
— Enter message, end with “.” on a line by itself
Subject: subject goes here
— Message goes here and ends with a dot
QUIT
6. ถ้าผลการส่งบอกว่าปกติ
ให้ไปตรวจใน C:\Inetpub\mailroot\Queue ว่ามีเมลค้างหรือไม่
7. ไปตรวจใน mail box ว่าได้รับใน inbox หรือ spam box หรือไม่

set outlook e-mail

18 พ.ย.53 มีน้องชายถามว่า outlook จะ set mail อย่างไร ก็ต้องตีความตามความเข้าใจของผมว่า เขาคงสนใจใช้ outlook 2003 และต้องการเชื่อมต่อกับ mail server ที่บริการ pop3 กับ smtp ในองค์กร ซึ่งองค์กรอาจมีบริการเชื่อมต่อแบบอื่นอยู่แล้ว แต่บริการนี้เป็นการเสริมสำหรับ advance user ที่ต้องการใช้ เพื่อให้การ download mail หรือจัดการ mail นั้นทำได้ง่าย ซึ่ง outlook ย่อมทำงานได้สมบูรณ์กว่า Outlook express ขั้นตอนหลังเปิด outlook ก็เลือก tools, E-mail Accounts, เลือกประเภทของบริการ, กำหนดไอพีของ pop3 และ smtp .. ก่อนเชื่อมต่อหาตัวเลือกว่าจะลบออกจาก server หรือแค่ download เพราะถ้าลบจาก server ก็มีความหมายตรงตัวเลยครับ คือ mail ทั้งหมดจะมาอยู่ในเครื่องของเราเพียงเครื่องเดียว ไม่สำเนาไว้ที่ server

outlook
outlook

ส่งเมลด้วยฟังก์ชัน mail ของภาษา php

28 ธ.ค.52 เหตุเกิด เพราะมีนักพัฒนาท่านหนึ่งต้องการใช้บริการส่งอีเมลด้วย php ผ่านฟังก์ชัน mail กับเครื่องบริการเว็บเครื่องหนึ่ง แล้วส่งไม่ออก เนื่องจากผู้ดูแลไม่เปิดบริการ smtp ทิ้งไว้ เรามีเครื่องบริการส่งเมลอยู่หลายเครื่องที่ติดตั้งไว้ เมื่อเปิดบริการส่งเมลในเครื่องที่ต้องการใช้ขึ้นใหม่แล้ว กลับพบว่าส่งอีเมลไม่ได้ ทำให้ต้องหาสาเหตุและแก้ปัญหา แล้วผลการดำเนินการก็เกิดบทเรียนให้เรียนรู้ ซึ่งเครื่องบริการเว็บที่ทดสอบในครั้งนี้มี 4 เครื่อง เครื่องส่งอีเมลเดิมมี 3 เครื่อง แต่ละเครื่องแตกต่างกันในวิธีแก้ปัญหา ซึ่งดำเนินการร่วมกับคุณอนุชิต ยอดใจยา และคุณธรณินทร์ สุรินทร์ปันยศ
     เครื่องบริการเว็บที่ 1 ของคุณอนุชิต ยอดใจยา ทดสอบแล้วไม่พบปัญหา คือ ทำงานร่วมกับ smtp server ที่มหาวิทยาลัยใช้งานทั้ง 3 เครื่องได้ปกติ ได้แก่เครื่อง it, linux หรือ cat โดยเครื่องนี้ใช้ php 5.2.6 แก้ไข smtp ผ่าน ini_set ได้ทันที แต่เครื่องนี้มิใช่เป้าหมายที่นักพัฒนาท่านนั้นต้องการ เครื่องบริการเว็บที่ 2 เป็นเครื่องเป้าหมาย ที่ต้องการทำให้ส่งอีเมลให้ได้ เครื่องใช้ php 4.3.4 พบว่าวิธีแก้ปัญหาคือ กำหนด SMTP และ sendmail_from ใน php.ini ได้พยายามใช้ ini_set และ mail() ที่กำหนด from แล้ว แต่ก็แสดง error message ว่า connection ไม่สำเร็จ สรุปว่าแก้ไข php.ini แล้วก็ส่งออก ไม่ว่ากับเครื่องบริการส่งเครื่องใด เครื่องบริการเว็บเครื่องนี้ก็ส่งได้จากเดิมที่ส่งไม่ได้เลย
     เครื่องบริการเว็บที่ 3 แก้ไขเหมือนเครื่องที่ 2 หรือ 1 ก็ยังส่งอีเมลไม่ได้ เครื่องทำหน้าที่เป็นทั้งเครื่องบริการ ส่งและเครื่องบริการเว็บในตัวเอง ส่วนซอฟท์แวร์ก็เหมือนกับเครื่องที่ 1 และถูกใช้มาโดยตลอด พบว่าวิธี แก้ปัญหาคือ กำหนด SMTP ใน php.ini จาก localhost เป็น ip address ของตนเอง ก็คาดว่าการใช้ localhost ไม่ได้เกิดจากการ config เครื่องบริการส่งเมลเป็นเหตุ แต่ตอนนี้ใช้ได้แล้วก็ไม่คิดจะเข้าไปแก้ไขอีก เครื่องบริการเว็บที่ 4 เป็นของคุณธรณินทร์ สุรินทร์ปันยศ ใช้บทเรียนที่ผ่านมาแก้ไขก็ยังไม่สำเร็จ พบ error ว่า connection กับ smtp server ไม่สำเร็จ  พบว่าวิธีแก้ปัญหาคือ ปิดบริการ Antivirus ของ Mcafee ซึ่งมี firewall ในตัว ก็ใช้ได้ปกติในทันที
+ SMTP = localhost
+ sendmail_from = a@a.com
+ mail(“x@x.com”,”hello”,”this is my test”,”From: y@y.com\nReply-To: z@z.com“);
+ ini_set(“SMTP”,”11.22.33.44″ );
+ ini_set(‘sendmail_from’, ‘b@b.com’);

ตรวจการติด Black List หลังพบปัญหา

 

squirrel mail
squirrel mail

27 ส.ค.52 วันนี้ตรวจสอบ queue ของ smtp server พบว่ามี mail ค้างกว่าหมื่นฉบับ ตรวจพบว่าผู้ส่งคือสมาชิกในองค์กรของเรา แต่เขาไม่น่าจะเป็นผู้ส่งเมลขนาดนี้ เมื่อตรวจในรายละเอียดก็พบว่าส่งจาก squirrelmail ซึ่งเป็น webbased mail  และก็พบว่าการส่งนั้นมาจาก webbased mail ที่ถูก hack  แม้จะใช้ ssl กรองด่านแรกแล้ว แต่ spam bot ก็ยังเจาะตรงเข้าไปได้ พบว่ามี user หลายคนมีพฤติกรรมเช่นนี้ สิ่งที่เหมือนกันของผู้เป็นเหยื่อ spam bot คือกำหนดรหัสผ่านที่เหมือนกับรหัสผู้ใช้ ซึ่งเป็นข้อบกพร่องที่ผมปล่อยให้เกิดขึ้นมาหลายปี และไม่ได้กำชับให้ทุกฝ่ายเข้าใจ คาดว่า spam bot มุ่งเจาะเข้าจุดอ่อนใน squirrelmail และการกำหนดรหัสของผู้ใช้ที่หละหลวม จึงทำการแก้ไขปัญหาดังกล่าว
     เมื่อเกิดปัญหาแล้ว ก็ตามไปดูว่า ผลของปัญหาดังกล่าวมีปฏิกิริยาลูกโซ่สู่ภายนอกหรือไม่ ด้วยการตรวจว่า smtp server ตัวใหม่ของเราติด black list อีกแล้วหรือไม่ 1)ตรวจกับ spamhaus.org พบว่ามี 7 IP ที่ติดในบริการของ cat.net.th  แต่เราไม่ติดในบัญชีดำชุดนี้ 2)ตรวจกับ find-ip-address.org แล้วพบว่าเราไม่ติด 3)ตรวจกับ mxtoolbox.com ซึ่งส่ง ip ไปตรวจใน 111 เครื่องบริการ พบว่า smtp ทั้งสองเครื่องติดใน 5 เครื่องบริการคือ 3.1)sorbs.net/lookup.shtml (ขอ delist) 3.2)barracudacentral.org/rbl (remove request) 3.3)spamrats.com (Removal) 3.4)wpbl.info (Remove Record) 3.5)uceprotect.net (?)
     วิธีแก้ไข ที่ดำเนินการคือ 1)หยุดการส่ง spam จากเครื่องของเรา และตรวจสอบอยู่เสมอ 2)ขอแก้ไขกับผู้ให้บริการขึ้นบัญชี black list ทีละราย ซึ่งทำไปกับ 4 รายแล้ว 3)เปลี่ยนเครื่องบริการ smtp และต้องดูแลไม่ให้เกิดขึ้นอีก
แหล่งอ้างอิง
+ http://www.blacklistalert.org
+ http://mxtoolbox.com/blacklists.aspx
+ http://www.find-ip-address.org
+ http://www.spamhaus.org/sbl/index.lasso
+ http://whatismyipaddress.com