Posts Tagged ‘mail’

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

Thursday, December 31st, 2009

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’);

แก้ปัญหาจดหมายมาแล้วไม่เข้ากล่องจดหมาย

Thursday, August 13th, 2009

13 ส.ค.52 พบปัญหาว่าอีเมลฉบับใหม่ไม่เข้ากล่องอีเมล(inbox) ของสมาชิกหลายท่าน ทดสอบส่งด้วย  #echo “test”|sendmail hello@yonok.ac.th จะพบเวลาของกล่องอีเมลใน /var/mail เปลี่ยนไป แต่ขนาดไม่เปลี่ยน ทุกครั้งที่ตรวจสอบด้วย #ls -alt ผมก็จะตรวจแต่เวลาเท่านั้น มาทราบตอนคุณธรณินทร์ สุรินทร์ปันยศ แจ้งว่ามีสมาชิกหลายท่านรายงานปัญหานี้เข้ามา ปัญหานี้น่าจะเกิดจากการเปลี่ยนระบบบริการอีเมลจาก sendmail เป็น postfix ที่โครงสร้างการบริการอีเมลอาจแตกต่างกัน และพบปัญหากับสมาชิกเพียงบางท่าน
แต่ปัญหานี้ต้องแก้ไขเร่งด่วน จึงไม่ได้คัดกรองสมาชิกว่าคนใดมีปัญหาหรือไม่มี ส่วน smtp ก็ยังใช้บริการจาก relay.cat.net.th ใน squirrelmail ที่ยังทดสอบไม่เรียบร้อย ที่มีแผนจะใช้บริการจาก smtp virtual server ในองค์กร ซึ่ง คุณอนุชิต ยอดใจยา ติดตั้งและเปิดบริการให้ใช้เป็นเครื่องส่งอีเมลแทนเครื่องเดิม ที่ถูกขึ้นบัญชีดำโดยภายนอก
     ดำเนินการแก้ปัญหาในเบื้องต้น 3 วิธี คือ 1)แก้ไขสิทธิ ความเป็นเจ้าของ และขนาดของแฟ้มก็ยังรับใหม่ไม่ได้ 2)นำอีเมลใหม่ต่อท้ายอีเมลเก่าด้วย #cat new>>old ก็ยังรับใหม่ไม่ได้ 3)สร้าง folder ใหม่แล้วย้ายกล่องจดหมายเข้า(inbox) ไปทับ folder ที่สร้างขึ้น เป็นทางออกให้สมาชิกสามารถรับอีเมลใหม่ได้ปกติ ส่วนอีเมลเก่าก็จะกลายเป็น folder ชื่อ oldmail อยู่ด้านซ้ายของ squirrelmail
       รายละเอียดของการดำเนินการวิธีที่ 3 คือ 1)คัดลอกรายชื่อกล่องจดหมายเข้าใน /var/mail ด้วย #ls -al ไปใช้ใน excel แล้วเลือกเฉพาะชื่อ ไปเก็บไว้ใน column a1 2)เขียนฟังก์ชันสร้าง folder สำหรับ squirrelmail อัตโนมัติ =”echo mail/oldmail>>/home/” & A1 &”/mail/.subscriptions” แล้วคัดลอกไปวางใน Linux Shell ทั้ง column 3)ตรวจว่าผู้ใช้เคยใช้เว็บเมลหรือไม่ เพราะถ้าไม่เคยก็จะไม่มีห้อง mail จึงต้องเลือกดำเนินการกับผู้ใช้ที่ไม่เคยใช้บริการ แต่มีอีเมลถึงผู้ใช้เหล่านั้นมากมาย =”ls -al /home/”& A1 &”/mail” 4)ย้ายกล่องจดหมาเข้า(inbox) ไปเป็น folder ชื่อ oldmail ด้วย =”mv “& A1 &” /home/” & A1 &”/mail/mail/oldmail” ต้องทำทีละบรรทัด เพราะผู้ใช้บางท่านมีกล่องอีเมลใหญ่ถึง 300 MB 5)ลบสมาชิกด้วย 3 ขั้นตอนคือ #userdel -r hello และ #rm /home/hello -Rf และ #rm /var/mail/hello
+ http://www.thaiall.com/blog/burin/470/

ปัญหาอีเมลที่เกิดจาก inbox file error

Monday, August 10th, 2009

10 ส.ค.52 วันนี้มีโอกาสพูดคุย คุณลัดดาวรรณ เรือนทัศนีย์ และคุณนันทิดา คำแก้ว ประเด็นหนึ่งที่หยิบยกขึ้นมาคือปัญหาที่สำนักทะเบียนฯ รับอีเมลที่ส่งจากคุณเจนจิรา เชิงดี ในเช้าวันนี้ไม่ได้ โดยส่งไปถึงบัญชีของ minta และ regist จาก jenjiranan ซึ่งเป็นอีเมลในองค์กรถึงคนในองค์กร สรุปการดำเนินการดังนี้ 1)ตรวจสอบกับคุณอนุชิต ยอดใจยา ผู้ดูแลเครือข่าย ก็ไม่มีการ block คำใด และยกเลิกการ block ทั้งหมดตามนโยบายการให้บริการด้วยเครื่องบริการใหม่ แล้วไปตรวจสอบ maillog แล้วไม่พบสิ่งผิดปกติ พบ log ว่าส่งถึงกันและสถานะเป็น sent 2)ล็อกอินในฐานะ minta พบอีเมลกว่า 7000 ฉบับค้างใน mailbox เมื่อสอบถามเจ้าตัว ก็ได้ความว่าไม่ได้ใช้มานานแล้ว และจะไม่ใช้ ผมจึงลบ inbox ออก และทดสอบส่ง mail ใหม่ พบว่ารับอีเมลได้ตามปกติ ปัญหาน่าจะเกิดจากแฟ้ม inbox ใหญ่เกินไป และเกิดข้อผิดพลาดในตัวแฟ้ม จึงถือโอกาสล้างขยะออกจากเครื่องไปในคราวเดียวกัน แล้วผมก็ไปแก้ไข aliases โยน mail ของ minta เข้า mail ของผม แล้วสั่ง #newaliases 3)ล็อกอินในฐานะ regist พบว่าจดหมายไม่เข้าใหม่มา 4 วันแล้ว แม้จะส่งถึงตนเองก็ตาม จึงสร้าง folder ใน webmail แล้ว copy inbox ไปทับ folder นั้น แล้วทดสอบส่งอีเมลใหม่เข้าไป ก็พบว่าเข้า inbox ได้ปกติ ส่วนอีเมลฉบับเก่าทั้งหมด ได้ย้ายไป folder ชื่อ oldmail แล้วทุกอย่างก็ปกติ
     สรุปว่าปัญหาน่าจะเกิดจากการความผิดพลาดของ webmail ที่ทำงานไม่ compatible ระหว่างการเปลี่ยนระบบจาก sendmail เป็น postfix หรือเกิดปัญหาระหว่างการ restart service ในขณะเปลี่ยน configuration ของระบบ อาจเป็นได้ว่าทดสอบกลางคืน แต่ผลการทดสอบเกิด delay จนส่งผลถึงการใช้งานในตอนกลางวัน เพราะการทดสอบกว่า 90% ทดสอบกลางคืน แต่ก็ยังส่งผลกระทบให้เห็นดังกรณีนี้