Avatar billede mvk Nybegynder
30. november 2004 - 11:29 Der 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)
 
  Set JMail          = Server.CreateObject("JMail.SMTPMail")
  JMail.ServerAddress = "websmtp.border-wines.dk;websmtp.border-wines.dk;mailrelay.andersenit.dk"
  JMail.Sender        = "admin@border-wines.dk"
  JMail.SenderName      = "Border Shop"
  JMail.ContentType  = "text/html"
  JMail.Subject      = Overskrift
  JMail.AddRecipient    strEmail
  JMail.Priority      = 3
  JMail.AddHeader      "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
  Jmail.Body          = replace(Tekst, "ModtagerensNavn", strNavn)
 
' 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>
Avatar billede apo Praktikant
30. november 2004 - 19:50 #1
Måske hjælper denne kode?:

<%@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)
 
  Set JMail          = Server.CreateObject("JMail.SMTPMail")
  JMail.ServerAddress = "websmtp.border-wines.dk;websmtp.border-wines.dk;mailrelay.andersenit.dk"
  JMail.Sender        = "admin@border-wines.dk"
  JMail.SenderName      = "Border Shop"
  JMail.ContentType  = "text/html"
  JMail.Subject      = Overskrift
  JMail.AddRecipient    strEmail
  JMail.Priority      = 3
  JMail.AddHeader      "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
  Jmail.Body          = replace(Tekst, "ModtagerensNavn", strNavn)
 
' 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.

Var det sådan noget du havde i tankerne?

Apo
Avatar billede apo Praktikant
30. november 2004 - 20:18 #2
Ah, shit... Du skal ikke bruge mit forslag (det virker ikke, kan jeg se nu) :-/

Jeg har desværre ikke tid til at arbejde videre med det, så jeg håber at der er en anden der kan hjælpe dig.

Undskylder rodet og forvirringen :-(

Apo
Avatar billede mvk Nybegynder
01. december 2004 - 12:36 #3
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

  on error resume next
  Do While Not rsEmails.EOF

  strEmail = (rsEmails.Fields.Item("Email").Value)
  strNavn  = (rsEmails.Fields.Item("Fornavn").Value)
 
  Set JMail              = Server.CreateObject("JMail.SMTPMail")
  JMail.ServerAddress     = "websmtp.border-wines.dk;websmtp.border-wines.dk;mailrelay.andersenit.dk"
  JMail.Sender            = "admin@border-wines.dk"
  JMail.SenderName          = "Border Shop"
  JMail.ContentType      = "text/html"
  JMail.Subject          = Overskrift
  JMail.AddRecipientBCC    strEmail
  JMail.Priority          = 3
  JMail.AddHeader      "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
  Jmail.Body              = replace(Tekst, "ModtagerensNavn", strNavn)
 
  ' 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
%>
Avatar billede apo Praktikant
01. december 2004 - 18:55 #4
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:

<%
...
JMail.ClearRecipients ' <---
JMail.AddRecipientBCC RS("email")
...
%>

Men jeg har som nævnt endnu ikke set om funktionen virker :-/

Apo
Avatar billede mvk Nybegynder
03. december 2004 - 08:53 #5
tælleren virker heller ikke ordentligt
Avatar billede mvk Nybegynder
03. december 2004 - 08:54 #6
jeg bliver nødt til at lukke og oprette igen - skal have det færdigt i dag :(
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester