ส่งอีเมลด้วย PHP, LAMPP และ PostFix


9

ฉันพยายามมาทั้ง 2 วันแล้วและฉันก็ไม่สามารถทำงานได้ง่ายที่สุด

ปัญหา: การส่งอีเมลจาก PHP ไปยังที่อยู่อีเมลของฉันไม่ทำงาน

ฉันทำงานกับWindowsและSendmail (Sendmail อยู่ในแพ็คเกจ XAMPP) มาก่อนและทุกอย่างก็โอเค แพคเกจ XAMPP (1.7.7) สำหรับ Linux ไม่ได้รวม Sendmail ไว้ ดังนั้นหลังจาก googling ไปเล็กน้อยฉันก็พบว่าPostfixเหมาะกับสภาพแวดล้อม LAMPP


สิ่งที่ฉันได้ลองไปแล้ว:

ฉันได้ติดตั้งPostfixและต้องการกำหนดค่าให้ใช้ smtp-server ของผู้ให้บริการอีเมลส่วนตัวของฉัน (เหมือนที่ทำบน Windows) ดังนั้นฉันได้ยืนยันphp.iniของฉันเช่นนี้:

[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

sendmail_path = /etc/postfix
mail.add_x_header = On

โปรดทราบว่าฉันได้แสดงความคิดเห็น "Win32 เท่านั้น" -stuff /etc/postfix/main.cfลักษณะเช่นนี้:

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
myhostname = ubuntu
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
sender_canonical_maps = hash:/etc/postfix/sender_canonical
mydestination = ubuntu, localhost.localdomain, localhost
relayhost = mail.gmx.net
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only

/ etc / aliasesไม่เปลี่ยนแปลง:

# Required aliases
postmaster: root
MAILER-DAEMON:  postmaster

# Common aliases
abuse:      postmaster
spam:       postmaster

/ etc / postfix / sasl_password :

my.providers.smtp my_login:my_password

/ etc / postfic / sender_canonical:

postmaster my.email@ddress.com

เกิดอะไรขึ้น:

ดังนั้นเมื่อฉันทำ

> sudo /etc/init.d/postfix start

ทุกอย่างดูเหมือนว่าจะทำงานได้ดีและ/var/log/mail.logพูดว่า: "ubuntu postfix / master [9720]: daemon เริ่มต้น - รุ่น 2.8.5, การกำหนดค่า / etc / postfix"

แต่เมื่อฉันรันสคริปต์ PHP ของฉัน (ซึ่งทำงานได้ดีกับ Windows และ Sendmail) มันเพิ่งทำงานผ่านและไม่มีอะไรเกิดขึ้นแม้แต่ข้อผิดพลาดที่บันทึกไว้


สิ่งที่ฉันต้องการบรรลุจริง:

ฉันทำงานในพื้นที่บนเว็บไซต์อีคอมเมิร์ซ มันทำงานได้ดีบนเว็บเซิร์ฟเวอร์โดยเฉพาะ แต่ฉันต้องการให้มันทำงานในพื้นที่ด้วยเหตุผลที่ชัดเจน ในบางกรณีมันส่งอีเมลและฉันแค่ต้องการรับ Thunderbird หรือด้วยวิธีอื่นใด ใช้Postfixมากเกินไปหรือไม่ ฉันไม่ต้องการรับอีเมล - ฉันแค่ต้องการทำให้อีเมลที่ส่งปรากฏให้เห็นอย่างใด ฉันไม่สามารถหาบทเรียนทีละขั้นตอนที่เป็นประโยชน์สำหรับปัญหานี้ได้ (ไม่เกี่ยวข้องกับ Senmail หรือ Postfix - แต่จริงๆแล้วฉันยังใหม่กับ Linux)

คำตอบ:


13

ใน php.ini ของคุณสิ่งนี้:

sendmail_path = /etc/postfix

ควรเป็นเส้นทางไปยังไบนารี sendmail (หรือเข้ากันได้)
คุณได้ตั้งค่าเป็นไดเรกทอรีการกำหนดค่าของ postfix ซึ่งไม่ถูกต้อง

ด้วยเหตุผลทางประวัติศาสตร์มัก/usr/bin/sendmailจะรักษาไว้เป็นลิงค์ความเข้ากันได้
sendmailเป็นรอบแรก (ฉันเดา) และทุกอย่างสวยมากเพียงแค่สมมติว่ามันอยู่ใน MTA ที่ติดตั้ง ดังนั้นเมื่อไม่มีการแทนที่จะสร้าง symlink เพื่อให้ไม่มีอะไรแตก


ขอบคุณมาก ๆ ! แม้ว่าฉันจะไม่เข้าใจว่าทำไมและ Sendmail และ Postfix ทำงานร่วมกันอย่างไรและตอนนี้มันใช้งานได้! จำไม่ได้ว่าที่ไหนอ่านเกี่ยวกับการตั้งค่าให้ postfix แต่นี่คือการตั้งค่าที่ถูกต้องในกรณีของฉัน:sendmail_path = "/usr/sbin/sendmail -t -i"
Quasdunk

เพิ่มข้อมูลอีกเล็กน้อย - โดยทั่วไปพวกเขาไม่ได้ทำงานร่วมกันเช่นนี้คุณไม่มี sendmail แต่ postfix กำลังแสร้งทำเพราะมีหลายสิ่งที่คาดว่าจะอยู่ที่นั่น :) คุณสามารถตั้งค่า sendmail_path ให้เท่ากัน ไบนารี postfix
Cesium

1
ฉันจำได้! sendmail มีข้อผิดพลาดหลังจากข้อผิดพลาดหลังจากข้อผิดพลาดเป็นเวลาหลายปีในตอนท้าย ณ จุดหนึ่งคุณสามารถรวมคำสั่งรูทเท่านั้นใน ~ /. ไปข้างหน้าส่งจดหมายด้วยตัวคุณเองและทำอะไรก็ได้ในระบบ Unix / Linux มีการอพยพจำนวนมากและเซิร์ฟเวอร์อีเมลใหม่รวมถึงโปรแกรมคล้าย sendmail ที่ออกแบบมาให้ทำงานเหมือน sendmail ดังนั้นโปรแกรมอื่น ๆ ทั้งหมดที่สร้างขึ้นด้วยตนเองรอบ sendmail จะยังคงทำงานได้โดยไม่ต้องใช้ความพยายามเพิ่มเติม

ขอบคุณมากสำหรับข้อมูลเพิ่มเติม! ทุกอย่างสมเหตุสมผลแล้ว) ฉันจะให้ +1 อีกถ้าคุณทำได้ แต่ฉันหวังว่าคนอื่นที่พบว่าสิ่งนี้มีประโยชน์เช่นเดียวกับฉัน :-D
Quasdunk

1

ในการส่งจดหมายจาก localhost (WAMP, XAMP หรือ LAMP) คุณสามารถใช้แพ็คเกจ PHPMailer

  • คลิกที่นี่เพื่อดาวน์โหลดจาก github https://github.com/shashidhark/PhpMailerและทำตามคำแนะนำในไฟล์ readme

นี่จะเป็นคำสั่งเดียวกับที่ระบุในไฟล์ readme ..

WAMP (windows):

ก่อนอื่นคุณต้องแก้ไข "php.ini" เพื่อค้นหาไฟล์นี้แสดง phpinfo โดยใช้รหัสต่อไปนี้จากเซิร์ฟเวอร์ WAMP สร้างไฟล์ php หนึ่งไฟล์ [setting.php] ใน C: / wamp / www / และเพิ่มเนื้อหาต่อไปนี้ลงในไฟล์นั้น

<?php
     echo phpinfo();
?>

พิมพ์localhost / setting.phpที่เบราว์เซอร์ มีการค้นหา "การตั้งค่าไฟล์โหลด" นั่นจะเป็นเส้นทางไปยังคุณphp.ini

ในไฟล์ php.iniลบ; (เซมิโคลอน) ที่กำหนดให้กับ `extension = php_openssl.dll ตอนนี้การตั้งค่าเซิร์ฟเวอร์สิ้นสุดแล้ว ...

  • หลังจากดาวน์โหลดโฟลเดอร์ PHPMailer จาก github แล้ว
  • ดึงข้อมูล -> คัดลอกโฟลเดอร์ทั้งหมดลงในโฟลเดอร์โครงการของคุณเช่น C: / wamp / www /
  • ค้นหาไฟล์ index.php
  • เปลี่ยนพารามิเตอร์ตามที่คุณต้องการ
  • จากนั้นในเบราว์เซอร์พิมพ์localhost / PHPMailer / index.php
  • จากนั้นจะแสดงข้อความว่าสำเร็จถ้าส่งอีเมลมิฉะนั้นจะแสดงข้อความข้อผิดพลาด

LAMP (Linux):

  • ในกรณีของ linux ไม่จำเป็นต้องแก้ไขไฟล์ php.ini ดังที่ฉันได้อธิบายจุดแรกภายใต้ WAMP

  • การเปลี่ยนแปลงอีกอย่างหนึ่งคือโครงการหรือโฟลเดอร์รูทเอกสารแตกต่างกัน

  • ใน Linux โฟลเดอร์รากของเอกสารเริ่มต้นจะเป็น / var / www
  • คุณสามารถเปลี่ยนโฟลเดอร์รากของเอกสารได้อย่างง่ายดาย สำหรับการเยี่ยมชมนั้นhttps://stackoverflow.com/a/17612396/1925943
  • คัดลอก PhpMailer ไปยังโฟลเดอร์รูทเอกสารนี้และแก้ไข index.php ตามที่คุณต้องการ
  • จากนั้นพิมพ์localhost / PhpMailer / index.phpในเบราว์เซอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.