Archief - ASP.NET: Mass Email (newsletter)

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Drone

Legacy Member
Hallo,
Ik heb een newsletter script geschreven voor een klant maar als ik het wil testen door 500 mails te sturen heb ik timeout problemen. De mails worden meestal wel verstuurd maar aan het einde van de loop geef hij dan "The page cannot be displayed" error.

Dit is de code die ik gebruik om te testen of ik 500 mails kan sturen.
Code:
sub testing(sender as object, e as eventargs)
        dim ii as integer               
        Dim objMessage As MailMessage   
        for ii = 0 to 500   
            Try           
                objMessage = New MailMessage()
                objMessage.From = "[email protected]"
                objMessage.To = "[email protected]"
                objMessage.Subject = "testing"
                objMessage.Body = "mail : " & ii
                objMessage.BodyFormat = MailFormat.Html
       
                SmtpMail.SmtpServer = "localhost"           
                SmtpMail.Send(objMessage)   
               
           
            Catch objExcept As Exception
                    Trace.Write(objExcept.Message);             
            End Try            
        next
end sub

Dit staat in de web.config om een timeout te voorkomen
Code:
<httpRuntime executionTimeout="3600" maxRequestLength="102400" useFullyQualifiedRedirectUrl="fal se" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
alvast bedankt

xml

Legacy Member
Het is zowieso niet echt gezond voor een server als je gaat mass mailen in een lus. Best zet je er ergens een "pauze" in om de 50 a 100 mails.

Spijtig genoeg ken ik wel de oplossing voor je probleem niet. :)

Drone

Legacy Member
aan die oplossing had ik ook gedacht dus had op google iets gevonden van thread.sleep en zo om de 100 mails een pause van 5 seconden toegevoegd maar dit werkt ook niet. Ook raar is als de pagina crashed krijg ik alle mails dubbel.

RpR

Legacy Member
[drone]-[1.05] zei:
aan die oplossing had ik ook gedacht dus had op google iets gevonden van thread.sleep en zo om de 100 mails een pause van 5 seconden toegevoegd maar dit werkt ook niet. Ook raar is als de pagina crashed krijg ik alle mails dubbel.
Staat uw webserver wel ingesteld dat een script langer dan een bepaalde tijd mag lopen (Steekt in de webserver om oneindige lussen te stoppen.)

Drone

Legacy Member
executionTimeout="3600" zou er voor moeten zorgen dat het script 3600 seconden mag lopen.

aXl_

Legacy Member
ik weet niet of het in jouw geval mogelijk is, maar kan je, je script geen 100 e-mails laten versturen, de pagina laten reloaden met een bepaalde variabele (in de url) en dan de volgende 100 e-mails laten versturen, net totdat al je e-mails verstuurd zijn?

Drone

Legacy Member
msdn zei:
Indicates the maximum number of seconds that a request is allowed to execute before being automatically shut down by ASP.NET.

Ik heb zojuist een mailtje ontvangen van mijn provider:

sohosted zei:
Onze servers zijn zo ingesteld dat deze 250 berichten per 15 minuten kunnen verzenden. Wanneer u dit dus verspreid over 4 keer 200 dan zou dat moeten werken. Wij hebben hiervoor gekozen zodat er niet eindeloos e-mails (bijv. spam) kan worden verstuurd.

Nu heb ik wel mijn twijfels dat dit ervoor zorgt dat mijn webpagina crashed.

Drone

Legacy Member
aXl_ zei:
ik weet niet of het in jouw geval mogelijk is, maar kan je, je script geen 100 e-mails laten versturen, de pagina laten reloaden met een bepaalde variabele (in de url) en dan de volgende 100 e-mails laten versturen, net totdat al je e-mails verstuurd zijn?

Ik ga de klant het gewoon manueel laten doen vermits het aantal mails/15min gelimiteerd is.

dJeez

Legacy Member
Waarom creëer je steeds een nieuw mailmessage object in die lus? Aangezien je de velden overschrijft kan je net zogoed 1 object creëren buiten de lus. Dat je dubbele mails krijgt is niet verwonderlijk, je houdt nl. nergens bij of je reeds een mail verstuurd hebt of niet. Ik vermoed dat het uiteindelijk gekoppeld zal worden aan een DB tabel? Zo ja, hou dan in die tabel maar een vlag bij die aangeeft of er al dan niet reeds een mail werd verstuurd, en update die dan binnen je lus zodat je bij een eventuele crash (die steeds kan voorkomen - Murphy indachtig) enkel de nog niet verzonden mails verstuurt.

Drone

Legacy Member
dJeez zei:
Waarom creëer je steeds een nieuw mailmessage object in die lus? Aangezien je de velden overschrijft kan je net zogoed 1 object creëren buiten de lus. Dat je dubbele mails krijgt is niet verwonderlijk, je houdt nl. nergens bij of je reeds een mail verstuurd hebt of niet. Ik vermoed dat het uiteindelijk gekoppeld zal worden aan een DB tabel? Zo ja, hou dan in die tabel maar een vlag bij die aangeeft of er al dan niet reeds een mail werd verstuurd, en update die dan binnen je lus zodat je bij een eventuele crash (die steeds kan voorkomen - Murphy indachtig) enkel de nog niet verzonden mails verstuurt.

In mijn originele code staat het object buiten de lus en worden alle adressen waar de mail is naar verstuurd opgeslagen in een db omdat ik stats bijhoud maar ook zoals je zegt als het crasht dat ik weet wie de mail heeft gekregen en wie niet.

Ramm

Legacy Member
Kan je niet gewoon met querystrings laten werken, en hem automatisch laten herladen?

bv.
sendmail.aspx?part=1
sendmail.aspx?part=2
...

Drone

Legacy Member
Ramm zei:
Kan je niet gewoon met querystrings laten werken, en hem automatisch laten herladen?

bv.
sendmail.aspx?part=1
sendmail.aspx?part=2
...

Yep het gaat zoiets worden kheb ook gelezen dat threading zou kunnen helpen maar daar moet ik wat meer info over zoeken.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan