2012-08-04 10 views
31

Funkcja PHP wydaje się dostarczać pocztę w czystym systemie, bez żadnej widocznej konfiguracji administratora lub webmastera (brak konfiguracji SMTP pod numerem php.ini itp.). W jaki sposób funkcja mail dostarcza pocztę do zdalnego serwera?Jak działa `mail` PHP?

+0

Dlaczego ta konfiguracja została wykonana? Jeśli nie masz na myśli dostarczania poczty do webmastera, nie ma sensu konfigurowanie przez webmastera. – 11684

+0

Zadajesz niewłaściwe pytanie - nie ma nic złego w funkcji mail() w PHP - to nie jest niewiarygodne. Problem polega na zawartości i dystrybucji twoich maili. Lepsze pytanie brzmi: "Jak mogę uniknąć mej poczty kończącej się w folderze spam?". – Repox

+0

powiedział "niezawodny", ale to naprawdę nie jest pytanie dla ... tutaj – Alex

Odpowiedz

22

Włącza * nix wywołuje plik binarny sendmail, który następnie wykorzystuje konfigurację poczty do kierowania wiadomości e-mail. W systemie Windows wysyła do serwera SMTP. W obu przypadkach sysadmin konfiguruje system pocztowy.

+2

Dzięki za odpowiedź na pytanie, które zadałem. Nie byłem pewien, czy PHP kontaktował się z serwerem zdalnym i obsługiwał SMTP, czy też przekazał to zadanie do MTA na lokalnym serwerze. Czy wiesz, dlaczego to pytanie jest odrzucane? Myślę, że wielu ludzi po prostu źle to zrozumiało. Wydaje się pasować do zakresu strony (zgodnie z definicją podaną przez [FAQ] (http://stackoverflow.com/faq)). –

+5

@ Tom: Ludzie skupili się na słowie, a nie na pytaniu. –

+0

Zmodyfikowałem pytanie, aby pomóc rozwiązać problem. Nie rozumiem, co jest "niejasne, niejasne, niepełne, zbyt szerokie lub retoryczne" na ten temat. Próbowałem pytać w czacie PHP, ale nie było tam moderatorów lub żaden z nich nie odpowiedział. Czy istnieje lepsze miejsce do poznania witryny? –

4

To naprawdę nie jest tak niezawodny, chyba że podstawowy sendmail lub coś jest poprawnie skonfigurowane.

Amazon SES ma lepsze serwery niż jakikolwiek serwer, z którego korzystasz, i dostaje tam więcej wiadomości niż z mail().

Prawdziwym powodem, dla którego nie powinieneś używać mail() jest to, że adres IP twojego serwera jest prawdopodobnie zupełnie nieznany dla usług pocztowych, takich jak Gmail, Yahoo itd., I istnieje większa szansa, że ​​zostanie oznaczony jako spam. Dlaczego jest oznaczony jako spam? Ponieważ mail() jest bardzo łatwy i łatwy do wykorzystania w celu spamu.

+2

To tak naprawdę nie odpowiada na pytanie, jak to działa. Używam SES do innych rzeczy. Po prostu chciałem się dowiedzieć, jak to działa na czystą instalację bez konfiguracji, nie dlatego, że zostanie oznaczone jako spam lub co powinienem użyć. Dzięki za odpowiedź. –

+0

sendmail. /rozmowa. – David

4

mail() używa sendmaila, który korzysta z DNS, aby znaleźć rekord MX domeny docelowej i dostarcza ją bezpośrednio. to jest to.

a ponieważ serwer docelowy prawdopodobnie nie zna twojego adresu IP, szczególnie jeśli jest NAT, może być oznaczony jako spam.

możesz zmodyfikować konfigurację tak, aby używała innego (znanego z reklam) serwera SMTP do pośrednictwa.

7

Możesz wykryć, jak to działa, jak poniżej.

Pierwsza metoda

$ ltrace php -r "mail('[email protected]', 'Test', 'Hello world');" 2>&1 | grep sendmail 
memcpy(0x095ea168, "sendmail_from", 14)   = 0x095ea168 
memcpy(0x095ea1e0, "sendmail_path", 14)   = 0x095ea1e0 
popen("/usr/sbin/sendmail -t -i ", "w")   = 0x0977c7c0 

Z wyników powyższego polecenia można zauważyć, że funkcja popen() otwiera proces /usr/sbin/sendmail -t -i.

$ ls -l /usr/sbin/sendmail 
... /usr/sbin/sendmail -> exim4 

Więc sendmail jest dowiązaniem do exim4 i stąd sendmail -t -i wywołuje exim4 -t -i.

iw podręczniku stronie exim4 można przeczytać o tych opcji -t -i:

$ man exim4 | grep ' -t -i' 
-ti  This option is exactly equivalent to -t -i. It is provided for compatibility with Sendmail. 

Druga metoda

Install snoopy i uruchom:

# grep snoopy /var/log/auth.log | tail 
... php -r mail('[email protected]', 'Test', 'Hello world'); 
... /usr/sbin/sendmail -t -i 
... /usr/sbin/exim4 -Mc 1YxxYn-0006a7-Nw 
... /usr/sbin/exim4 -t -oem -oi -f <> -E1YxxYn-0006a7-Nw 
... /usr/sbin/exim4 -Mc 1YxxYn-0006aB-Oj 

wynikach powyższego polecenia pokaż sekwencję poleceń, które zostały wykonane.