05. december 2003 - 00:27Der er
36 kommentarer og 1 løsning
Send emails hurtigere
Jeg sender lige nu en mængde emails med: SmtpMail.Send(from, to, subject, body);
Det fungerer fint, dog lidt langsomt. Grunden er at den skal tilslutte til smtp-serveren hver eneste gang den sender en email. Det ville være hurtigere hvis den kunne tilslutte til smtp-serveren og sende alle emails på én gang, så ville båndvidden sikkert også blive udnyttet bedre.
Vildt nok - gad vide hvorfor folk så bruger diverse scripts og mail-servere til at sende nyhedsbreve med, når de bare kan bruge deres ISP's smtp-server.
Hvis de der "scripts" er f.eks. ASP scripts, plejer de gerne at oprette forbindelse til webhotellets mail server.. men der findes jo også de der "copy&paste" formmails i perl.. ikke meget at gøre der..
Jeg læste lige gennem det jeg skrev efterfølgende, jeg vil lige understrege at min tak for hjælpen ikke var det mindste ironisk eller noget :-) jeg mente det faktisk.
nielsbrinch: ALLE øvrige modtagere får emailen, selvom en enkelt adresse er ugyldig. Sådan er SMTP protokollen nu engang så smart designet, og jeg kan bekræfte fra egen erfaring at det er sådan.
The message could not be sent because one of the recipients was rejected by the server. The rejected e-mail address was 'youarestupid@sdf'. Subject 'hey@smoothcriminal;gyxi@gyxi.dk;asdfadfag', Account: 'gyxi.dk', Server: 'mail.tele.dk', Protocol: SMTP, Server Response: '504 <youarestupid@sdf>: Recipient address rejected: need fully-qualified address', Port: 25, Secure(SSL): No, Server Error: 504, Error Number: 0x800CCC79
Og jeg modtog ikke emailen på gyxi@gyxi.dk. Kom igen.
Så, nu fik jeg lavet testen rigtigt, og den siger:
Unhandled Exception: System.Web.HttpException: Could not access 'CDO.Message' object. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException (0x8004020F): The server rejected one or more recipient addresses. The server response was: 550 <hey@soothkhcriminal.com>: Recipient address rejected: Domain not found
Resultatet var at ingen af adresserne modtog mailen. Så det passer altså ikke, odegaard. Måske der er flere forskellige slags SMTP-servere?
Tja, jeg kan kun sige at jeg har flere emailadresser der ikke eksisterer, og det forhindrer ikke de øvrige emails at komme ud. Jeg skal ikke kunne sige hvor forskellen ligger.
Der er forskel om det er det foran @ eller det bagved @ der ikke eksisterer.
Der foran checker SMTP serveren ikke. Den tager imod email og sender mailene videre til den SMTP server hvor MX record for det bagved @ peger. Og så må den tage sig af om brugeren eksieterer.
Det bagved @ skal SMTP serveren jo checke for at finde den anden SMTP server. Den her SMTP server checker tilsyneladende allerede ved RFC 821 RCPT.
Det er vel ikke værre end at man fanger fejlen, søger fejlbeskeden igennem for emailadressen, fjerner denne, og forsøger igen. Så får man samtidigt ryddet op i sin adressedatabase.
Jeg har det problem at hvis afsender-adressen ikke hører til domænet så, kan den ikke sende emailen, men det betyder også at modtageren ikke automatisk svarer på din egen email adresse, men kun fra én der tilhører serveren. Det kan dog klares med at tilføje en reply-to header, hvor man knalder sin egen adresse ind. Fx. MyMail.Headers.Add("Reply-To", "\"" + strSenderName + "\"" + strSenderEmail);
Du kan også bruge asynchronous method calls, hvor du starter en tråd uden at vente på at den returnerer. På den måde kan du starte x antal tråde og bare lade dem "sejle i deres egen sø". Det er en ret lækker teknik til at speede interfaces lidt (læs: en del) op.
Det gør jeg også, men det går ikke specielt hurtigere selvom jeg starter en tråd for hver email. Jeg tror det er fordi computeren kun kan have en forbindelse til smtp-serveren ad gangen. Så skal trådene hver især vente på at få forbindelsen og så er der ikke noget vundet.
"Det kan dog klares med at tilføje en reply-to header, hvor man knalder sin egen adresse ind. Fx. MyMail.Headers.Add("Reply-To", "\"" + strSenderName + "\"" + strSenderEmail);"
Hvad vil hans underlige ide så være i at smide en falsk afsender adresse på. Hvorfor han overhovedet ønsker at sætte falsk afsender på aner jeg ikke, men det må han jo om.
Som jeg siger så kan man slet ikke have en afsenderadresse der ikke tilhører samme domæne som mailserveren. Men hvis man ønsker at modtage svar på en anden adresse på et andet domæne, kan man få lov at sætte reply-to adressen i stedet. Det handler jo ikke om falske adresser, hvor man vil skjule afsenderen. Afsenderadressen står jo stadig i from-feltet.
Jeg får nu altså en fejl hvis jeg forsøger med en from-adresse der ikke tilhører godkendte domæner, men det kan da godt være at det er serverspecifikt. I øvrigt så er SMTP serveren localhost, så det skulle næppe være problemer med med hvilken forbindelse man tilhører.
Og derfor er mail.tele.dk ikke et åbent mail-relay.
Ikke TDC kunder kan ikke bruge den.
TDC kunder kan bruge den. Men hvis de misbruger den så har de jo logger afsender IP adresser. Og da de også logger tildeling af IP adresser til kunde konti, så kan man findes i tilfælde af misbrug.
Nu skrev jeg jo heller ikke at det kun var ét domæne, men de godkendtE domænER. Fx. er jeg da udemærket klar over at de fleste webhotel-udbydere har flere sites på samme server, og derved flere domæner.
tdc's smtp server tillader jo bare folk der er på med en tdc forbindelse at sende mails igennem den er så vidt jeg ved fløjtende ligeglad med ens afsender adresse jeg sender da ihvertfald mails med et ikke tdc domæne hver eneste dag uden problemer
Synes godt om
Ny brugerNybegynder
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.