Detta problemet har vit uppe femtielva gånger. Sök på tex "nyhetsbrev". ;)
Välkommen till wF förresten!
11 svar · 293 visningar · startad av insu
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 %>
Detta problemet har vit uppe femtielva gånger. Sök på tex "nyhetsbrev". ;)
Välkommen till wF förresten!
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...
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
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
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 ?
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
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
Givetvis, det är nog dags för sängen nu innan jag får fler hjärnblödningar. :x
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?
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.
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...