Wysyłanie maila przestało działać w jednej z aplikacji

0

Dzień dobry.

Mam kilka aplikacji ze skonfigurowanym tym samym adresem email. Z niewiadomych powodów na jednej z apek przestał działać request z wysyłaniem poczty. Na innych apkach, gdzie jest identyczny config email, wszystko działa. A tu:

Swift_TransportException
Connection to tcp://mail.***.***:465 Timed Out
http://127.0.0.1:8000/my-route

Co może powodować taki błąd? Sprawdziłem, że config .env jest taki sam

Dzięki
M.

1

sprawdź połączenie z "mail..:465"

ping w sumie niewiele mowi

lepiej uzyc telnet
albo openssl s_client -connect mail.xxx.com:465

jezeli to jest doker to testy robisz w kontekscie dokera

0

A co powinen zwrócić telnet / openssl? Telnet nie odpowiada a openssl zwrócił całą stronę danych...

0

openssl wyswietla ceryfikat, potem masz komunikat w ktorym serwer sie przedstawia i mozesz wpisac komendy np. EHLO test.com
w odpowiedzi dostajesz np.

250-mail.xxx.com
250-PIPELINING
250-SIZE 51200000
250-ETRN
250-AUTH 
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 CHUNKING

itd.

0
EHLO mail.**
250-**.pl Hello **.eu [***.***.***.***]
250-SIZE 104857600
250-8BITMIME
250-PIPELINING
250-PIPECONNECT
250-AUTH PLAIN LOGIN
250 HELP

Mam taką opdowiedź na EHLO. Co mi to daje? 🤔

0

Aha. No to ponawiam pytanie.

Mam Laravel 8.x na php7.4. Wysyłanie maili działało na tej instancji, inne aplikacje mają ten sam mail i działają (wysyłają maile). A ja dostaję timeout. Co mogło pójść nie tak?

Config .env identyczny

0

To czym się różnią te serwery? Może na tym jednym masz np. zablokowany port 465 na firewall.
Spróbuj użyć telnet do sprawdzenia.
np.

telnet mail.net 465

Powinieneś dostać: connection refused czyli serwer odrzucił połączenie.
Jeśli otrzymasz coś innego to najwyraźniej coś nie tak w konfiguracji serwera i np. firewalla.

0

To nie są serwery zewnętrzne, uruchamiam je lokalnie na localhost przez php artisan serve

Kod wywala się na linii:

Mail::to($request->email)->send(new SendSuccess($output));

A Exception jest tu:

// plik vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:475
protected function getFullResponse($seq)
{
    $response = '';
    try {
        do {
            $line = $this->buffer->readLine($seq);
            $response .= $line;
        } while (null !== $line && false !== $line && ' ' != $line[3]);
    } catch (Swift_TransportException $e) {
        $this->throwException($e);
    } catch (Swift_IoException $e) {
        $this->throwException(new Swift_TransportException($e->getMessage(), 0, $e)); // <-----
    }

    return $response;
}
0

Szukaj więc różnicy.
Tak ciężko zgadnąć.
Na localhost masz ten sam PHP dla wszystkich aplikacji?
W php.ini nie masz czegoś innego?
Wersje paczek w tym switmailer są te same w composer.lock?
Może jednak masz jakieś różnice w tych env lub w config tam gdzie masz default values.

0

Ja pierniczę, pewnie jest jakiś drobny błąd którego teraz będę szukać do nowego roku. Ew. mogę postawić nową instancję i dokładać plik po pliku i patrzeć kiedy się popsuje...

0

Ale po co.
Zrób sobie testowy kontroler i w nim wywołuj tylko funkcje mail dla testu.
Wyprintuj sobie config przed wysłaniem maila.
Coś takiego chyba zadziała:

dump(Config::all());

Porównaj pliki konfiguracyjne.
Użyj debuggera i zobacz co masz inaczej przy takim setupie na działającej aplikacji.

2

Znalazłem błąd. Arghhhh, okazuje się, że w Laravel 8.x, w .env linijkę:

MAIL_ENCRYPTION=tls

trzeba zmienić na:

MAIL_ENCRYPTION=ssl

Dzięki

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.