1. Forum używa plików Cookies. Dowiedz się więcej o celu ich używania i możliwości zmiany ustawień Cookies w przeglądarce. Czytaj więcej...

ROZWIĄZANE Funkcja mail() nie wysyła maili - łopatologicznie jak można...

Dyskusja w 'WordPress, Joomla!, PHP, HTML, CSS' rozpoczęta przez użytkownika watchdog, 8 Styczeń 2016.

  1. watchdog

    watchdog Nowy użytkownik

    Wiadomości:
    3
    Docenione treści:
    1
    Witam,

    przekopałem trochę ten internet, przekopałem wątki na forum, skontaktowałem się z pomocą i wszędzie dochodzę do tego samego punktu. Wiem, że mój serwis na Wordpressie nie wysyła maili do użytkowników, którym założę konto, a kiedy przy logowaniu wybieram opcję "nie pamiętam hasła" dostaję komunikat, że prawdopodobnie mam wyłączoną funkcję mail() - tutaj dodałem odpowiedź od home, że funkcja działa poprawnie, tylko muszę dodać piąty parametr do funkcji main(), czyli

    mail($to, $subject, $message, $headers, "-f poprawny_adres@domena.pl

    No dobra. Tyle, że przetrzepałem cały katalog wordpressa w poszukiwaniu takiego ciągu znaków (ograniczyłem się do początkowej części, czyli "mail($", ale nic takiego nie znalazłem. Wnioski są dwa. Albo szukałem w niewłaściwym miejscu (mogę przeszukać szablony strony, ale nie chce mi się wierzyć, aby to tam było, bo przy każdej zmianie szablonu musiałbym wprowadzać zmiany strony), albo podany ciąg znaków to tylko schemat ogólny, a u mnie może to wyglądać inaczej.

    Mam samego Wordpressa, nie mam Contact Form, ani nic innego. Czy ktoś mógłby mi łopatologicznie wytłumaczyć, w którym miejscu znaleźć tę funkcję? Wiem, że pytanie jest z tych lamerskich, ale CMSy to dla mnie nowość, a pracuję nad serwisem od początku i jestem tam administratorem, grafikiem, tekściarzem, sprzątaczem, chłopcem do wklepywania itd. Roboty jest dla kilku osób, a czasu brakuje... Powoli rozwiązuję kolejne problemy i oswajam się z tym wszystkim, ale wszystko to idzie dość siermiężnie...
     
  2. Stau

    Stau Majster

    Wiadomości:
    340
    Docenione treści:
    98
    W ciemno piszę. Spróbuj znaleźć taki ciąg:

    if ( $message && !wp_mail( $user_email, wp_specialchars_decode( $title ), $message, "From: nazwa@domena.pl\r\n", "-f nazwa@domena.pl" ) )
     
  3. watchdog

    watchdog Nowy użytkownik

    Wiadomości:
    3
    Docenione treści:
    1
    niech Ci bozia w dzieciach wynagrodzi dobry człowieku :D rozwiązałeś mój problem, szkoda, że zrodziły się przez to nowe :(

    Potwierdziły się moje obawy, że zmiana tego parametru spowoduje poprawienie błędu tylko w miejscu wystąpienia, czyli w momencie, kiedy użytkownik prosi o przypomnienie hasła. Czy jest jakiś sposób na automatyzację tego procesu?

    edit:

    skorzystałem z wtyczki WP mail SMTP. Konfiguracja prosta, a rozwiązała wszystkie problemy.



    Gdyby kogoś to interesowało:

    W moim przypadku chodziło o ciąg znajdujący się w pliku wp-login.php:

    if ( $message && !wp_mail( $user_email, wp_specialchars_decode( $title ), $message ) )

    gdzie trzeba było dodać:

    if ( $message && !wp_mail( $user_email, wp_specialchars_decode( $title ), $message, "From: nazwa@domena.pl\r\n", "-f nazwa@domena.pl" ) )
     
    Ostatnia modyfikacja: 8 Styczeń 2016
    Mariusz lubi to.
  4. zHp

    zHp Zaglądacz

    Wiadomości:
    12
    Docenione treści:
    0
    Jest prostsze rozwiązanie które podsuną mi kiedyś helpdesk home.pl
    Trzeba założyć dodatkowe konto mailowe w domenie. Nie pamiętam szczegółów, ale za każdym razem jak zakładam subdomene dodaje maila wordpress@subdomena i maile pod WP śmigają aż miło. Podobno działa i pod innymi cmsami.
    Lub doinstalować https://pl.wordpress.org/plugins/wp-smtp/ i skonfigurować.
     
  5. Grzesiek

    Grzesiek Centrum Pomocy home.pl Administrator forum

    Wiadomości:
    3 564
    Docenione treści:
    325
    Tak, w/w rozwiązanie działa, gdyż warunkiem poprawnej wysyłki wiadomości za pomocą funkcji mail, z serwera w home.pl, jest podanie w jej konfiguracji adresu nadawcy, który jest adresem pochodzącym z tego serwera. Wordpress domyślnie tworzy sobie adres wordpress@...

    Rozwiązanie to, chociaż wymaga jednej dodatkowej konfiguracji (dodanie konta e-mail) zabezpiecza skutecznie serwer, przed nieautoryzowaną wysyłką wiadomości, realizowaną np. przez złośliwe skrypty. Podobne zabezpieczenie, chociaż bardzo proste, działa u wielu hostingodawców, opierając się właśnie o uniemożliwienie wysyłki spamu za pomocą funkcji mail.

    Biorąc pod uwagę czas oraz "oczekiwania" po stronie serwerów adresatów, najskuteczniejsza jest jednak wysyłka za pomocą protokołu SMTP, która dodatkowo pozostawia sporo "śladów" w logach i na swój sposób jest w pełni kontrolowana.
     
  6. LorK

    LorK Przyjaciel forum Beta-tester

    Wiadomości:
    1 013
    Docenione treści:
    88
    ja do WP napisałem sobie plugin, który rozwiązuje mi ten problem.

    PHP:
    <?php
    /**
    * Plugin Name: LORK-Header From Mail Fix
    * Description: Ustawia nagłówek From dla mail(). Jako adres ustawiana jest wartość podana w Ustawienia -> Ogólne -> Adres e-mail.
    * Version: 1.2
    * Author: LORK
    */

    defined('ABSPATH') or die("No script kiddies please!");

    /*
    *  Adds a filter to append the default mail From header.
    */
    if ( ! function_exists('lork_mail_from_header')) {
        function 
    lork_mail_from_header() {
            return 
    esc_attrget_option('admin_email') );
        }
    }

    add_filter('wp_mail_from''lork_mail_from_header');
     
    Grzesiek i Mariusz lubią to.
  7. LorK

    LorK Przyjaciel forum Beta-tester

    Wiadomości:
    1 013
    Docenione treści:
    88
    Wczoraj zauważyłem jeden bug tego skryptu - nadpisuje on wszystkie 'wp_mail_from'. W przypadku np. formularza kontaktowego (który ustawia nadawcę jako adres wpisany w tym formularzu) spowoduje, iż "mail from" zostanie napdpisany wartością "admin_email".
     
  8. Grzesiek

    Grzesiek Centrum Pomocy home.pl Administrator forum

    Wiadomości:
    3 564
    Docenione treści:
    325
    Oferta handlowa:

    W ofercie home znajdziesz wiele usług, które mogą wpłynąć bezpośrednio na widoczność strony WWW, ale także jej pozycjonowanie, reklamę i bezpieczeństwo. Popularną usługą wpływającą na obecność stron WWW w sieci jest certyfikat SSL. Zapewni on bezpieczeństwo poczcie e-mail, a także zaszyfruje informacje przekazywane przez stronę WWW. Pamiętaj także o bezpieczeństwie urządzeń mobilnych:

     
  9. gielo2

    gielo2 Asystent

    Wiadomości:
    146
    Docenione treści:
    18
    Hostingi blokują czasem pewne funkcje pod kątem bezpieczeństwa. Co do twojego problemu to jest gotowa wtyczka już dla wp o nazwie Easy SMTP Mail . Proponował bym jej użyć zamiast kombinować samemu. Wtyczka jest nierozwijana od 3 lat jednak działa ona poprawnie.
     

Poleć forum znajomym