Avatar billede svoeber Nybegynder
23. juli 2004 - 19:42 Der er 9 kommentarer og
1 løsning

Hvad gør man med "554 Error" på SMTP socket ved mail udsendelse

Jeg har implementeret en funktion, der sender stort antal mails ud via en socket-forbindelse til en SMTP-server. Og det fungerer sådan set efter hensigten.

Mit problem er, at hvis én af e-mail adresserne i listen ikke er gyldig, fejler udsendelse (naturligvis) til den adresse - men det betyder også at forbindelsen til SMTP-serveren dør. Og de resterende emails bliver ikke udsendt.

I den log jeg gemmer fra SMTP-serveren, får jeg fejlbeskeden:
"554 Error: no valid recipients"

Nogen, der har et bud på, hvordan jeg kan få funktionen til at fortsætte på trods af ugyldige adresser?
Avatar billede agg-zeus Nybegynder
23. juli 2004 - 19:50 #1
kan man se noget kode måske ?
Avatar billede svoeber Nybegynder
23. juli 2004 - 19:53 #2
Dette er "kernen" i funktionen:
Jeg sender som multi-part, og det virker fint nok (men gør nok koden mindre overskuelig :))

            fputs($socket, "MAIL FROM: ".$from."\n");
            $log .= fgets($socket, 2000) . "<br><hr><br>";
            fputs($socket, "RCPT TO: $email\n");
            $log .= fgets($socket, 2000) . "<br>";
            fputs($socket, "DATA\n");
            $log .= fgets($socket, 2000) . "<br>";
            fputs($socket, "To: $email\r\n");
            fputs($socket, "Subject: ".$subject."\n");
            fputs($socket, "From: ".$from."\r\n");
            fputs($socket, "Reply-To: ".$from."\r\n");
            fputs($socket, "MIME-Version: 1.0\r\n");
            fputs($socket, "Content-Type: Multipart/Alternative;
    boundary=\"part boundary\"\r\n\r\n");
            fputs($socket, "--part boundary\r\n");
            fputs($socket, "Content-Type: text/plain;
    charset=\"iso-8859-1\"\r\nContent-Transfer-Encoding: quoted-printable\r\n");
            fputs($socket, "\r\n".qp_enc($text_plain)."\r\n");
            fputs($socket, "\r\n--part boundary\r\n");
            fputs($socket, "Content-Type: text/html;
    charset=\"iso-8859-1\"\r\nContent-Transfer-Encoding: quoted-printable\r\n");
            fputs($socket, "\r\n".qp_enc($text_html)."\r\n");
            fputs($socket, "\r\n--part boundary--\r\n");
            fputs($socket, "\n");
            fputs($socket, ".\n");
Avatar billede jakoba Nybegynder
23. juli 2004 - 21:21 #3
koden 554 betyder blot "det lykkedes ikke". det er en catchall fejlmelding.
    http://www.greenend.org.uk/rjk/2000/05/21/smtp-replies.html

Jeg har fundet en rapport om at programmet Slipstream i nogle versioner generere den fejl (bruger du det?)

Og også lidt om at det kan forekomme når serveren ligger på et WinME system ( men det er så ustabilt at det ville i sig selv gælde for en fejl :-))

mvh JakobA
Avatar billede svoeber Nybegynder
23. juli 2004 - 21:49 #4
jakoba> Din kommentar er fin nok til mit subject, men den hjælper ikke meget med det problem, jeg har beskrevet i teksten :)
Fejlkoden er som sådan irrelevant - og jeg ved, at den kommer pga. ugyldige email-adresser. Problemet er, at min socket-forbindelse til smtp-serveren (TDC) dør.
Avatar billede jakoba Nybegynder
23. juli 2004 - 22:06 #5
fair enuft. Mon ikke du så skulle checke dine emailadresser med en regulær expression før du prøver at sende til dem

$email = "lovlig.email@adresse.dk";
if preg_match( "/^([\W\-]+\.)*[\W\-]+@([\W\-]+\.)+\w{2,4}$/i", $email ) {
    // great, den kan vi sende til
} else {
    // den duer ikke. smid den væk
}
Avatar billede svoeber Nybegynder
23. juli 2004 - 22:23 #6
Jo, men det viser sig, at den også hoster over forkert domæne, altså ikke-eksisterende men gyldige domæner.
Jeg har fundet noget, der måske kan hjælpe med at tjekke adresserne her:
http://www.howtocreate.co.uk/php/dnld.php?file=4&action=1
men det jeg leder efter, er en metode til at undgå forbindelsen ryger til SMTP-serveren.
Avatar billede jakoba Nybegynder
23. juli 2004 - 22:36 #7
det begynder at lyde som SPAM
Avatar billede svoeber Nybegynder
23. juli 2004 - 23:09 #8
Spam? Nej, da :D
Det er til at sende nyhedsbreve ud til medlemmer på et dating-site.

Men du har faktisk hjulpet mig ved at bringe min tankegang i den bane - jeg kan jo blot sørge for, at modtagerne skal have verificeret deres medlemskab først via deres e-mail - og så må adressen jo også være gyldig :)
Avatar billede mixeren Nybegynder
24. juli 2004 - 14:17 #9
Det er en rigtig go ide svober, så er du nemlig også fri for at en bruger opretter sig med en anden persons mail adresse.  Du ved så med 100% sikkerhed at brugeren som modtager mailen selv har udført den handling som gør det muligt af sende et nyheds brev til ham/hende.
Avatar billede svoeber Nybegynder
05. november 2004 - 12:25 #10
Fik aldrig løst det oprindelig problem
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester