Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%)
|
Witam,
Czy da się zrobić tak, aby osoba wizytująca stronę nie musiała oczekiwać na zakończenie wysyłanie maila przez skrypt php? Chodzi oto, aby wysłać maila w osobnym wątku np. powiadamiającego o błędzie na stronie albo też gdy klient złoży zamówienie to żeby nie musiał oczekiwać aż się maile powiadamiające powysyłają. Na jakie metody w php manual powinienem zwrócić uwagę, aby to uzyskać? Znacie jakiś tutek odnośnie tego tematu? Pozdrawiam |
|
|
|
![]() |
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 2 Dołączył: 2.03.2012 Skąd: Częstochowa Ostrzeżenie: (0%)
|
Zawsze, można zapisywać maila do jakiejś tablicy i pózniej cornem niezależnie sobie to przesyłać.
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%)
|
Można dać rozkaz do Crona z poziomu PHP?
|
|
|
|
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 2 Dołączył: 2.03.2012 Skąd: Częstochowa Ostrzeżenie: (0%)
|
Corn to usługa serwera on porusza jakis skrypt.
Czyli np co 10 min wysyła maile jeżeli 3 uzytkowników akurat chciało wysłać w tym czasie sobie maila to kazdy otrzyma go za ileś tam minut. |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%)
|
W sytuacji wysyłania błędów jest to dobre rozwiązanie, ale w sytuacji zamówienia jest bardzo złe. Mail ma zostać wysłany praktycznie natychmiast. Więc ma ktoś inny pomysł?
|
|
|
|
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%)
|
Masz jakieś rzeczywiste opóźnienia związane z wysłaniem pojedynczego maila do użytkownika w momencie złożenia zamówienia? To dosyć dziwna sytuacja. Wysłanie takiego maila powinno być praktycznie nieodczuwalne dla samego PHP. Sam serwer SMTP mógłby z jakiś tam powodów wstrzymać wysłanie wiadomości, ale to nie powinno blokować dalszego wykonywania skryptu. Mógłbyś opisać konfigurację serwera HTTP / SMTP?
Jeżeli jednak problem rzeczywiście istnieje to można go dosyć prosto rozwiązać. Daemon w PHP, który odczytuje z jakiejś bazy danych maile do wysłania i wysyła je. Mógłby to robić w właściwie dowolnych cyklach czasowych, np. co 5-20 sekund. Cron mógłby tu zostać użyty co najwyżej do wznawiania działania daemona, gdyby z jakiegoś powodu przestał działać (np. jakiś błąd albo restart serwera). Ten post edytował Crozin 6.03.2012, 13:26:04 |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%)
|
No jeden mail to nie problem.
Ale wysyłane są 3-4. Jeden informujący klienta, jeden informujący właściciela i tak dalej... No i wtedy czas oczekiwania to ok. 3-4 s przez co czasem niecierpliwi klikają co popadnie, bo myślą, że im się przeglądarka zawiesiła ^^ Zapytanie jest AJAXowe, i potrzebuje informacji z pliku PHP, więc nie może być asynchroniczne ;/ |
|
|
|
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%)
|
Wysłanie trzech czy czterech maili również nie powinno mieć specjalnego odbicia w czasie wykonywania skryptu, mógłbyś przedstawić pełną konfigurację swojego skryptu?
|
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 24.09.2009 Ostrzeżenie: (0%)
|
Wysyłam z pomocą PHPMailera łącząc się z kontem google. SMTPKeepAlive jest ustawiony na true.
Nie da się zrobić tak, że jeden skrypt .php uruchamia inny skrypt .php, nie czekając na wykonanie tego drugiego? Takie rozwiązanie byłoby najlepsze. |
|
|
|
Post
#10
|
|
|
Grupa: Zarejestrowani Postów: 677 Pomógł: 89 Dołączył: 31.08.2003 Skąd: Warszawa Ostrzeżenie: (0%)
|
Na unixowym systemie bez problemu:
Ten post edytował mls 6.03.2012, 14:17:08 -------------------- |
|
|
|
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%)
|
1. Mógłbyś przy pomocy profilera sprawdzić co tak na prawdę zajmuje tak dużo czasu - wtedy byłoby znacznie łatwiej znaleźć rozwiązanie.
2. Oczywiście, że można. Podałem już rozwiązanie z drugim skryptem działającym jako daemon w systemie. @mls: Tak długo jak to możliwe nie powinno się korzystać ze specyficznych dla systemu elementów. |
|
|
|
Post
#12
|
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 1 Dołączył: 8.05.2013 Ostrzeżenie: (0%)
|
Witam,
To mój pierwszy post, więc witam wszystkich serdecznie! Mam podobny problem, mianowicie nie wysyłają mi się maile, jeśli puszczę coś w 'tle'. Na unixowym systemie bez problemu: Właśnie tej funkcji używam, cały skrypt poza wysłaniem maila się wykonuje (odpisywanie danych do bazy itd...). Problemu nie ma, jeśli skrypt odpalę w przeglądarce, w tedy maile dochodzą. Ale takie odpalenie skryptu jest dość nie wygodne, ponieważ liczy on się w zależności od 'kodu raportu', czyli może się liczyć nawet godzinę... Ktoś miał podobny problem z wysyłaniem maila poprzez odpalenie skryptu poprzez 'exec'? |
|
|
|
Post
#13
|
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%)
|
To wpisz w konsoli:
Cytat php plikZkodemExec.php &
-------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
|
Post
#14
|
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 1 Dołączył: 8.05.2013 Ostrzeżenie: (0%)
|
To wpisz w konsoli: Nie mam niestety dostępu do konsoli ;/ Ogólnie sporo mam skryptów które się odpalają w innym wątku i się przeliczają w tle, ten też działa, dochodzi do końca, ale maila nie wysyła, no chyba że się odpali go w przeglądarce. A zapomniałem dodać, że jak odpalam skrypt normalnie w przeglądarce, to rzyga mi takkim komunikatem: Kod Deprecated: Function set_magic_quotes_runtime() is deprecated in /var/www/html/shd/class.phpmailer.php on line 1218 Warning: fread(): Length parameter must be greater than 0 in /var/www/html/shd/class.phpmailer.php on line 1219 Deprecated: Function set_magic_quotes_runtime() is deprecated in /var/www/html/shd/class.phpmailer.php on line 1222 Deprecated: Function eregi() is deprecated in /var/www/html/shd/class.phpmailer.php on line 592 Message has been sent No ale mail jest wysyłany... Oj chyba będzie z tym ciężko, popytam na jakichś zagranicznych forach, może pomogą Jak się uda, to dam znać. Zauważyłem, że odpalając procedurę w tle, zwraca następujący błąd: Kod Error: The following SMTP Error: Data not accepted.adres@mail.com Odświeżę temat, do tej pory nie znalazłem rozwiązania. Mam następujący log, może ktoś będzie wiedział w czym problem. Kod > SMTP -> get_lines(): $data was ""
> SMTP -> get_lines(): $str is "220 mx1.cyfrowypolsat.pl ESMTP Cyfrowy Polsat S.A. > " > SMTP -> get_lines(): $data is "220 mx1.cyfrowypolsat.pl ESMTP Cyfrowy Polsat S.A. > " > SMTP -> FROM SERVER: > 220 mx1.cyfrowypolsat.pl ESMTP Cyfrowy Polsat S.A. > SMTP -> get_lines(): $data was "" > SMTP -> get_lines(): $str is "250-mx1.cyfrowypolsat.pl > " > SMTP -> get_lines(): $data is "250-mx1.cyfrowypolsat.pl > " > SMTP -> get_lines(): $data was "250-mx1.cyfrowypolsat.pl > " > SMTP -> get_lines(): $str is "250-PIPELINING > " > SMTP -> get_lines(): $data is "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > " > SMTP -> get_lines(): $data was "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > " > SMTP -> get_lines(): $str is "250-SIZE 104857600 > " > SMTP -> get_lines(): $data is "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > " > SMTP -> get_lines(): $data was "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > " > SMTP -> get_lines(): $str is "250-ETRN > " > SMTP -> get_lines(): $data is "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > " > SMTP -> get_lines(): $data was "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > " > SMTP -> get_lines(): $str is "250-STARTTLS > " > SMTP -> get_lines(): $data is "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > 250-STARTTLS > " > SMTP -> get_lines(): $data was "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > 250-STARTTLS > " > SMTP -> get_lines(): $str is "250-AUTH PLAIN CRAM-MD5 LOGIN > " > SMTP -> get_lines(): $data is "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > 250-STARTTLS > 250-AUTH PLAIN CRAM-MD5 LOGIN > " > SMTP -> get_lines(): $data was "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > 250-STARTTLS > 250-AUTH PLAIN CRAM-MD5 LOGIN > " > SMTP -> get_lines(): $str is "250-AUTH=PLAIN CRAM-MD5 LOGIN > " > SMTP -> get_lines(): $data is "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > 250-STARTTLS > 250-AUTH PLAIN CRAM-MD5 LOGIN > 250-AUTH=PLAIN CRAM-MD5 LOGIN > " > SMTP -> get_lines(): $data was "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > 250-STARTTLS > 250-AUTH PLAIN CRAM-MD5 LOGIN > 250-AUTH=PLAIN CRAM-MD5 LOGIN > " > SMTP -> get_lines(): $str is "250-ENHANCEDSTATUSCODES > " > SMTP -> get_lines(): $data is "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > 250-STARTTLS > 250-AUTH PLAIN CRAM-MD5 LOGIN > 250-AUTH=PLAIN CRAM-MD5 LOGIN > 250-ENHANCEDSTATUSCODES > " > SMTP -> get_lines(): $data was "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > 250-STARTTLS > 250-AUTH PLAIN CRAM-MD5 LOGIN > 250-AUTH=PLAIN CRAM-MD5 LOGIN > 250-ENHANCEDSTATUSCODES > " > SMTP -> get_lines(): $str is "250-8BITMIME > " > SMTP -> get_lines(): $data is "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > 250-STARTTLS > 250-AUTH PLAIN CRAM-MD5 LOGIN > 250-AUTH=PLAIN CRAM-MD5 LOGIN > 250-ENHANCEDSTATUSCODES > 250-8BITMIME > " > SMTP -> get_lines(): $data was "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > 250-STARTTLS > 250-AUTH PLAIN CRAM-MD5 LOGIN > 250-AUTH=PLAIN CRAM-MD5 LOGIN > 250-ENHANCEDSTATUSCODES > 250-8BITMIME > " > SMTP -> get_lines(): $str is "250 DSN > " > SMTP -> get_lines(): $data is "250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > 250-STARTTLS > 250-AUTH PLAIN CRAM-MD5 LOGIN > 250-AUTH=PLAIN CRAM-MD5 LOGIN > 250-ENHANCEDSTATUSCODES > 250-8BITMIME > 250 DSN > " > SMTP -> FROM SERVER: > 250-mx1.cyfrowypolsat.pl > 250-PIPELINING > 250-SIZE 104857600 > 250-ETRN > 250-STARTTLS > 250-AUTH PLAIN CRAM-MD5 LOGIN > 250-AUTH=PLAIN CRAM-MD5 LOGIN > 250-ENHANCEDSTATUSCODES > 250-8BITMIME > 250 DSN > SMTP -> get_lines(): $data was "" > SMTP -> get_lines(): $str is "334 VXNlcm5hbWU6 > " > SMTP -> get_lines(): $data is "334 VXNlcm5hbWU6 > " > SMTP -> get_lines(): $data was "" > SMTP -> get_lines(): $str is "334 UGFzc3dvcmQ6 > " > SMTP -> get_lines(): $data is "334 UGFzc3dvcmQ6 > " > SMTP -> get_lines(): $data was "" > SMTP -> get_lines(): $str is "235 2.7.0 Authentication successful > " > SMTP -> get_lines(): $data is "235 2.7.0 Authentication successful > " > SMTP -> get_lines(): $data was "" > SMTP -> get_lines(): $str is "250 2.1.0 Ok > " > SMTP -> get_lines(): $data is "250 2.1.0 Ok > " > SMTP -> FROM SERVER: > 250 2.1.0 Ok > SMTP -> get_lines(): $data was "" > SMTP -> get_lines(): $str is "554 5.7.1 : Helo command rejected: HELO lies, you are not localhost.localdomain > " > SMTP -> get_lines(): $data is "554 5.7.1 : Helo command rejected: HELO lies, you are not localhost.localdomain > " > SMTP -> FROM SERVER: > 554 5.7.1 : Helo command rejected: HELO lies, you are not localhost.localdomain > SMTP -> ERROR: RCPT not accepted from server: 554 5.7.1 : Helo command rejected: HELO lies, you are not localhost.localdomain > > SMTP -> get_lines(): $data was "" > SMTP -> get_lines(): $str is "554 5.7.1 : Helo command rejected: HELO lies, you are not localhost.localdomain > " > SMTP -> get_lines(): $data is "554 5.7.1 : Helo command rejected: HELO lies, you are not localhost.localdomain > " > SMTP -> FROM SERVER: > 554 5.7.1 : Helo command rejected: HELO lies, you are not localhost.localdomain > SMTP -> ERROR: RCPT not accepted from server: 554 5.7.1 : Helo command rejected: HELO lies, you are not localhost.localdomain > > SMTP -> get_lines(): $data was "" > SMTP -> get_lines(): $str is "250 2.0.0 Ok > " > SMTP -> get_lines(): $data is "250 2.0.0 Ok > " > SMTP -> FROM SERVER: > 250 2.0.0 Ok > Message could not be sent. Mailer Error: SMTP Error: The following recipients failed |
|
|
|
![]() ![]() |
|
Aktualny czas: 20.08.2025 - 02:37 |