2010-07-04 15 views
20

Potrzebuję przetestować funkcję, która używa poczty PHP()
Jak mogę to zrobić bez wgrywania skryptu na serwer i testowania go online?
Co więcej, rozwijam się bez żadnego połączenia z Internetem.
Jestem na Mac OSX z systemem localhost z XAMPP.Przetestuj funkcję poczty PHP z localhost

+0

Can” po prostu uruchamiasz swój skrypt z localhost? –

Odpowiedz

0

Skonfiguruj serwer POP3 w lokalnym komputerze. Wiele dostępnych za darmo. i wysyłaj wiadomości e-mail w swojej lokalnej domenie za pomocą sendmaila.

Domyślnie nie jest wymagane ustawienie ścieżki sendmail w systemie Linux. przynajmniej nigdy tego nie potrzebowałem. wystarczy użyć funkcji mail() i hit maile w lokalnej domenie

+0

To byłby kumpel serwera SMTP pop3, który faktycznie otrzyma e-maile, które nie wyślą e-maili. – Prix

+0

LOL Ya Ale gdzie by sendmail wysłał maile ?????????? on nie ma połączenia z Internetem. Dobra ?????? Oto powód, dla którego serwer POP3 potrzebuje do uruchomienia testu lokalnego. >> Nie mówimy o serwerze SMTP. jego sendmail –

+0

ma dostęp do maszyny tak samo jak z serwerem pocztowym, który może zweryfikować bez konieczności przechodzenia przez połączenie POP3. – Prix

1

Hmm. Nie próbowałem tego, ale w php.ini można ustawić "sendmail_path" ... więc teoretycznie można napisać własny skrypt powłoki, który po prostu zapisałby dane wejściowe do plików tekstowych, i zmienić plik php.ini, aby go użyć? Następnie po prostu uruchom testy i sprawdź pliki tekstowe!

50

Nie musisz instalować MTA na swoim komputerze, aby przetestować funkcję PHP mail(). W systemach opartych na Uniksie (Linux, * BSD, OS X itd.) Możesz ustawić sendmail_path na coś podobnego do tee mail.out > /dev/null. Spowoduje to umieszczenie wiadomości e-mail (w tym nagłówków) w pliku o nazwie mail.out.

Oto przykład jak to działa:

[email protected]:~$ cat | php -d sendmail_path='tee mail.out > /dev/null' 
<?php 
mail('[email protected]', 'the subject', 'the body'); 
?> 
[email protected]:~$ cat mail.out 
To: [email protected] 
Subject: the subject 
X-PHP-Originating-Script: 1000:- 


the body 

Można ustawić sendmail_path w pliku php.ini. Jeśli chcesz dodawać e-maile do pliku zamiast nadpisywać za każdym razem, możesz użyć tee -a zamiast tylko tee.

+4

czy to nie powinno dać odpowiedzi? – RCNeil

+2

Chciałbym zobaczyć to zanim spędziłem całe wieki zastanawiając się jak uzyskać sendmaila/postfixa pracującego – aland

+1

Czy mogę przeczytać ten plik za pomocą klienta poczty e-mail? W moim przypadku używam 'tee -a' – Cesar

5
+0

po prostu ustawić to na moim komputerze. bardzo przydatne - dzięki! –

+0

Dowolna wersja nie-macowa tego? – AlxVallejo

+0

Na końcu strony znajduje się niewielka sekcja systemu Windows. Na innych systemach uniksowych myślę, że można go rozwiązać podobnie jak w przypadku Maca. – biziclop

6

Aby przetestować wysyłanie e-maili z apache wykonaj następujące czynności

utworzyć folder do przechowywania wiadomości e-mail.

/home/username/Documents/TestEmails 

Daj pozwolenie na apache. Z folderu Dokumenty, uruchom

sudo chgrp -R www-data TestEmails 

zmodyfikować plik php.ini, kopalnia znajduje się w

/etc/php5/apache2/php.ini 

ustawiony sendmail_path

sendmail_path ='cat > /home/username/Documents/TestEmails/mail.txt' 

Restart apace2

sudo service apache2 restart 
+0

Co się stanie, jeśli używam oprogramowania serwera MAMP do programowania na localhost? – Nathan

+0

Najlepszą odpowiedzią, która zadziałała dla mnie, jest ta poniżej (http://stackoverflow.com/a/3176517/1130803), ponieważ używa 'tee' zamiast' cat', co daje błąd 'Invalid argument' w systemie OSX. Jeśli korzystasz z MAMP, to myślę, że ta sama rada dotyczy, zmieniając tylko ścieżkę do miejsca, w którym znajduje się twoje php.ini. –

+0

To działa dla mnie, ale tylko ze skryptów CLI; ale nie z usługi sieciowej. Czy jest coś jeszcze, co muszę zrobić, aby zrestartować Apache? – orlybg