webForumDet fria alternativet

Prestanda när man skickar till flera 100 e-postadresser med CDONTS

ASP

10 svar · 267 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Hej

Tänkte bygga en bevakningsfunktion för ett forum och tänkte på nedanstående sätt skicka ut mail till de som bevakar forumet när ett inlägg görs. Medlemmarna i forumet ligger på ca 1000 st och det kan hända att alla bevakar forumet. Är inte säker på om vi ska sätta detta som standard.

Fungerar mitt kodexempel eller blir det för segt? I så fall vad finns det för lösning?

<%
sqlString = "SELECT epost " &_
  "FROM medlemmar " 
Set RS = Con.Execute( sqlString )

While not RS.EOF

 Set newMailObj = CreateObject("CDONTS.Newmail")
  	newMailObj.From = "info@forum.se"
  	newMailObj.To = RS("epost")
  	newMailObj.Subject = "Bevakning"
    newMailObj.BodyFormat = CdoBodyFormatText
    newMailObj.MailFormat = CdoMailFormatMime    
    sMailBody = "Ett inlägg har gjort i en tråd ni bevakar!" & vbNewLine 
    newMailObj.Body = sMailBody

    newMailObj.Send
 Set newMailObj = Nothing

RS.MoveNext
Wend

%>
Medlem sedan dec. 20003 563 inlägg
#2

Hmm. Bevakar 1000 st samma tråd samtidigt så lär det inte komma ut många mail.
ScriptTimeOut är till för att samma sida inte skall kunna stå och tugga för länge, vilket lär hända med den där tråden.
Och med din kod skickar du ju till samtliga användare oavsett om de bevakar tråden eller inte.
Du borde försöka dela upp utskicken lite.

Medlem sedan jan. 20013 406 inlägg
#3

Ja min kod är väldigt bantad. Den skulle bara visa principen.
Hur bygger man denna funktion då så att man inte får en timeout.

Hur fungerar det på wFs bevakningsfunktion?

Medlem sedan juni 20015 009 inlägg
#4

Kanske lite onödigt att göra på detta sätt, har inte testat det heller. Men om ett svar görs så lägg till en post i en tabell med nödvändig info. Sedan om det finns någon motsvarighet till cronjobb så kan man göra utskick var 2:e minut och då skicka till ex. 100 pers varje gång eller mer. Delar ju upp det och man kan enkelt ha en annan maskin till mailserver om man vill.

Som sagt, har inte testat det och inte säkert det fungerar i praktiken. Bara en fundering av mig helt enkelt. :)

Medlem sedan jan. 20013 406 inlägg
#5

Problemet är att webbplatsen ska ligga på ett webbhotell och då har jag inte tillgång till att schemalägga jobb eller tillgång till sk. mailpickup kataloger.

Medlem sedan juni 20015 009 inlägg
#6

Addeladde skrev:

Problemet är att webbplatsen ska ligga på ett webbhotell och då har jag inte tillgång till att schemalägga jobb eller tillgång till sk. mailpickup kataloger.

Märks att jag tänker i php-banor :OO
Glömmer helt bort att winservrar inte har cron. :i

Medlem sedan jan. 20013 406 inlägg
#7

Detta måste väl ändå vara ett ganska vanligt problem? Ingen som har en lösning?

Medlem sedan jan. 20013 406 inlägg
#8

Om man lägger alla e-mailadresser i hidden fältet och skickar ett mail. Går det snabbare?

Medlem sedan juni 20034 013 inlägg
#9

Det som tar tid är att du skapar ett helt nytt brev för varje mottagare. Om du måste skicka olika brev till varje person så är det så att det tar tid. Men om flera mottagare ska ha samma brev så ska du bara göra ett brev som du skickar till allihopa. I e-postprogram brukar det kallas för BCC, men det man i själva verket gör är att man inte skriver ut mottagarna i brevet.

Jag tror att det där CDONTS bara är gjort för att skicka enstaka brev och för brev till många mottagare behöver man någon annan komponent. Hör med ditt webbhotell vad det finns för möjligheter. På det jag använder så finns det ett särskilt program för att skicka brev till många adresser.

Medlem sedan jan. 20032 285 inlägg
#10

Borde det inte gå snabbare att göra såhär?

<%
sqlString = "SELECT epost " &_
  "FROM medlemmar " 
Set RS = Con.Execute( sqlString )

Set newMailObj = CreateObject("CDONTS.Newmail")
newMailObj.From = "info@forum.se"
newMailObj.To = "bevakning@mailadress.com"
newMailObj.Subject = "Bevakning"
newMailObj.BodyFormat = CdoBodyFormatText
newMailObj.MailFormat = CdoMailFormatMime    
sMailBody = "Ett inlägg har gjort i en tråd ni bevakar!" & vbNewLine 
newMailObj.Body = sMailBody

While not RS.EOF
  If strBCC = "" Then
    strBCC = RS("epost")
  Else
    strBCC = strBCC & ";" & RS("epost")
  End If

  RS.MoveNext
Wend

RS.Close : Set RS = Nothing

newMailObj.BCC = strBCC
newMailObj.Send
Set newMailObj = Nothing
%>
Medlem sedan jan. 20013 406 inlägg
#11

Det undrar jag också?

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)