webForumDet fria alternativet

Nyhetsbrev, server time out ???

11 svar · 293 visningar · startad av insu

insuMedlem sedan juli 200223 inlägg
#1

Problemet ligger i att jag har ca 2000 olika mejl adresser och jag får server time out... Här nere är koden, jag kör en vanlig loop, hur kan jag göra så att jag inte får server time out, eller hur kan jag skicka nyhetsbrev till alla lättast??? Tack i förhand!

<% If Request("Send") = "Yes" THEN %>
<%
DIM Connect, Rs, Sql

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open("DRIVER={Microsoft Access Driver (\*.mdb)}; DBQ=" & Server.MapPath("../../db/members.mdb"))

Sql = "SELECT \* FROM Login ORDER BY Namn"
Set Rs = Connect.Execute(Sql)

%>
<%
Do Until Rs.EOF
%>
<% IF NOT Rs("mail") = "" Then %>
<%
Dim Mail, text

text = Request.Form("text")
Mail = Rs("mail")

set objMail = CreateObject("CDONTS.Newmail")
objMail.From = "Mail@mail.com"
objMail.To = Mail
objMail.subject = "Nyhetsbrev"
objMail.body = text
objMail.send
set objMail = Nothing
%>
<% End If %>
<%

Rs.MoveNext
Loop
Rs.Close
Connect.Close
SET Connect = Nothing
SET Rs = Nothing

			%\>

<%
Session("Mess") = "messen är skickad!"
Response.Redirect("admin_mail.asp")

%>
<% End If %>

LAMPMedlem sedan mars 2002777 inlägg
#2

Detta problemet har vit uppe femtielva gånger. Sök på tex "nyhetsbrev". ;)

Välkommen till wF förresten!

MharlinMedlem sedan juni 200277 inlägg
#3

Gå in i databasen och ändra timeout tiden till 0 eller till tiden som passar. Sätter du det till 0 kommer den aldrig ge en timeout...

LAMPMedlem sedan mars 2002777 inlägg
#4

Jag tror ej det är databasen som ger timeout utan VB-motorn. Du kan prova höja timeouttiden:

<% Server.ScriptTimeout = 3600 %>

Prova också att inte loopa hela initieringen av objectet, utan enbart objMail.to. Vill du att inte alla ska se alla adresserna så anger du dig själv som to och lägger in adresserna i objMail.bcc

icaaqMedlem sedan okt. 20005 273 inlägg
#5

Mharlin skrev:

Gå in i databasen och ändra timeout tiden till 0 eller till tiden som passar. Sätter du det till 0 kommer den aldrig ge en timeout...

Det är väl inte databasen som säger emot utan servern som kör scriptet :OO

insuMedlem sedan juli 200223 inlägg
#6

LAMP skrev:

Prova också att inte loopa hela initieringen av objectet, utan enbart objMail.to. Vill du att inte alla ska se alla adresserna så anger du dig själv som to och lägger in adresserna i objMail.bcc

Hur menar du ? Hur kan man loopa bara enbart objMail.to ? Jag förstår det med bcc, men hur loopar man bara to ?

LAMPMedlem sedan mars 2002777 inlägg
#7

Du flyttar din loop så att du bara loopar igenom din BCC:

set objMail = CreateObject("CDONTS.Newmail") 
objMail.From = "Mail@mail.com" 
objMail.To = "mail@mail.com"
objMail.subject = "Nyhetsbrev" 
objMail.body = text 

while not RS.EOF
objMail.bcc = RS("mail") 
RS.movenext
wend

objMail.send 
set objMail = Nothing
SPiNMedlem sedan mars 20007 896 inlägg
#8
while not RS.EOF
objMail.bcc = RS("mail") 
RS.movenext
wend

Följande borde resultera i att objMail.bcc ändras varje gång loopen körs, och endast den sista i listan får brevet?
Det borde väl vara:

Dim str
str = ""
while not RS.EOF
str = str & ";" & RS("mail") 
RS.movenext
wend

objMail.bcc = str

:q

LAMPMedlem sedan mars 2002777 inlägg
#9

Givetvis, det är nog dags för sängen nu innan jag får fler hjärnblödningar. :x

insuMedlem sedan juli 200223 inlägg
#10

LAMP skrev:


while not RS.EOF
objMail.bcc = RS("mail") 
RS.movenext
wend

Jag förstår nu, man kör alla e-mail adresser in på bcc, förresten kan man lägga hur många e-mail som helst i bcc ? Och måste man använda <% Server.ScriptTimeout = 3600 %> nu också ? Står 3600 för 3600 sekunder eller?

LAMPMedlem sedan mars 2002777 inlägg
#11

Ett ytterligare sätt om du har en dbms som stödjer subselects är att bygga ett script dynamiskt som skickar mailen gruppvis, låt oss säga 100 i taget. Men det är jag för trött att redogöra för nu.

Jo, 3600 är sekunder. Du kan sätta vilken siffra du vill där.

insuMedlem sedan juli 200223 inlägg
#12

LAMP skrev:

Ett ytterligare sätt om du har en dbms som stödjer subselects är att bygga ett script dynamiskt som skickar mailen gruppvis, låt oss säga 100 i taget. Men det är jag för trött att redogöra för nu.

Jo, 3600 är sekunder. Du kan sätta vilken siffra du vill där.

Okay, jag förstår, men hur funkar det med subselects, låter väldigt intressant...

139 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)