Tło: Jeśli skonfigurowałeś lokalny serwer Apache do celów programistycznych, możesz mieć problem z tym, że sendmail zajmuje dużo czasu (co najmniej minutę) na wysyłanie wiadomości e-mail. Jest to bardzo frustrujące, jeśli próbujesz debugować problem z wygenerowanym e-mailem.
W Internecie znajduje się kilka postów na forum, które omawiają ten problem. Jednak żaden z tematów nie opisał, co robić wystarczająco szczegółowo, aby uzyskać moją ograniczoną wiedzę. Oto kroki, które działały dla mnie:
1) znajdź swoją nazwę hosta (na wypadek, gdybyś zapomniał) za pomocą tego polecenia:
:~$ cat /hosts/hostname
myhostname
2) edytuj plik /etc/hosts
i upewnij się, że pierwszy wiersz jest następujący:
127.0.0.1 localhost.localdomain localhost myhostname
3) edytuj plik konfiguracyjny sendmaila ( /etc/mail/sendmail.cf
w Ubuntu) i odkomentuj linię#O HostsFile=/etc/hosts
4) Uruchom ponownie komputer. Komputer powinien teraz uruchomić się znacznie szybciej, a funkcja mail () powinna powrócić prawie natychmiast. JEDNAK e-maile nie zostaną wysłane, chyba że wykonasz krok 5.
5) Musisz użyć opcji sendmail „-f” za każdym razem, gdy korzystasz z funkcji mail. Na przykład:
mail('[email protected]', 'the subject', 'the message', null, '[email protected]');
Moje pytanie do moich innych administratorów serwerów brzmi:
Jakie dalsze zmiany można wprowadzić, aby nie musiałem używać opcji sendmail -f? Chociaż dodanie opcji -f nie jest trudne, jest problem, gdy Twój CMS (taki jak Drupal) nie używa opcji -f podczas wysyłania poczty. Aby dodać tę opcję, musisz zhakować moduł podstawowy.
cat /etc/hostname
Odpowiedzi:
Wiem, że nie o to pytasz, ale dlaczego nie wypróbujesz Postfixa lub Exima? Oba są dostępne dla Ubuntu (Postfix jest nawet domyślnym MTA w systemach Ubuntu) i oba zapewniają kompatybilne polecenie „sendmail”, które działa bardzo dobrze. IMHO sendmail jest w pewnym sensie datą i zyskasz większe szanse na wsparcie dzięki bardziej nowoczesnemu MTA.
źródło
sendmail
binarne, które akceptują te same opcje co oryginalny sendmail, ze względu na kompatybilność.To działało dla mnie:
Zobacz instrukcje, jak to zrobić tutaj: https://help.ubuntu.com/community/Postfix (może być już zainstalowany, a plik binarny „sendmail” może być aliasem postfiksa)
http://lenss.nl/2009/01/making-php-mail-work-on-ubuntu-through-postfix/
Myślę, że możesz po prostu ustawić parametr „myorigin” na dowolną aktywną nazwę domeny, taką jak nazwa domeny, którą posiadasz.
źródło
To może być, ale nie musi, rozwiązanie: dodaj
mail.force_extra_parameters = "[email protected]"
do pliku php.ini . To powoduje, że PHP automatycznie dołącza [email protected] jako piąty parametr do funkcji mail () PHP.Jest to wartość zakodowana na stałe i ma zastosowanie tylko w php.ini, więc nie będzie zbyt elastyczna, ale może działa dla ciebie w przypadku programowania?
źródło
Obserwując ruch sieciowy (pomyśl
tcpdump
) lub uruchamiając processtrace
wysyłania lub wysyłania apache, powinieneś być w stanie dowiedzieć się, dlaczego to opóźnienie istnieje, abyś mógł rozwiązać problem root.Zwykle opóźnienia w tym zakresie wynikają z nieudanych wyszukiwań DNS, ale nie dowiesz się, dopóki nie spojrzysz. O ile nie naprawisz podstawowego problemu, prawdopodobnie stanie się on problemem, bez względu na to, jak spróbujesz go obejść.
źródło
Nigdy nie spotkałem się z problemem korzystania z mail () w PHP, który nie był wynikiem problemu na MTA.
W pliku php.ini pokaże, jakie polecenie uruchomi, aby wysłać wiadomość e-mail (domyślnie: „sendmail -t -i”). Spróbuj wysłać wiadomość e-mail z wiersza polecenia, używając tego - założę się, że jest powolny.
Zwykle należy sprawdzić, czy serwer DNS jest poprawnie skonfigurowany na komputerze (i może rozpoznać wszystkie adresy skonfigurowane w MTA) i czy jeśli skonfigurowany jest inteligentny przekaźnik, wówczas nazwę można rozwiązać na adres, z którym system może się połączyć.
źródło