PHP funkcja mail() na IIS WS2012

A extension_dir z phpinfo(); pokazuje na jakiś konkretny folder? Ten z tymi dll’kami?

W katalogu na który wskazuje extension_dir znajduje się tylko php_openssl.dll
Pozostałe dll’ki znajdują się w katalogu wyżej…

Chyba jest lepiej :stuck_out_tongue:

Bieżący błąd:

SMTP ERROR: Failed to connect to server: (0)

To nie wina firewalla, bo go wyłączałem

Próbuje wysłać z gmaila. Konfiguracja w pliku “contact.php”:

$mail->SMTPDebug = 2;                                 // Enable verbose debug output
$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'moj.mail@gmail.com';                 // SMTP username
$mail->Password = 'hasło!!';                           // SMTP password
$mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465;                                    // TCP port to connect to
	$mail->setLanguage('pl', '/phpmailer/language');

I w pliku php.ini:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = smtp.gmail.com
; http://php.net/smtp-port
smtp_port = 25

Zmiana portu w php.ini nic nie daje.
Pomysły?

Zobacz https://stackoverflow.com/questions/16048347/send-email-using-gmail-smtp-server-through-php-mailer
Dwa pomysły stamtąd:

  1. You could try changing $mail->SMTP to: $mail->SMTPSecure = 'tls';
  2. Also make sure you don’t have two step verification switched on for that account as that can cause problems also.

Nie mam 2 stopniowej weryfikacji…

A po zmianie na tls, taki błąd:

2017-12-13 13:16:21 SERVER -> CLIENT:
2017-12-13 13:16:21 SMTP NOTICE: EOF caught while checking if connected
SMTP Error: Could not connect to SMTP host.
SMTP Error: Could not connect to SMTP host.
Message could not be sent.Mailer Error: SMTP Error: Could not connect to SMTP host.

Jeszcze port trzeba skorygować (nie napisałem o tym), dla tls 587, dla ssl 465

No… Teraz fajny komunikat błędu…

2017-12-13 13:50:54 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP b67sm335172lfh.30 - gsmtp
2017-12-13 13:50:54 CLIENT -> SERVER: EHLO mojastrona.eu
2017-12-13 13:50:55 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [IP]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
2017-12-13 13:50:55 CLIENT -> SERVER: STARTTLS
2017-12-13 13:50:55 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
SMTP Error: Could not connect to SMTP host.
2017-12-13 13:50:55 CLIENT -> SERVER: QUIT
2017-12-13 13:50:55
2017-12-13 13:50:55
SMTP Error: Could not connect to SMTP host.
Message could not be sent.Mailer Error: SMTP Error: Could not connect to SMTP host.

Sprawdź jeszcze Troubleshooting Guide , nie będę kopiował stamtąd rzeczy, a jest kilka propozycji które mogłyby pomóc (także dotyczące gmaila)

Nie podoba mi się ta linijka z błędem:

2017-12-13 13:50:54 CLIENT -> SERVER: EHLO mojastrona.eu

pokaż cały kod wysyłki maila.
Druga rzecz to czy poprawnie masz skonfigurowanego konto na gmailu. Domyślnie nie da się wysyłać/odbierać maili z konta na gmailu niż przy użyciu ich klienta na telefon lub klienta webowego. Trzeba ręcznie włączyć imap i smtp na koncie. W Twoim przypadku wystarczy sam smtp.

PS. Nie mogłeś się połączyć na porcie 25 nawet w przypadku wyłączonego firewalla ponieważ prawdopodobnie ten port blokuje Twój dostawca internetu. Poza tym to że wyłączyłeś firewall na komputerze niewiele daje bo drugi jest na routerze, a trzeci u Twojego dostawcy internetu.

W tej chwili pomijam capche i pobieranie danych z formularza, bo to nie jest problematyczne. A jedynie pod przycisk “wyślij” mam podpięty plik contact.php w którym wszystko jest wpisane na sztywno. Wygląda tak:

<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

//Load composer's autoloader
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';

$mail = new PHPMailer(true);                              // Passing `true` enables exceptions
try {
    //Server settings
    $mail->SMTPDebug = 2;                                 // Enable verbose debug output
	$mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'moj.adres@gmail.com';                 // SMTP username
    $mail->Password = 'haslo';                           // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
	//$mail->SMTPSecure = 'ssl';
    $mail->Port = 587;                                    // TCP port to connect to
	$mail->setLanguage('pl', '/phpmailer/language');
    //Recipients
    $mail->setFrom('moj.adres@gmail.com', 'Mailer');
    $mail->addAddress('moj.adres@gmail.com', 'Joe User');     // Add a recipient

    //Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
}
?>

Jak wracam na SSL wywala dalej ten sam błąd:

2017-12-14 07:35:33 SMTP ERROR: Failed to connect to server: (0)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Message could not be sent.Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Nie miałem włączonego pop3, już włączyłem. Błędy bez zmian.
Imap mam włączny od dawna, bo z thunderbirda kiedyś korzystałem…

A spróbuj użyć 1:1 przykładu z ich githuba: https://github.com/PHPMailer/PHPMailer/blob/master/examples/gmail.phps

Może jeszcze kolejność gdzieś jest nie taka jak trzeba…

Zmieniasz też przy tym port?

To go wyłącz POP3 jest przestarzałym protokołem i w niczym nie jest Ci tutaj potrzebny.

Jakie błędy masz dla dokładnie tego kodu jaki załączyłeś? Czy dla konta masz włączoną podwójną weryfikację czy nie?

Tak, zmieniam porty.

Nie ma smtp na googlach (tylko imap i pop3), więc włączyłem pop3 zakładając że pop3 i smtp są powiązane.

dla tego kodu który załączyłem i przy włączonym tls:

2017-12-13 13:50:54 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP b67sm335172lfh.30 - gsmtp
2017-12-13 13:50:54 CLIENT -> SERVER: EHLO mojastrona.eu
2017-12-13 13:50:55 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [IP]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
2017-12-13 13:50:55 CLIENT -> SERVER: STARTTLS
2017-12-13 13:50:55 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
SMTP Error: Could not connect to SMTP host.
2017-12-13 13:50:55 CLIENT -> SERVER: QUIT
2017-12-13 13:50:55
2017-12-13 13:50:55
SMTP Error: Could not connect to SMTP host.
Message could not be sent.Mailer Error: SMTP Error: Could not connect to SMTP host.

przy tym samym kodzie i włączonym ssl:

2017-12-14 07:35:33 SMTP ERROR: Failed to connect to server: (0)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Message could not be sent.Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Oczywiście za każdym razem ustawiony odpowiedni port.

Sprawdzasz to na serwerze na IIS? Czy u siebie lokalnie?
Jeśli na serwerze - zainstaluj lokalnie XAMPPa i spróbuj to uruchomić. Uda się = problem leży w Twoim serwerze.
Jeśli się nie uda = problem leży w konfiguracji Google.

Po logach widać, że jest problem z odrzucaniem sesji przez serwer. Problemem może być:
a) brak openssl na serwerze - według tego co pisałeś jest i działa
b) konfiguracja konta gmail - https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#gmail-oauth2-and-allow-less-secure-apps lub po Polsku https://support.google.com/accounts/answer/6010255

Sprawdź jeszcze raz openssl czy jest ładowany przez php, a potem sprawdź czy masz ustawioną możliwość logowania z mniej bezpiecznych aplikacji do konta.
Generalnie dziwie się, że nie używasz do tego własnego serwera SMTP którego masz zainstalowanego … ale jak kto woli.

Dwa razy tak…;/

Wstaw zawartość pliku php.ini bo aż mi się wierzyć nie chce. W ogóle dziwie Ci się, że tyle czasu się z tym męczysz i masz możliwość by tyle czasu nie działał formularz na stronie. Zleciłbyś to komuś myślę, że za 50-100zł byś już dawno miał to zrobione.

EDIT:
Zawsze możesz ręcznie sprawdzić czy wszystko działa przy użyciu telnetu. To przynajmniej wykluczy dziwną konfigurację serwera lub sieci.
W ogóle na Twoim miejscu już dawno problem przekazałbym adminowi serwera. Bo to ewidentnie jest teraz problem z nawiązaniem komunikacji pomiędzy Twoim serwerem a Google, więc to działka admina.