Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> polaczenie socketowe do smtp nie dziala?
Alek
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 25.06.2003
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


Witam

Wiem ze bylo juz sporo na temat seryjnego wysylania maili, w archiwum kopalem mocno i gleboko:). Przerobilem troche skrypt pochodny od tego z phpBB (byl wklejany kiedys tu).
Problemem jest to ze wysyla pieknie pierwszego maila z listy, ale niestety zadnego wiecej. Zrobilem wyrzucanie na ekran calego dialogu z serwem SMTP, stamtad widac, ze po pierwszym QUIT (odpowiedz 221) juz nic serwer nie odpowiada.
Co moze byc przyczyna?
Jesli nie da rady w ten sposob to moze w jakis inny? (probowalem funkcji mail(), oczywiscie napotkalem te powszechne trudnosci zwiazane z duza iloscia maili).
Parametry: plik 1.txt zawiera w kolejnych liniach kolejne maile, plik .php3 dostaje dane(tresc,temat) z formularza html, wysylam to kompa(win89,apache1.3,php4.0.5) w LANie. Admin serwera SMTP mowi ze moja podsiec nie ma zadnych blokad na tym serwerze SMTP.
Mysle ze dosyc wyczerpujace wyjasnienia, ponizej nieposluszny;) skrypt:

[php:1:5059185e43]<?php
function server_parse($socket) {
$server_response=fgets($socket,256);
$res=substr($server_response,0,3);
if($res>=400) die('Problem z wysyłaniem. '.$server_response);
print("$server_response<BR>");
}

$fp=fopen("1.txt","r");
$plik=fread($fp,filesize("1.txt"));
$adresaci=split("n",$plik);
fclose($fp);

$wyslano=0;
$smtp_host = 'mail.ic.net.pl';
$email = 'infopap@infopap.pl';

while($adresat=each($adresaci)) {
$socket=pfsockopen($smtp_host,25); if(!$socket) echo "Nie mogę się połączyć z SMTP";
server_parse($socket);
$adresat[value]=trim($adresat[value]);
fputs($socket, 'HELO '.$smtp_host."rn"); server_parse($socket);
fputs($socket, 'MAIL FROM: <'.$email.">rn"); server_parse($socket);
fputs($socket, 'RCPT TO: <'.$adresat[value].">rn"); server_parse($socket);
fputs($socket, 'DATA'."rn"); server_parse($socket);
$naglowek = "MIME-Version: 1.0rnContent-type: text/html; charset=iso-8859-2rn";
$naglowek .= "Subject: $tematrn";
$naglowek .= "To: $adresat[value] <$adresat[value]>rn";
fputs($socket, "$naglowekrnrn");
fputs($socket, "$trescrn");
fputs($socket, ".rn"); server_parse($socket);
fputs($socket, "QUITrn"); server_parse($socket);
$wyslano++;
fclose($socket);
}
print("Wyslano $wyslano maili");
?>[/php:1:5059185e43]
Go to the top of the page
+Quote Post
lisu
post
Post #2





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 25.01.2003
Skąd: mazury, wawa

Ostrzeżenie: (0%)
-----


Moze nie dawaj komendy QUIT tylko wysylaj jednym socketem. Przed chwila sprawdzilem telnetem i dziala.


--------------------
--
Carpe Diem
Go to the top of the page
+Quote Post
Alek
post
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 25.06.2003
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


wielkie dzieki, dziala biggrin.gif
a tak jeszcze z ciekawoscie sie spytam: dlaczego nie moglem tego wyslac otwierajac i zamykajac socket za kazdym wysylanym mailem?

pozdrawiam
Alek
Go to the top of the page
+Quote Post
evo
post
Post #4





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 4.02.2003

Ostrzeżenie: (0%)
-----


dlaczego nie wyslesz wszystkich mailow z naglowkiem BCC?
wysylasz raz,nie meczysz serwera HTTP a wszystkim zajmie sie serwer SMTP
Go to the top of the page
+Quote Post
foe
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 26.08.2003

Ostrzeżenie: (0%)
-----


a moglby ktos napisac jak trzeba by zmienic skrypt by uzyc smtp ktore trzeba uwierzytelniac haslem? dzieki z gory


--------------------
..::tHe FoE::..
Go to the top of the page
+Quote Post
adwol
post
Post #6





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
a moglby ktos napisac jak trzeba by zmienic skrypt by uzyc smtp ktore trzeba uwierzytelniac haslem? dzieki z gory

Zamień:
[php:1:b48ad0cd8b]<?php
fputs($socket, 'HELO '.$smtp_host."rn");
server_parse($socket);
?>[/php:1:b48ad0cd8b]
na
[php:1:b48ad0cd8b]<?php
fputs($socket, 'EHLO '.$smtp_host."rn");
server_parse($socket);
fputs($socket, 'AUTH PLAIN ' . base64_encode("$user$password") . "rn");
server_parse($socket);
?>[/php:1:b48ad0cd8b]
oraz popraw funkcje server_parse tak by przyjmowała wielolinijkowe odpowiedzi od serwera.
W przypadku takich odpowiedzi wszystkie linie za wyjątkiem ostatniej są postaci:
Kod
xyz-tekst

a ostatnia
Kod
xyz tekst

gdzie xyz to 3-cyfrowy kod odpowiedzi.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 07:01