ดังนั้นฉันจึงพยายามทดสอบฟังก์ชันอีเมลบางอย่างอย่างง่ายในแอปพลิเคชัน PHP (Magento) แต่ฉันพบปัญหา สิ่งที่ฉันต้องการทำคือเก็บเอาต์พุตจากการโทรไปยังในตัว จดหมาย ()
ทำงานเป็นไฟล์ในเครื่องแทนการส่งผ่านเซิร์ฟเวอร์ SMTPฉันรู้วิธีและเคยตั้งค่าการเข้าถึง SMTP สำหรับแอปพลิเคชันนี้มาแล้ว แต่ต้องใช้เวลาสักระยะ และฉันคิดว่ามันคงไม่ยากที่จะทำด้วยวิธีนี้
หลังจากดูเอกสารประกอบแล้ว ดูเหมือนว่ามันจะตรงไปตรงมามากตั้งแต่ sendmail_path
ตัวเลือกการกำหนดค่าดูเหมือนจะเป็นสิ่งที่ฉันต้องการ ฉันตรวจสอบว่าทั้งบนบรรทัดคำสั่งและผ่าน Apache ไฟล์คอนฟิกูเรชัน php.ini ที่โหลดนั้นเป็นไฟล์เดียวกัน ดังนั้นฉันจึงแก้ไขไฟล์นั้นและตั้งค่า sendmail_path
ถึง /usr/local/bin/testsendmail
. จากนั้นฉันสร้างสคริปต์ใหม่ที่เส้นทางนั้นซึ่งรับอินพุตและเขียนลงไป /tmp/sent-mail.html
. ฉันสร้างไฟล์นั้นและตรวจสอบให้แน่ใจว่ามี 777
สิทธิ์เพียงเพื่อให้แน่ใจว่าฉันไม่พบข้อผิดพลาดในการอนุญาต (ไฟล์ ทดสอบส่งอีเมล
สคริปต์ก็มี 775
สิทธิ์ด้วยเหตุผลเดียวกัน)
เพื่อส่งอีเมลจากหน้าเว็บ ฉันได้สร้างสคริปต์ PHP ทดสอบอย่างง่ายที่ไม่ได้ทำอะไรเลยนอกจากโทรออก จดหมาย ()
โดยใช้ข้อมูลการทดสอบบางอย่าง เมื่อฉันเรียกใช้สคริปต์นี้ผ่าน php /var/www/html/test/test.php
มันทำงานตรงตามที่ฉันคาดไว้: มันเรียกหา ทดสอบส่งอีเมล
ไฟล์ซึ่งเขียนอีเมลไปยังไฟล์ที่ฉันระบุ อย่างไรก็ตาม เมื่อฉันเปิด URL นี้ในเบราว์เซอร์ จดหมาย ()
ฟังก์ชันส่งกลับ จริง
แต่ไม่ทำอะไรเลย
ฉันเปิดใช้งานตัวเลือกการบันทึกข้อผิดพลาดตามปกติทั้งหมด ฉันไม่ได้รับอะไรกลับมาเลย มันทำงานต่อไปหลังจาก จดหมาย ()
โทร ดังนั้นจึงไม่เกิดข้อผิดพลาดอย่างเงียบๆ ฉันตรวจสอบให้แน่ใจว่าไฟล์ที่เป็นปัญหาทั้งหมดมีสิทธิ์เปิด ดังนั้นจึงไม่มีโอกาสเกิดข้อผิดพลาดในการอนุญาต สิ่งเดียวที่ฉันคิดได้คือ Apache อาจสร้างกระบวนการใหม่เพื่อส่งจดหมาย และด้วยเหตุผลบางอย่างกระบวนการนี้ไม่ได้รับอนุญาตให้แก้ไขไฟล์หรืออะไรทำนองนั้น ฉันไม่แน่ใจจริงๆ ดังนั้นความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก ฉันสามารถส่งเนื้อหาที่แน่นอนของสคริปต์ทดสอบได้ แต่จริงๆ แล้วไม่มีอะไรอื่นนอกจากการโทร จดหมาย ()
และ file_put_contents()
เพื่อเขียนข้อมูล