30. november 2004 - 11:29Der er
5 kommentarer og 1 løsning
Tæller til nyhedsbrevscript
jeg har lavet et script til at udsende nyhedsbreve som virker fint, men det holder ikke længere fordi der er for mange tilmeldt. jeg vil gerne opdele afsendelsen i mindre stykker og skal derfor implementere en tæller der kan holde styr på hvor mange der er sendt - men jeg aner ikke hvordan (har skrevet lidt noter i koden hvor jeg tror tælleren skal være). jeg ønsker ikke bare at sætte scripttimeout op.
<%@LANGUAGE="VBSCRIPT"%> <%Server.Scripttimeout=1000%> <!--#include file="../../Connections/scandlines.asp" --> <% Dim rsNyhedsbrev Dim rsNyhedsbrev_numRows Set rsNyhedsbrev = Server.CreateObject("ADODB.Recordset") rsNyhedsbrev.ActiveConnection = MM_scandlines_STRING rsNyhedsbrev.Source = "SELECT * FROM BorderShopNyhedsbrev ORDER BY IDnyhedsbreve DESC" rsNyhedsbrev.CursorType = 0 rsNyhedsbrev.CursorLocation = 2 rsNyhedsbrev.LockType = 1 rsNyhedsbrev.Open() rsNyhedsbrev_numRows = 0
Overskrift = (rsNyhedsbrev.Fields.Item("Overskrift").Value) Tekst = (rsNyhedsbrev.Fields.Item("Tekst").Value)
Dim rsEmails Dim rsEmails_numRows Set rsEmails = Server.CreateObject("ADODB.Recordset") rsEmails.ActiveConnection = MM_scandlines_STRING rsEmails.Source = "SELECT * FROM test" rsEmails.CursorType = 0 rsEmails.CursorLocation = 2 rsEmails.LockType = 1 rsEmails.Open() rsEmails_numRows = 0
on error resume next Do While Not rsEmails.EOF ' Send emails fra IDbordershop=Request.QueryString("Antal")+1 ' så den tager værdien Antal fra URL og fortsætter fra den næste modtager på listen strEmail = (rsEmails.Fields.Item("Email").Value) strNavn = (rsEmails.Fields.Item("Fornavn").Value)
' Denne kode er med så man hele tiden kan følge med i hvor langt den er kommet i forhold til modtagerne Response.write "E-mail sendt til " & strEmail & " " & strNavn & "<br>"
JMail.Execute Set JMail = Nothing rsEmails.MoveNext Loop ' When taeller=Request.QueryString("Antal")+10 Then Response.Redirect("oversigt_nyhedsbrev.asp?Antal=")
rsEmails.close Set rsEmails = Nothing
rsNyhedsbrev.Close() Set rsNyhedsbrev = Nothing
'Når du har sendt til alle modtagerne skal du gå til denne fil 'Response.Redirect("oversigt_nyhedsbrev.asp") %> <html> <head> <title>Test</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <img src="../../images/admin/precent.gif" width="100" height="15"> </body> </html>
<%@LANGUAGE="VBSCRIPT"%> <%Server.Scripttimeout=1000%> <!--#include file="../../Connections/scandlines.asp" --> <% Dim rsNyhedsbrev Dim rsNyhedsbrev_numRows Set rsNyhedsbrev = Server.CreateObject("ADODB.Recordset") rsNyhedsbrev.ActiveConnection = MM_scandlines_STRING rsNyhedsbrev.Source = "SELECT * FROM BorderShopNyhedsbrev ORDER BY IDnyhedsbreve DESC" rsNyhedsbrev.CursorType = 0 rsNyhedsbrev.CursorLocation = 2 rsNyhedsbrev.LockType = 1 rsNyhedsbrev.Open() rsNyhedsbrev_numRows = 0
Overskrift = (rsNyhedsbrev.Fields.Item("Overskrift").Value) Tekst = (rsNyhedsbrev.Fields.Item("Tekst").Value)
Dim rsEmails Dim rsEmails_numRows Set rsEmails = Server.CreateObject("ADODB.Recordset") rsEmails.ActiveConnection = MM_scandlines_STRING rsEmails.Source = "SELECT * FROM test" rsEmails.CursorType = 0 rsEmails.CursorLocation = 2 rsEmails.LockType = 1 rsEmails.Open() rsEmails_numRows = 0
' --- Tilføjelse start ---
' Sætter Taeller til 0 Taeller = 0
' Henter Antal fra QueryString Antal = Request.QueryString("Antal")
' --- Tilføjelse slut ---
on error resume next Do While Not rsEmails.EOF ' Send emails fra IDbordershop=Request.QueryString("Antal")+1 ' så den tager værdien Antal fra URL og fortsætter fra den næste modtager på listen strEmail = (rsEmails.Fields.Item("Email").Value) strNavn = (rsEmails.Fields.Item("Fornavn").Value)
' Denne kode er med så man hele tiden kan følge med i hvor langt den er kommet i forhold til modtagerne Response.write "E-mail sendt til " & strEmail & " " & strNavn & "<br>"
JMail.Execute Set JMail = Nothing
' --- Tilføjelse start ---
Taeller = Taeller + 1 Antal = Antal + 1
' --- Tilføjelse slut ---
rsEmails.MoveNext Loop ' --- Tilføjelse start ---
If Taeller = "10" Then Response.Redirect "oversigt_nyhedsbrev.asp?Antal=" & Antal End If
' --- Tilføjelse slut ---
rsEmails.close Set rsEmails = Nothing
rsNyhedsbrev.Close() Set rsNyhedsbrev = Nothing
'Når du har sendt til alle modtagerne skal du gå til denne fil 'Response.Redirect("oversigt_nyhedsbrev.asp") %> <html> <head> <title>Test</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <img src="../../images/admin/precent.gif" width="100" height="15"> </body> </html>
Jeg har tilføjet to tællere til din kode: 1. tæller (Taeller) går i nul (0) efter 10 afsendte mails. 2. tæller (Antal) overføres til din QueryString, så du derved har et tal på totalt afsendte mails.
så har jeg forsøgt mig, men den sender 2 mails til alle
<%@LANGUAGE="VBSCRIPT"%> <%Server.Scripttimeout=3600%> <!--#include file="../../Connections/scandlines.asp" --> <% Dim rsNyhedsbrev Dim rsNyhedsbrev_numRows Set rsNyhedsbrev = Server.CreateObject("ADODB.Recordset") rsNyhedsbrev.ActiveConnection = MM_scandlines_STRING rsNyhedsbrev.Source = "SELECT * FROM BorderShopNyhedsbrev ORDER BY IDnyhedsbreve DESC" rsNyhedsbrev.CursorType = 0 rsNyhedsbrev.CursorLocation = 2 rsNyhedsbrev.LockType = 1 rsNyhedsbrev.Open() rsNyhedsbrev_numRows = 0
Overskrift = (rsNyhedsbrev.Fields.Item("Overskrift").Value) Tekst = (rsNyhedsbrev.Fields.Item("Tekst").Value)
Dim rsEmails Dim rsEmails_numRows Set rsEmails = Server.CreateObject("ADODB.Recordset") rsEmails.ActiveConnection = MM_scandlines_STRING rsEmails.Source = "SELECT * FROM test" rsEmails.CursorType = 0 rsEmails.CursorLocation = 2 rsEmails.LockType = 1 rsEmails.Open() rsEmails_numRows = 0
Dim rsAntalModtagere Dim rsAntalModtagere_numRows Set rsAntalModtagere = Server.CreateObject("ADODB.Recordset") rsAntalModtagere.ActiveConnection = MM_scandlines_STRING rsAntalModtagere.Source = "SELECT Count(*) AS AntalMails FROM test" rsAntalModtagere.CursorType = 0 rsAntalModtagere.CursorLocation = 2 rsAntalModtagere.LockType = 1 rsAntalModtagere.Open() rsAntalModtagere_numRows = 0
' Denne tæller har en total på det antal modtagere der er i databasen AntalMailAdresser = (rsAntalModtagere.Fields.Item("AntalMails").Value) ' Sætter Taeller til 0 Taeller = 0 ' Henter Antal fra QueryString Antal = Request.QueryString("Antal")
' Kode efter Obi-Duck Do While cint(Antal) <= cint(AntalMailAdresser) Do While Taeller <= 10
' Denne kode er med så man hele tiden kan følge med i hvor langt den er kommet i forhold til modtagerne Response.write "E-mail sendt til " & strEmail & " " & strNavn & "<br>"
' Tællerne skal tælle op Taeller = Taeller + 1 Antal = Antal + 1
JMail.Execute Set JMail = Nothing rsEmails.MoveNext Loop Loop
' Når Do While Taeller <= 10 ikke længere er opfyldt skal den: Response.Redirect("newscript_nyhedsbrev.asp?Antal=" & Antal) Loop
'Når du har sendt til alle modtagerne skal du gå til denne fil 'If rsEmails.EOF Then Response.Redirect("oversigt_nyhedsbrev.asp") %> <html> <head> <title>Test</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <img src="../../images/admin/precent.gif" width="100" height="15"> <br> Antal modtagere: <%=AntalMailAdresser%> <br> Hvor langt scriptet er kommet: <%=Request.QueryString("Antal")%> </body> </html> <% rsEmails.close Set rsEmails = Nothing
rsNyhedsbrev.Close() Set rsNyhedsbrev = Nothing
rsAntalModtagere.Close() Set rsAntalModtagere = Nothing %>
Ja, det ved jeg (det skrev jeg også ;-) ). Grunden til at det sender 2 mails er at du med mit eksempel nulstiller hentningen af mailadresserne, fra databasen. Derfor henter koden emailadresserne mere end én gang.
Jeg har selv en nyhedsbrev-kode, men har aldrig brugt den til mere end 3 modtagere (i en test); dog har jeg ladet mig fortælle, at følgende kode (linjen markeret med <---)skulle sørge for at nyhedsbrevet ikke sender mere end én mail pr. emailadresse:
jeg bliver nødt til at lukke og oprette igen - skal have det færdigt i dag :(
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.