Załóżmy, że mamy pustą stronę WP i chcemy programowo skonfigurować ustawienia SMTP w naszej wtyczce lub motywie. Jak najłatwiej to zrobić bez zmiany podstawowych plików?
18
Po pierwsze, jeśli spojrzymy na implementację wp_mail
funkcji, zobaczymy, że ta funkcja używa PHPMailer
klasy do wysyłania wiadomości e-mail. Zauważyliśmy również, że istnieje wywołanie funkcji zakodowane na stałe $phpmailer->IsMail();
, które ustawia użycie mail()
funkcji PHP . Oznacza to, że nie możemy używać z nim ustawień SMTP. Musimy wywołać isSMTP
funkcję PHPMailer
klasy. Musimy również ustawić nasze ustawienia SMTP.
Aby to osiągnąć, musimy uzyskać dostęp do $phpmailer
zmiennej. I tutaj dochodzimy do phpmailer_init
działania, które jest wywoływane przed wysłaniem wiadomości e-mail. Możemy więc zrobić to, czego potrzebujemy, pisząc nasz moduł obsługi akcji:
add_action( 'phpmailer_init', 'wpse8170_phpmailer_init' );
function wpse8170_phpmailer_init( PHPMailer $phpmailer ) {
$phpmailer->Host = 'your.smtp.server.here';
$phpmailer->Port = 25; // could be different
$phpmailer->Username = '[email protected]'; // if required
$phpmailer->Password = 'yourpassword'; // if required
$phpmailer->SMTPAuth = true; // if required
// $phpmailer->SMTPSecure = 'ssl'; // enable if required, 'tls' is another possible value
$phpmailer->IsSMTP();
}
I to wszystko.
wp_mail
.Dodatek do odpowiedzi @EugeneManuilov.
Ustawienia SMTP
Domyślnie można je tylko - jak już odpowiedział @EugeneManuilov - ustawić w trakcie oddzwaniania dołączonego do
do_action_ref_array()
. Źródło / rdzeń .Wyjątki SMTP
Domyślnie WordPress nie daje żadnych wyników debugowania. Zamiast tego po prostu zwraca,
FALSE
jeśli wystąpił błąd. Oto mała wtyczka, aby to naprawić:Magazyn
Wtyczki są dostępne w tej Gist na GitHub , więc rozważ sprawdzenie tych wtyczek, aby pobrać aktualizacje.
źródło
Inne odpowiedzi na ten post, mimo że zapewniają działające rozwiązanie, nie rozwiązują problemu bezpieczeństwa przechowywania poświadczeń SMTP w pliku wtyczki lub funkcji. Php. W niektórych przypadkach może to być OK, ale najlepsze praktyki nakazują przechowywanie tych informacji w bardziej bezpieczny sposób. Naprawdę nie ma dobrego powodu, aby nie stosować najlepszych praktyk w zakresie ochrony danych uwierzytelniających.
Niektórzy sugerują zapisanie go jako opcję jako opcję, ale zapewnia to te same problemy bezpieczeństwa w zależności od liczby użytkowników administracyjnych Twojej witryny i tego, czy użytkownicy ci powinni widzieć te dane logowania. Jest to również ten sam powód, dla którego nie należy używać do tego wtyczki.
Najlepszym sposobem na to jest zdefiniowanie stałych dla informacji phpmailer w pliku wp-config.php. Zostało to omówione jako funkcja komponentu poczty , ale w tej chwili nie zostało zaakceptowane jako faktyczne ulepszenie. Ale możesz to zrobić samodzielnie, dodając następujące informacje do wp-config.php:
Po ich zdefiniowaniu w wp-config.php można ich użyć w dowolnym miejscu, używając zdefiniowanej stałej. Możesz więc użyć ich w pliku wtyczki lub w pliku functions.php. (Specyficzne dla OP, użyj pliku wtyczki).
Jest trochę więcej szczegółów na ten temat w tym poście i streszczenie na github tutaj .
źródło
.env
tego użyj pliku gitignored . Ale i tak nikt, ktowp-config.php