phpmailer ขึ้น Could not execute: /usr/sbin/sendmail

phpmailer ขึ้น Could not execute: /usr/sbin/sendmail

หลังจากที่ได้ใช้ phpmailer มานาน แต่มาช่วงหลังๆ เริ่มใช้ server หลายเครื่อง แล้วเริ่มพบปัญหากับ phpmailer โดยเจอ error Could not execute: /usr/sbin/sendmail เอาล่ะสิ งานเข้ากันแต่วันอีกแล้ว เพราะว่าเคยใช้กันได้อยู่ดีๆ ก็มาใช้ไม่ได้ซะอย่างนั้น

สำหรับปัญหานี้ มันมีสาเหตุมาจากเรื่องเดียวเลย ก็คือ php.ini นั้น ปิดการทำงานของ function ที่เกี่ยวข้องกับส่วน service เอาไว้ครับ หรืออธิบายให้เข้าใจก็คือ มีการตั้งค่า disable function เหล่านี้ ในphp ซึ่งประกอบไปด้วย escapeshellcmd, escapeshellarg, popen, pclose ซึ่ง มีการ disable อย่างน้อย 1 อันจากทั้งหมดนี้ ทำให้ sendmail ไม่สามารถใช้งานได้ (อันนี้แกะมาจาก library ของ phpmailer เองเลยครับ)

สำหรับวิธีแก้ปัญหา ถ้าคุณมีสิทธ์เข้าเครื่อง ก็ไปเอา list เหล่านี้ออกซะ แต่แน่นอน ว่าแลกมากับ security ที่ลดลงของเครื่องนั่นล่ะ แต่ผมมองว่า escapeshellcmd, escapeshellarg ยังสามารถเปิดให้ใช้งานได้ครับ แต่อย่างไรก็ดี หากยังขาดส่วนของ popen ก็ไม่สามารถใช้งานได้อยู่ดี

สำหรับวิธีแก้ปัญหา อีกหนทางหนึ่ง นั่นคือ เอา syntax $mailer->IsSendmail(); ออก เวลาที่เราเรียกใช้งาน phpmailer หรือ เลี่ยงไปใช้งาน phpmailer แบบเชื่อมต่อ SMTP ไปเลยก็ได้ เพราะว่าจะเป็นการเลี่ยงการเรียก process ขึ้นมา ทำให้ไม่กระทบกับตัวเครื่องด้วย

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

ยังไงก็ลองเลือกวิธีแก้ไขกันดูนะครับ

Create: Modify : 2010-09-13 11:27:04 Read : 6229 URL :