Contact Form 7 i ustawienie SMTP

Wtyczka Contact Form to jedno z moich sprawdzonych narzędzi do tworzenia formularzy. Używam jej w większości przypadków. Jest ona przeznaczona dla osób, które na widok kodu HTML nie łapią się za głowę, a mniej dla osób, które cenią sobie wygodę. Ponieważ tworzenie szablonu formularza jest dość – otwarte, nie mamy do dyspozycji żadnego edytora drag&drop. Co mi w zupełności odpowiada, lubię mieć kontrolę nad kodem, zwłaszcza gdy używam Bootstrapa do podstawowego stylowania formularza.

Dodatkowo wtyczka posiada zestaw hooków do pisania własnych pół formularzy co jest bardzo przydatne, przykład z życia: Można dodać shortcode z polem dropdown dla kategorii wpisów, gdy stanowią one kategorię produktów a formularz ma dać możliwość zapytania o konkretny produkt. Mógłbym oczywiście stworzyć dropdown i ręcznie wypisywać w nim opcje, ale przy użyciu dodatkowego modułu nie trzeba pamiętać o ręcznym dodawaniu nowych kategorii do listy rozwijanej.

Konfiguracja

Bywa tak, że hosting zabrania korzystania z funkcji php mail, oraz wymaga autoryzacji smtp. Trzeba wtedy przekonfigurować wysyłanie CF7, jednak wtyczka ta nie posiada swoich ustawień tego typu. Należy się wspomóc dodatkowym narzędziem np. WP Mail SMTP, które dobrze działa z CF7. A dla tych którzy wyznają zasadę „im mniej wtyczek tym lepiej” też jest wyjście, akcja dodawana w pliku functions.php w folderze skórki:

Gdy SMTP działa a formularz nie.

Kiedy ostatnio ustawiałem smtp, zauważyłem, że maile z formularza CF7 w dalszym ciągu nie chcą się wysyłać, a testowe maile z wtyczki wp mail smtp działały.

Szybki research doprowadził mnie do tego wątku na stronie wordpress.org, oraz do rozwiązania, które po lekkiej modyfikacji pomogło. W takim przypadku należy zwrócić uwagę na wersję wtyczki (w moim przypadku 4.1.1), którą posiadamy, ponieważ rozwiązanie na forum było umieszczone 4 lata temu. Struktura plików i nazwy funkcji trochę się pozmieniały. Dla mojej wersji w pliku wtyczki, znajdującym się w includes/mail.php w funkcji compose() trzeba znaleźć i zamienić:

$headers = "From: $sender\n";

na

$headers = "From $sender\n";

Zastanawia mnie tylko dlaczego od tylu lat ten drobiazg nie został poprawiony.