Wysyłanie maili za pomocą PHP, LAMPP i PostFix

9

Próbuję już od 2 dni i po prostu nie mogę uzyskać najprostszej rzeczy do pracy.

Problem: Wysyłanie wiadomości e-mail z PHP na mój adres e-mail nie działa

Pracowałem wcześniej z systemami Windows i Sendmail (Sendmail był w pakiecie XAMPP) i wszystko było w porządku. Pakiet XAMPP (1.7.7) dla Linuksa nie ma jednak zintegrowanego Sendmaila. Więc po trochę googlowania dowiedziałem się, że Postfix lepiej pasuje do środowiska LAMPP.


Co próbowałem do tej pory:

Zainstalowałem Postfix i chciałem go skonfigurować tak, aby korzystał z serwera smtp mojego prywatnego dostawcy poczty e-mail (tak jak w Windowsie). Więc skonfigurowałem mój plik php.ini w następujący sposób:

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

; For Win32 only.
;sendmail_from = [email protected]

sendmail_path = /etc/postfix
mail.add_x_header = On

Zauważ, że skomentowałem materiał „Tylko Win32”. Plik /etc/postfix/main.cf wygląda następująco:

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 pozostaje niezmieniony:

# 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 [email protected]

Co się dzieje:

Więc kiedy to zrobię

> sudo /etc/init.d/postfix start

wszystko wydaje się działać dobrze, a /var/log/mail.log mówi: „ubuntu postfix / master [9720]: demon uruchomiony - wersja 2.8.5, konfiguracja / etc / postfix”

Ale kiedy uruchamiam skrypt PHP (który działał dobrze w systemach Windows i Sendmail), po prostu działa i nic się nie dzieje, nawet błąd nie jest rejestrowany.


Co tak naprawdę chcę osiągnąć:

Pracuję lokalnie na stronie e-commerce. Działa dobrze na dedykowanym serwerze WWW, ale chcę, aby działał lokalnie z oczywistych powodów. W niektórych przypadkach wysyła wiadomości e-mail, a ja chcę tylko móc otrzymywać je za pomocą Thunderbirda lub w jakikolwiek inny sposób. Czy używasz tutaj overkill Postfix ? Nie muszę otrzymywać wiadomości e-mail - chcę tylko, aby wysłane wiadomości były jakoś widoczne. Nie mogłem znaleźć żadnych pomocnych samouczków krok po kroku dla tego problemu (ani dotyczących Senmaila, ani Postfixa - ale, szczerze mówiąc, jestem nowy w Linuksie).

Quasdunk
źródło

Odpowiedzi:

13

W twoim php.ini:

sendmail_path = /etc/postfix

Powinna być ścieżka do pliku binarnego sendmail (lub kompatybilnego).
Ustawiłeś go w katalogu konfiguracyjnym Postfiksa, co nie jest poprawne.

Ze względów historycznych zwykle /usr/bin/sendmailjest utrzymywany jako łącze kompatybilności.
sendmailbył pierwszy (tak sądzę) i właściwie wszystko po prostu zakłada, że ​​jest w zainstalowanym MTA. Kiedy tak nie jest, zamiennik tworzy dowiązanie symboliczne, dzięki czemu nic się nie psuje.

Cez
źródło
Dziękuję bardzo! Mimo że nie do końca rozumiem, dlaczego iw jaki sposób Sendmail i Postfix współpracują ze sobą - działa teraz! Nie pamiętam, gdzie czytałem o ustawianiu go na postfiks, ale w moim przypadku jest to prawidłowe ustawienie:sendmail_path = "/usr/sbin/sendmail -t -i"
Quasdunk
Dodano trochę więcej informacji - w zasadzie nie działają one razem, nie masz sendmaila, ale postfix udaje, że tak jest, ponieważ tyle rzeczy oczekuje, że tam będzie :) Możesz równie dobrze ustawić ścieżkę sendmaila tak, aby wskazywała na binarny postfiks.
Cesium
1
Pamiętam! sendmail miał błąd po błędzie po błędzie po błędzie przez wiele lat. W pewnym momencie możesz dołączyć polecenie root tylko do ~ / .forward, wysłać sobie pocztę i robić cokolwiek w systemie Unix / Linux. Nastąpił masowy Exodus, a nowe serwery pocztowe zawierały program podobny do sendmaila, zaprojektowany tak, aby zachowywał się jak sendmail, dzięki czemu wszystkie inne programy, które zbudowały się wokół sendmaila, nadal działały bez dodatkowego wysiłku.
Wielkie dzięki za dodatkowe informacje! Teraz wszystko ma więcej sensu;) Dałbym ci kolejne +1, gdybym mógł, ale mam nadzieję, że ktoś inny, kto uzna to za równie pomocne, zrobi to dla mnie :-D
Quasdunk
1

Aby wysłać pocztę z hosta lokalnego (WAMP, XAMP lub LAMP), możesz użyć pakietu PHPMailer

Będzie to taka sama instrukcja jak w pliku readme ..

WAMP (Windows):

Najpierw musisz edytować plik „php.ini”. Aby znaleźć ten plik, wyświetl phpinfo, używając następującego kodu z serwera WAMP. Utwórz jeden plik php [setting.php] wewnątrz C: / wamp / www / i dodaj następującą zawartość do tego pliku.

<?php
     echo phpinfo();
?>

Wpisz localhost / setting.php w przeglądarce. Tam wyszukaj „Załadowany plik konfiguracyjny”, który będzie ścieżką do twojego php.ini .

W pliku php.ini usuń; (średnik) podany dla `extension = php_openssl.dll. Ustawienia serwera zostały zakończone ...

  • Po pobraniu folderu PHPMailer z github,
  • Wyodrębnij-> Skopiuj pełny folder do folderu projektu, tj. C: / wamp / www /
  • Znajdź plik index.php.
  • Zmień parametr zgodnie z potrzebami.
  • Następnie w przeglądarce wpisz localhost / PHPMailer / index.php .
  • Następnie wyświetli pomyślną wiadomość, jeśli wiadomość e-mail została wysłana, w przeciwnym razie wyświetli komunikat o błędzie.

LAMPA (Linux):

  • W przypadku Linuksa nie ma potrzeby edytowania pliku php.ini, jak wyjaśniłem w punkcie WAMP.

  • Jeszcze jedna zmiana to projekt lub folder główny dokumentu jest inny.

  • W systemie Linux domyślnym folderem głównym dokumentu będzie / var / www
  • Możesz łatwo zmienić folder główny dokumentu. W tym celu odwiedź https://stackoverflow.com/a/17612396/1925943
  • Skopiuj PhpMailer do tego folderu głównego dokumentu i edytuj index.php według potrzeb.
  • Następnie wpisz localhost / PhpMailer / index.php w przeglądarce.
shashidhara
źródło