Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

OT? SMTP Error: The following recipients failed: xxx@wp.pl DLACZEGO?

24 views
Skip to first unread message

Koteczek

unread,
Nov 7, 2010, 6:47:35 PM11/7/10
to
Pytanie zapewne z pogranicza grupy, ale zaryzykuje.

Jest sobie skrypt integrujacy systemy platnosci (wszystkie popularne). Skrypt
wysyla takze maila do osoby ktora cos kupila jak i do tej co wlasnie cos
sprzedala. Jako ze czasami maile nie dochodzily (albo do spamu) to uzytko PHP
Mailer. Problem "could not connect" (cos na lini hosting-serwer mail, bywa)
ktory zdazal sie raz na 100 polaczen rozwiazalem w ten sposob ze:

try {
php_mailer_send_mail(...);
}
catch {
die('error');
}

Czyli robie die() w ten sposob by system platnosci sprobowal powiadomic mnie
ponownie o udanej (lub nie) oplacie gdy tylko mam problem z wyslaniem maila.
Robiac die "error" informuje system zewnetrzny ze nie przyjalem komunikatu i
prosze o ponowna probe za jakis czas. Rozwiazalem w ten sposob obsluge
wszelkich bledow (mail, baza itd) i zrzucilem ponowna robote na dopracowane i
profi systemy platnosci. Ale czasami jest taki problem ze:

'SMTP Error: The following recipients failed: x...@wp.pl'

Wywolanie php mailera przy wysylaniu na ma...@wp.pl konczy sie takim
komunikatem... co powoduje ze ja robie die() a system platnosci w
nieskonczonosc (no do 100x) bedzie sie ze mna laczyl i znow go odesle "na
manowce" poniewaz jest to staly blad i samo sie nic nie naprawi. Co ciekawe php
mailer wysyla w tym przypadku maile przez konto na wp.pl z autoryzacja. Takze
rozumiem ze tylko w tym przypadku, jesli wysylam przez konto na wp.pl i mail
jest takze kierowany do wp.pl - a takiego konta nie ma tam - dostane taki blad?
Jak proponujecie to rozwiazac inaczej? Moze sprawdzenie komunikatu w sekcji
"catch{}" na wypadek slow "following recipients" i wtedy nie robie "die()" ale
koncze skrypt poprawnie tak by system platnosci juz wiecej do mnie nie
"zagadal"? Serwery mail moga byc rozne, nie wiem czy taki komunikat jest
zunifikowany a moze inny deamon mail odpowie "sorry there is no xxx here, go
home man"? Czy ww. komunikat nie ma jakiegos kodu ala "404" i da sie do tego
dobrac przez phpmailer?

Normlanie, gdy klient podal zly mail, wszystko sie pieknie wysyla a ja po
jakims czasie dostaje zwyklego maila "delivery failed bla bla bla". A tu jak
dobrze rozumiem ze mam od razu sprawdzana mozliwosc doreczenia, jeszcze w
czasie sesji pop3, bo to ten sam serwer nadawczy i odbiorczy. Nie da sie jakos
zapobiedz "wykrzaczeniu" php mailera, tak abym od demona mail wp.pl dostal po
prostu maila informujacego o problemie z poczta zamiast "krotkiej pilki" ktora
w obecnym skrypcie traktuje na rowni z bledem autoryzajci, polaczenia, timeout
itp?

S

unread,
Nov 8, 2010, 5:50:53 AM11/8/10
to
Dnia Mon, 8 Nov 2010 00:47:35 +0100, Koteczek napisał(a):


> Jest sobie skrypt integrujacy systemy platnosci (wszystkie popularne). Skrypt
> wysyla takze maila do osoby ktora cos kupila jak i do tej co wlasnie cos
> sprzedala. Jako ze czasami maile nie dochodzily

> [...]

> Jak proponujecie to rozwiazac inaczej?

Zalozyc sobie poczte gdzie indziej? Ja to bym unikal uslugodawcow
zwiazanych z "platnosciami", ktorych nie stac nawet na "normalna" skrzynke
i podejrzewam, ze wielu potencjalnych klientow ma podobny stosunek do
takiej amatorszczyzny.

Koteczek

unread,
Nov 8, 2010, 6:17:39 AM11/8/10
to
> Zalozyc sobie poczte gdzie indziej? Ja to bym unikal uslugodawcow
> zwiazanych z "platnosciami", ktorych nie stac nawet na "normalna"
> skrzynke i podejrzewam, ze wielu potencjalnych klientow ma podobny
> stosunek do takiej amatorszczyzny.

Zle interpretujesz, klient chce korzystac z maila swojego na wp i nie chce
drugiego, przez jego maila wiec system wysyla mu i klientowi informacje _przez
wp.pl_ i to dziala, uwierz mi. Potrzebuje wyciagnac numeryczny kod bledu ala
550. Jak wyszukalem w zrodlach to opis slowny pochodzi z kodu phpmailera i moze
byc rozny w zaleznosci od wybranej wersji jezykowej...

I jesli bedzie to blad typu nie ma takiej skrzynki, od razu uzyskiwany na
poziomie sesji smtp to zignoruje to (bo i tak nic z tym dalej zrobic sie nie
da, maila poprawnego przeciez nie wywroze). Oczywiscie mozna zalozyc skrzynke
na innym serwerze ale jesli znow ktos poda maila z tego innego serwera to przy
wysylaniu znow od razu dostane fatalny blad.

Czyli jeszcze raz - jak wyciagnac z phpmailera numerycznie kod bledu typu 550 ?
==================

Borys Pogoreło

unread,
Nov 8, 2010, 6:29:06 AM11/8/10
to
Dnia Mon, 8 Nov 2010 00:47:35 +0100, Koteczek napisał(a):

> jest takze kierowany do wp.pl - a takiego konta nie ma tam - dostane taki blad?
> Jak proponujecie to rozwiazac inaczej? Moze sprawdzenie komunikatu w sekcji
> "catch{}" na wypadek slow "following recipients"

Od tego masz kody liczbowe SMTP. Nie wkleiłeś wszystkiego.

> prostu maila informujacego o problemie z poczta zamiast "krotkiej pilki" ktora
> w obecnym skrypcie traktuje na rowni z bledem autoryzajci, polaczenia, timeout
> itp?

Uzależnianie mechanizmu płatności od wyniku działania wysyłki poczty jest,
delikatnie mówiąc, mało rozsądne. Zwłaszcza w sposób jaki tu opisałeś -
obciążając niepotrzebnie drugą stronę.

--
Borys Pogoreło
borys(#)leszno,edu,pl

Koteczek

unread,
Nov 8, 2010, 7:39:50 AM11/8/10
to
>
> Od tego masz kody liczbowe SMTP. Nie wkleiłeś wszystkiego.
>

Obawiam sie ze w standardowym komunikacie tej klasy kodu liczbowego nie ma a to
jest mi potrzebne...

> Uzależnianie mechanizmu płatności od wyniku działania wysyłki poczty
> jest, delikatnie mówiąc, mało rozsądne. Zwłaszcza w sposób jaki tu
> opisałeś - obciążając niepotrzebnie drugą stronę.

Nie jest idealne, wiem, ale inaczej musialbym sobie zachowac status +
informacje ze poczta nie wyszla w bazie, zabawy ze skryptami w cronie itd, po
co komplikowac? A jak baza nie dziala (a bywa ze jest raz na rok 'connection
lost' nie wiadomo skad) to gdzie zapisze? Od tego jest opcja nie przyjecia
komunikatu od drugiej strony, paypal np czeka na http 200 (tresc
odpowiedzi-komunikatu nie ma znacznia) i rozumie to za 'przyjalem i obsluzylem
komunikat w 100%'. A polskie systemy czekaja na slowo "OK", jesli bedzie echo
"error bla bla" to uznaja to za porazke z mojej strony i ponowia proba za
minute (czyli olewaja status http, liczy sie tylko tresc komunikatu z mojej
strony).

Maile z definicji dzialaja raczej niezawodnie i pady sa bardzo spodaryczne, mam
to zabezpieczone od mojej strony wlasnie owym die('error')+http 500. Ale ten
problem - smtp 550 error, tu juz nic nie pomoze! Czekanie i 1000minut takze nie
pomoze (a jesli sa bledy polaczenia IP z smtp to za 20minut raczej bedzie
dzialac bez problemu) bo mamy zlego maila i chce zakonczyc skrypt poprawnie, a
mi sie wali bo mam catch{} a tam die()... i system platnosci bedzie do upadlego
wracal, znow skrypt nie obsluzy bo maila takiego na wp.pl NIE ma itd

Tak wiec die() bedzie wylacznie jak blad smtp bedzie inny niz 550, tylko skad
brac numeryczny blad?! getMessage() ani getCode() nic nie pomagaja, brak
numerku.

Obecnie die() powoduje ze nawet w bazie nie zapisze sie u mnie stautus
platnosci, to musze przerobic - najpierw zapisanie statusu w bazie a pozniej
wysylanie maili. Gdy mailowanie spali na panewce to i tak w bazie bede miec juz
aktualny status transakcji o te kilka minut wczesniej niz sie popranwie wysla
maile.

Do tej pory bylem z mojego skryptu zadowolony. Zobacz jakie bledy moga byc przy
wysylaniu glupiego maila:

29-08-2010 19:45:53 [IP:91.207.15.12] [error]: mailer - SMTP Error: Data not
accepted., die at 359
20-10-2010 15:24:27 [IP:91.207.15.12] [error]: mailer - SMTP Error: Data not
accepted., die at 359
21-10-2010 15:52:38 [IP:91.207.15.12] [error]: mailer - SMTP Error: Data not
accepted., die at 552
27-10-2010 15:00:07 [IP:91.207.15.12] [error]: mailer - SMTP Error: The
following recipients failed: b...@wp.pl, die at 552
07-11-2010 23:45:10 [IP:91.207.15.12] [error]: mailer - SMTP Error: Could not
authenticate., die at 519
08-11-2010 00:45:11 [IP:91.207.15.12] [error]: mailer - SMTP Error: The
following recipients failed: b...@wp.pl, die at 519
[ i tu bardzo duzo z tym bds@wp ... ]
08-11-2010 09:45:19 [IP:91.207.15.12] [error]: mailer - SMTP Error: The
following recipients failed: b...@wp.pl, 0, die at 519
08-11-2010 10:45:20 [IP:91.207.15.12] [error]: mailer - SMTP Error: The
following recipients failed: b...@wp.pl, 0, die at 519
[...]

Data not accepted "z dupy" blad za przeproszeniem, ponowe polaczenie tego
samego skryptu za minute i juz ok. Ale blad zostal wylapany i problem
rozwiazany. Tak samo blad autentykacji 7 listopada - tez blad "z dupy" wziety,
serwer nagle przy tych samych danych login/pass stwierdzil ze cos mu nie
pasuje? Ale problem za minute juz nie istnial i maile poszlyyyyy w swiat.

04-10-2010 20:49:21 [IP:91.207.15.12] [error]: PayU - SSL read:
error:00000000:lib(0):func(0):reason(0), errno 104 (52) for order ORDER_ID, die
at 158
04-10-2010 20:50:21 [IP:91.207.15.12] [error]: PayU - SSL read:
error:00000000:lib(0):func(0):reason(0), errno 104 (52) for order ORDER_ID, die
at 158

A tu inne bledy, polaczenie z serwerem platnosci po ssl - raz na jakis czas
(sporadycznie, bardzo sporadycznie) cos sie nie udaje i klasa "CURL" tak
konczy, ja odmawiam obsluzenia polaczenia a za minute juz jest okay. Systemy
platnosci po to maja ten mechanizm "natarczywego dobijania sie" po to przeciez!
Ja mam chwilowa niedyspozycje i prosze o kontakt za chwile :)

No dobra, jak wyciagnac smtp error numeryczny?

Borys Pogoreło

unread,
Nov 8, 2010, 9:51:01 AM11/8/10
to
Dnia Mon, 8 Nov 2010 13:39:50 +0100, Koteczek napisał(a):

> Nie jest idealne, wiem, ale inaczej musialbym sobie zachowac status +
> informacje ze poczta nie wyszla w bazie, zabawy ze skryptami w cronie itd, po
> co komplikowac?

To nie jest komplikowanie, tylko prawidłowe rozwiązanie.

Mechanizm płatności interesuje, czy przyjąłeś prawidłowo status
transakcji, a nie czy wysłałeś maila do użytkownika. To są dwa zupełnie
niezależne zdarzenia.

Co jeśli poczta nie wyjdzie przez tydzień, bo serwer pocztowy akurat
zapragnął zastrajkować? Płatność nie zostanie przyjęta? Bez sensu.

> Maile z definicji dzialaja raczej niezawodnie

Bardzo odważne stwierdzenie. Ale jak widać jesteś świadom zawodności tej
usługi - dlaczego zatem na tym opierasz działanie mechanizmu płatności?

> Tak wiec die() bedzie wylacznie jak blad smtp bedzie inny niz 550, tylko skad
> brac numeryczny blad?! getMessage() ani getCode() nic nie pomagaja, brak
> numerku.

Zmień klasę do wysyłki poczty.

Dawno temu zarzuciłem PHPMailera, ale jeszcze mi się poniewiera po dysku.
Z tego co widzę, to w pliku class.smtp.php wszelkie błędy powodują
zwrócenie tablicy, gdzie z reguły występuje 'smtp_code'. Kwestia dobrania
się do tego.

--
Borys Pogoreło
borys(#)leszno,edu,pl

gmx...@ifydym.com

unread,
May 22, 2012, 4:52:25 PM5/22/12
to
0 new messages