Contact Form 7 i ustawienie SMTP

Wtyczka Contact Form to jedno ze sprawdzonych narzędzi do tworzenia formularzy. Sprawdza się w większości przypadków, kiedy potrzebny jest prosty formularz. Wtyczka przeznaczona jest 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. Potrzebuje mieć kontrolę nad kodem, zwłaszcza gdy używam Bootstrapa jako bazy do CSS.

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:

<?php
/*
* Set the following constants in wp-config.php.
* These should be added somewhere BEFORE the constant ABSPATH is defined.
*
* Author: Chad Butler
* Author URI: https://butlerblog.com
*
* For more information and instructions, see: https://b.utler.co/Y3
*/
define( 'SMTP_USER', 'user@example.com' ); // Username to use for SMTP authentication
define( 'SMTP_PASS', 'smtp password' ); // Password to use for SMTP authentication
define( 'SMTP_HOST', 'smtp.example.com' ); // The hostname of the mail server
define( 'SMTP_FROM', 'website@example.com' ); // SMTP From email address
define( 'SMTP_NAME', 'e.g Website Name' ); // SMTP From name
define( 'SMTP_PORT', '25' ); // SMTP port number - likely to be 25, 465 or 587
define( 'SMTP_SECURE', 'tls' ); // Encryption system to use - ssl or tls
define( 'SMTP_AUTH', true ); // Use SMTP authentication (true|false)
define( 'SMTP_DEBUG', 0 ); // for debugging purposes only set to 1 or 2
/**
* This function will connect wp_mail to your authenticated
* SMTP server. This improves reliability of wp_mail, and
* avoids many potential problems.
*
* Values are constants set in wp-config.php. Be sure to
* define the using the wp_config.php example in this gist.
*
* Author: Chad Butler
* Author URI: https://butlerblog.com
*
* For more information and instructions, see: https://b.utler.co/Y3
*/
add_action( 'phpmailer_init', 'send_smtp_email' );
function send_smtp_email( $phpmailer ) {
if ( ! is_object( $phpmailer ) ) {
$phpmailer = (object) $phpmailer;
}
$phpmailer->Mailer = 'smtp';
$phpmailer->Host = SMTP_HOST;
$phpmailer->SMTPAuth = SMTP_AUTH;
$phpmailer->Port = SMTP_PORT;
$phpmailer->Username = SMTP_USER;
$phpmailer->Password = SMTP_PASS;
$phpmailer->SMTPSecure = SMTP_SECURE;
$phpmailer->From = SMTP_FROM;
$phpmailer->FromName = SMTP_NAME;
}

SMTP działa, a formularz nie.

No dobrze, ustawiałem smtp. Ale zauważyłem, że maile z formularza CF7 w dalszym ciągu nie chcą się wysyłać, a testy z wtyczki wp mail smtp dochodzą prawidłowo.

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 contact-form-7/includes/mail.php w funkcji compose() trzeba znaleźć i zamienić:

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

na

$headers = "From $sender\n";

Dajcie znać czy rozwiązanie jest dalej aktualne! ?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *