Niedawno zaimplementowałem obszar komentarzy na mojej stronie i starałem się, aby powiadomienie e-mail działało. Wydaje się, że nie chce wysyłać powiadomień e-mail o nowych komentarzach.
Aby zobaczyć, czy PHP może wysyłać e-maile, próbowałem zresetować hasło (ponieważ otrzymasz nowe hasło pocztą), i dostałem wiadomość:
Nie można wysłać wiadomości e-mail. Możliwy powód: Twój host mógł wyłączyć funkcję mail ()
Zaznaczyłem pola wyboru w Ustawieniach -> Dyskusja, a e-mail jest prawidłowy, więc nie jest to problem z ustawieniami. Próbowałem utworzyć plik PHP i wysłać za pomocą mail()
, i wysłał pomyślnie. Więc z WordPress musi się dziać coś dziwnego.
Jakieś pomysły?
Odpowiedzi:
Krok po kroku: Najpierw znajdź plik, w którym pojawia się komunikat o błędzie. Do wyszukiwania plików używam Notepad ++ i polecenia CTRL+ F. Dobrym pomysłem jest wyszukiwanie tylko kilku pierwszych słów komunikatu o błędzie, ponieważ niektóre komunikaty o błędach są połączone z różnymi komunikatami.
Twój komunikat o błędzie pojawia się
wp-login.php
i święte szczęście, tylko tam. Zobaczmy więc, dlaczego ten błąd może wystąpić.Są dwa warunki.
$message
muszą być prawdziwe (nie pusty ciąg, nie fałsz, nie zero itp.). Iwp_mail()
nie powinien zwracać fałszu.Jeden wiersz powyżej zawiera filtr
$message = apply_filters('retrieve_password_message', $message, $key);
, więc możliwe jest, że wtyczka (lub motyw) użyje tego filtra i zwróci wartość, która nie jest prawdziwa (pusty ciąg, fałsz, zero, itd.).Ale o wiele łatwiej jest sprawdzić, czy
wp_mail()
działa, czy nie. Napisz małą wtyczkę, aby wysłać do siebie wiadomość testową:(To jest kod PHP5.3. Jeśli korzystasz z PHP5.2, usuń elementy przestrzeni nazw)
Wtyczka powinna wysłać testmail natychmiast po aktywacji. Jeśli nie, wywołanie niektórych stron zaplecza (np. Pulpit nawigacyjny) powinno to zrobić.
Jeśli testmail nie dotrze, prawdopodobnie masz problem z
wp_mail()
. Włącz więc debugowanie:Umieść ten kod w swoim
wp-config.php
i ponów próbę wysłania sobie testmaila. Teraz powinieneś dostać kilka komunikatów o błędach, które również powinny się zalogowaćwp-content/debug.log
(dziennik debugowania może się bardzo powiększyć, jeśli więcej błędów jest spowodowanych przez wtyczki i / lub motywy).W tym momencie masz dobre informacje, jeśli się
wp_mail()
nie powiedzie, a jeśli tak, to dlaczego. Jeśliwp_mail()
działa poprawnie i przyszedł testmail, wróć na górę i dowiedz się, dlaczego$message
to nieprawda.Jeśli masz problemy
wp_mail()
, pamiętaj, żewp_mail()
nie używamail()
funkcji PHP . WordPress korzysta z klasy PHP ( PHPMailer ). Może potrzebujesz wtyczki, aby korzystać z SMTP zamiast sendmaila. Lub problem znajduje się w innym miejscu. Nie wiemy Musisz to zbadać.źródło
mail()
. Przynajmniej w niektórych przypadkach (patrz linia 732 wwp-includes/class-phpmailer.php
nie mam dostępu do ftp atm ale postaram swoje sugestie jak tylko mogę pewnością musi to prowadzić mnie gdzieś dziękuję...!wp_mail()
i wydaje się, że działa dobrze, otrzymałem pocztę zgodnie z oczekiwaniami. WP nadal nie wysyłało wiadomości e-mail z komentarzem / resetowaniem hasła, a ja nie dostałem niczego w pliku dziennika (nie został utworzony), więc próbowałem zainstalować wtyczkę poczty SMTP i skonfigurować nowe konto e-mail dla Wordpress. Działa teraz, ale nadal nie rozumiem, dlaczego wcześniej nie mógł wysłać. Dzięki!Jest to bardzo irytujący komunikat o błędzie, ponieważ może to być wiele rzeczy i nie ujawnia rzeczywistego błędu (który często jest wyciszany w innych częściach kodu).
Ten błąd pojawia się, gdy
wp_mail()
funkcja zwraca false, co z kolei może się zdarzyć, jeśliphpmailer->Send()
zwróci false lub zgłosi wyjątek.Jak wyświetlić ostrzeżenia z
mail()
funkcji PHPSą one zwykle domyślnie wyciszone, ale niestety WordPress nigdy ich nie przechwytuje. Aby pokazać je po prostu usunąć
@
znaki z@mail(...
wwp-includes/class-phpmailer.php
wmailPassthru()
funkcji:Jak znaleźć inne możliwe przyczyny:
Dodaj pojedynczy wiersz na dole
wp_mail()
w/wp-includes/pluggable.php
:Zrzuci pełne informacje o tym, gdzie zgłoszono wyjątek. Niestety czasami zawiera ten nieprzydatny komunikat o wyjątku: „ Nie można utworzyć instancji funkcji poczty ”. Tak, dzięki WordPress, to naprawdę pomocne.
Patrząc na wyjątek, możesz znaleźć numer linii błędu i, mam nadzieję, prześledzić go z powrotem przez kod, aby znaleźć prawdziwą przyczynę.
Powodzenia. Mam nadzieję, że WordPress poprawi obsługę błędów e-mail w pewnym momencie w przyszłości.
źródło
Mam ten sam problem z serwerem Ubuntu na Amazon EC2. Występuje problem podczas korzystania z linku resetowania hasła, a także innych powiadomień e-mail nie działa.
Oto rozwiązania, które działały dla mnie. Word-press użył
wp_mail()
funkcji do wysłania wiadomości e-mail, która potrzebujePHPMailer
klasy, w której przechowywany jest mailer php/usr/sbin/sendmail
.Użyj najpierw tej prostej funkcji php, aby sprawdzić pocztę php
Jeśli to nie działa, musisz zainstalować program pocztowy PHP. Użyj tego polecenia, aby zainstalować pocztę php na serwerze Ubuntu.
Następnie sprawdź funkcje wiadomości e-mail za pomocą prasy.
źródło
Jeśli inne świetne odpowiedzi tutaj nie pomogą, spróbuj tego:
Napotkałem ten sam problem i nic, co nie znalazłem w żadnej z sugestii dotyczących WordPress, nie rozwiązało go dla mnie.
Potem zacząłem sprawdzać, czy to sama instalacja PHP wyłączyła funkcję poczty, ale żadna z nich również nie działała. Wszystko wyglądało, jakby zostało poprawnie skonfigurowane.
Wszystkie te problemy zaczęły się dla mnie, kiedy uaktualniłem swój serwer do CentOS 7, który korzysta z SELinux (Security Enhanced Linux), a nauczyłem się w ciągu ostatnich kilku tygodni z SELinux, że jeśli coś nie działa, ale wszystko wygląda jak powinien działać ... oznacza to, że SELinux cicho i potajemnie blokuje ci dostęp do tła.
I altówka.
Jeśli działasz, a system operacyjny korzysta z SELinux, po prostu wykonaj następującą komendę jako root:
setsebool -P httpd_can_sendmail=1
Istnieje ustawienie zabezpieczeń, które z natury uniemożliwia serwerowi wysyłanie wiadomości e-mail. Kiedy przełączysz ten przełącznik i powiesz SELinux, że serwer WWW może wysłać wiadomość e-mail, wszystko nagle działa.
źródło
Wpadłem na to dzisiaj; w moim przypadku sytuacja się wydarzyła, ponieważ plik hosts serwera ma taką samą nazwę domeny jak adres e-mail, wskazując na localhost. Rekord MX wskazuje na inny serwer, ale plik hosts zastępuje DNS, a WP próbuje dostarczyć pocztę lokalnie. Usunięcie domeny z pliku hosts i ponowne uruchomienie sendmail rozwiązało ten problem.
źródło
Nie wiem, czy to nadal dotyczy ciebie, czy nie, ale ponieważ nie ma wybranej odpowiedzi, pomyślałem, że raz spróbuję.
Właściwie napotkałem dokładnie ten sam problem, ponieważ mój gospodarz openhift nagle ustąpił dzisiaj i przestał wysyłać maile. Przekopując się przez kod i kodeks, dowiedziałem się o funkcji wp_mail () i wreszcie google doprowadziło mnie tutaj i zobaczyłem, jak można to zmienić.
Opierając się na odpowiedzi @ Ralf912, zmodyfikowałem nieco skrypt, tak aby kod używał interfejsu WWW sendgrid.com do wysyłania wiadomości e-mail zamiast domyślnego Wordpress (domyślam się:
I zadziałało!
źródło
Miałem ten sam błąd, obie funkcje (poczta i wp_mail) działały, ale nadal miałem ten irytujący błąd. Poprawka była bardzo łatwa, ale znalezienie przyczyny zajęło mi kilka godzin. Podzielę się tutaj moim rozwiązaniem problemu, który może być (lub nie) taki sam jak twój.
Próbowałem funkcji mail () i działała, ale podczas jej testowania nie podajesz ostatniego parametru o nazwie „parametry” w funkcji mail (). I WP tego używa.
Zasadniczo ten parametr („[email protected]”) z flagą „-f” powoduje, że funkcja mail () sprawdza, czy adres e-mail „[email protected]” znajduje się na liście „zaufanych wiadomości e-mail”.
Więc jeśli nie, zwraca false, co powoduje, że wp_mail () zwraca false i prowadzi do komunikatu o błędzie.
Rozwiązaniem jest więc poproszenie hosta o zrobienie tego za ciebie, a jeśli używasz cPanel, po prostu dodaj konto e-mail dla tego adresu, a on automatycznie doda go do „zaufanej listy”.
źródło
nazywało się to - Zarządzaj zarejestrowanymi identyfikatorami e-mail do wysyłania wiadomości e-mail za pomocą skryptów, tj. (Wordpress)
źródło
Miałem ten błąd przez wieki i próbowałem tak wielu rozwiązań, które nie działały. Mam niestandardową instalację Wordpress na AWS EC2. Po pierwsze upewnij się, że Twoja poczta AWS SES jest włączona poprzez wsparcie, muszą znajdować się w tym samym (lub bliskim) regionie w SES i EC2. Użyłem pakietu Google (gsuite) do poczty e-mail do odbierania / wysyłania poczty.
Upewnij się, że testowy e-mail wysyła AWS SES i Gsuite.
Zainstaluj wtyczkę Wordpress WP Mail SMTP, użyj opcji „Inne SMTP”, pobierz swoje poświadczenia SMTP z AWS SES, tutaj utknąłem.
Musisz włączyć pole „SSL” dla Szyfrowania, co dla mnie zmienia port na 465. W końcu mój test e-mail został pomyślnie wysłany z Worpdress.
źródło