Avatar billede gatez Nybegynder
03. juli 2003 - 00:33 Der er 7 kommentarer og
1 løsning

Rs.MoveNext - Brake

Hejsa...

Jeg er ved at lave en mailing liste hvor den sender 1 mail ad gangen til alle mine brugere.

Der til bruger jeg fonktionen rs.movenext
Altså hent en mail adresse og send mail om og om igen indtil der ikke er flere modtager.

Er der en bedrer løsning ? Eller kan man lave det sådan at den viser det til mig hvor langt den er nået...
Så at den skriver: Mail 1 sendt... Mail 2 sendt... Mail 3 sendt... osv... ?

Og hvad sker der når der er 2000 medlemmer ? Laver den så ikke timeout på et tidspunkt ?

HJÆLP :-)
Jeg har ikke mere end 25 point...

Her kan i se min kode indtil vidrer:

<%@LANGUAGE="VBSCRIPT" %>
<!--#include file="Include/conn.inc" -->
<HTML>
<BODY>
<%
strSQL = "SELECT * FROM bruger WHERE nyhedsbrev = 'True' ORDER BY id;"
set rs = Conn.execute(strSQL)
if rs.EOF then
Response.write "<font face=""Arial"" size=""2"" Color=""RED""><center><b>Der er desværre ikke nogle biler i denne kategori endnu.<br>Bodykits.dk beklager!</b></center></font>"
else

Do Until rs.EOF

strFornavn = RS("fornavn")
strEmail = RS("email")


Set jmail = Server.CreateObject("JMail.Message")

jmail.From = "no@bodykits.dk"

jmail.Subject = "Here's some graphics!"
jmail.Body = "A nice picture if you can read HTML-mail."

jmail.AddRecipient ""&strEmail&"", ""&strFornavn&""

' As only HTML formatted emails can contain inline images
' we use HTMLBody and appendHTML
jmail.HTMLBody = "<html><body><font color=""red"">Hi, here is a nice picture:</font><br>"
jmail.appendHTML "<img src='http://www.bodykits.dk/Images/Logo/BodyKits-Logo-Stort.gif'>"
jmail.appendHTML "<br><br>good one huh?</body></html>"

' But as not all mailreaders are capable of showing HTML emails
' we will also add a standard text body
jmail.Body = "Too bad you can't read HTML-mail."
jmail.appendText " There would have been a nice picture for you"

jmail.Send( "mail.bodykits.dk" )


RS.MoveNext
Loop
end if
%>
Email sent!
</BODY>
</HTML>
Avatar billede eagleeye Praktikant
03. juli 2003 - 00:42 #2
Jeg har engang lavet denne med Jmail som bruger et recordset hvor den hendter email og navn fra databasen:



<% @LANGUAGE="VBSCRIPT" %>
<html>
<body>
<!--#include file="../dsn.asp"-->
<%
emne = Request.Form("emne")
tekst = Request.Form("tekst")

Navn = "news"
sendt = 0

response.write("Subject: " & emne & "<br>Body: " & tekst & "<br>")
Set objRec = Server.CreateObject ("ADODB.Recordset")

strSQL = "SELECT email, username FROM members WHERE email <> '';"

objRec.Open strSQL, myConn
if not objRec.EOF then
   
    sendt = 1 'flag at den er sendt

    set msgTemplate = Server.CreateObject( "JMail.Message" )

    msgTemplate.From = "xxx@xxxx.dk"
    msgTemplate.FromName = "xxxxx"

    msgTemplate.AddRecipient "%%email%%", "%%username%%"

    msgTemplate.Subject = emne
'    tekst = replace(tekst, chr(13), "<br>")
    msgTemplate.HTMLBody = tekst & "<br><br>www.xxx.dk"

    set mMerge = Server.CreateObject( "JMail.MailMerge" )

    mMerge.MailTemplate = msgTemplate

    mMerge.BulkMerge objRec, false, "websmtp.xxxx.dk"

else
    response.write("<br><b>Recorden var tom, ingen at sende til...</b>")
    sendt = 0
end if

objRec.Close
Set objRec = nothing
myConn.Close
Set myConn = nothing
Set JMail = Nothing

if sendt = 1 then
%>
<p>Du har nu afsendt mails til hele banden.</p>
<%else
    response.write("<br><b>Der blev ikke sendt nogen mail, der skete en fejl.")
end if
%>
<p>&nbsp;</p><br>
<p><a href="skrivmail.asp">Tryk her for at komme tilbage</a> til mail-editor</p>
<a href="java script:history.back();" title="Link: Tilbage til forrige side">Tilbage hvor du kom fra</a>
</body>
</html>







Denne linje skal paase med de kolonnenavn hvor email og navn er i:

    msgTemplate.AddRecipient "%%email%%", "%%username%%"
Avatar billede gatez Nybegynder
03. juli 2003 - 00:44 #3
Min kode virker fint men kan man ikke gøre sådan så den loader siden og sender en mail til den første på listen, derefter skal den skrive: Mail 1 sendt. og så loade siden igen og sende til nummer 2 på listen, skrive: Mail 2 sendt osv.... ?

Det tager nok noget tid men jeg sætter min server til at gøre det om natten.
Jeg vil bare være helt sikker på at den ikke laver ASP timeout.
Avatar billede eagleeye Praktikant
03. juli 2003 - 00:50 #4
Jeg ved ikke om den er hurtigere, men man kan da lave det meste af mailen en gang også kun ændre email adressen i loopet og bruge Jmail.message til at lave template mailen..

HVis du vil undgå server.timeout skal du sætte timeout så højt som muligt, men med 2000 mail tager det jo lang tid.. Du kan evt prøve at kigge på dette sprøgsmål hvor siden reloader sig selv efter 100 mails eller sådan:
http://www.eksperten.dk/spm/205889

Jeg smutter i seng nu
Avatar billede gatez Nybegynder
03. juli 2003 - 00:53 #5
Ok... Det lyder som noget at det rigtigt :-)

Jeg prøver... Det tager nok noget tid for mig... :-)
Avatar billede gatez Nybegynder
03. juli 2003 - 01:15 #6
Det script på:
http://www.eksperten.dk/spm/205889

Er det ikke meningen den skal sende fx. 5 mails og så reloade siden og sende 5 mere ?

Den her kode sender nemlig det hele ud på en gang:

<%
Response.Buffer = true

idStart = request("id")
if idStart = "" then
  idStart = 0
end if
strSQL = "SELECT * FROM bruger WHERE nyhedsbrev = 'True' ORDER BY id;"
set rs = Conn.execute(strSQL)


    on error resume next
EmailSend  =0
Do While (not rs.EOF) AND (CInt(EmailSend) < 5)
CInt(EmailSend) = CInt(EmailSend) + 1

strFornavn = RS("fornavn")
strEmail = RS("email")       
       
Set jmail = Server.CreateObject("JMail.Message")

jmail.From = "no@bodykits.dk"

jmail.Subject = "Here's some graphics!"
jmail.Body = "A nice picture if you can read HTML-mail."

'Send til
jmail.AddRecipient ""&strEmail&"", ""&strFornavn&""

'Beskeden
jmail.HTMLBody = "<html><body><font color=""red"">Hi, here is a nice picture:</font><br>"
jmail.appendHTML "<img src='http://www.bodykits.dk/Images/Logo/BodyKits-Logo-Stort.gif'>"
jmail.appendHTML "<br><br>good one huh?</body></html>"

'Hvis du ikke kan læse HTML
jmail.Body = "Too bad you can't read HTML-mail."
jmail.appendText " There would have been a nice picture for you"

jmail.Send( "mail.bodykits.dk" )
     
     
          rs.MoveNext
          Loop
   
    if (NOT rs.EOF) AND (CInt(EmailSend) =5) then
    response.redirect ("test.asp?id=" & rs("id"))
    end if

    rs.close
%>
Avatar billede gatez Nybegynder
03. juli 2003 - 03:59 #7
Virker nu... Takker !!!
Avatar billede gatez Nybegynder
03. juli 2003 - 15:23 #8
Efter at have sidet hele natten og arbejdet fik jeg lavet lidt om i scriptet :-)

Nu er det muligt at se den reloade... Den skriver status undervejs. Fx.: Sender 12 af 400 mails.

Den henter også alt data der sendes fra en database.

Her er den færdige kode som virker perfekt :-)

<%
Response.Buffer = true

SendBrev = request("SendBrev")
if SendBrev = "" then
Response.redirect "Fejl.asp"
end if

strSQL = "SELECT * FROM nyhedsbrev WHERE id = " & SendBrev
set rs = Conn.execute(strSQL)

BrevId = RS("id")
BrevEmne = RS("Emne")
BrevIndhold = RS("Indhold")
BrevIndhold = replace(BrevIndhold,vbcrlf,"<br>")
BrevBrev = RS("Brev")
BrevBrev = replace(BrevBrev,vbcrlf,"<br>")

rs.close


idStart = request("id")
if idStart = "" then
  idStart = 0
end if

strSQL = "SELECT * FROM bruger WHERE id > " & idStart & " AND nyhedsbrev = 'True' ORDER BY id;"
set rs = Conn.execute(strSQL)

AntalSendt = request("AntalSendt")
if AntalSendt = "" then
AntalSendt = 0
else
end if


on error resume next
EmailSend  = 0
Do While (not rs.EOF) AND (EmailSend < 10)
EmailSend = EmailSend + 1
AntalSendt = AntalSendt + 1

strId = RS("id")
strFornavn = RS("fornavn")
strEfternavn = RS("efternavn")
strEmail = RS("email")

'Her begynder mail at blive lavet
Set jmail = Server.CreateObject("JMail.Message")

'Adresse der bliver sendt fra
jmail.From = "robot@bodykits.dk"

'Emne linjer
jmail.Subject = BrevEmne
jmail.Body = BrevEmne

'Henter modtagerens mail adresse og navn
jmail.AddRecipient ""&strEmail&"", ""&strFornavn&""

'Beskeden
jmail.HTMLBody = "<html><body><font face='Arial' size='2'>"
jmail.appendHTML "Hej " & strFornavn & " " & strEfternavn & ",<br><br>"
jmail.appendHTML "Bodykits nyhedsbrev nr. 1<br><br>"
jmail.appendHTML "I dette nyhedsbrev kan du læse om følgende:<br><br>"
jmail.appendHTML BrevIndhold
jmail.appendHTML "<br><br>"
jmail.appendHTML BrevBrev
jmail.appendHTML "</font></body></html>"

'Hvis du ikke kan læse HTML
jmail.Body = "Denne mail indeholder tegn som du ikke kan se her."
jmail.appendText "Denne mail indeholder tegn som du ikke kan se her."

jmail.Send( "mail.bodykits.dk" )
     
rs.MoveNext
Loop
   
    if (NOT rs.EOF) AND (EmailSend = 10) then
   
    'Manul reload
    'Response.write "<a HREF='test.asp?id="
    'Response.write strId
    'Response.write "&AntalSendt="
    'Response.write AntalSendt
    'Response.write "&SendBrev="
    'Response.write BrevId
    'Response.write "'>Send de næste 10 mails</a><br>"
   
    'Automatisk reload med pause
    Response.write "<meta Http-equiv='Refresh' Content='4; Url=test.asp?id="
    Response.write strId
    Response.write "&AntalSendt="
    Response.write AntalSendt
    Response.write "&SendBrev="
    Response.write BrevId
    Response.write "'>"
   
    end if

    rs.close


Set rs2 = Conn.Execute("SELECT COUNT(id) AS Antal From bruger WHERE nyhedsbrev = 'True'")
str2AntalModtagerIalt = rs2("antal")
rs2.Close




Response.write "<table border='0' width='100%' height='100%' cellspacing='0' cellpadding='0'>"
Response.write "<tr>"
Response.write "<td width='100%'><p align='center'>"

Response.write "<font face='Arial' size='2'><b><br>"
Response.write AntalSendt
Response.write " af "
Response.write str2AntalModtagerIalt
Response.write "</b></font>"

If str2AntalModtagerIalt > 0 Then ' Calculate the percentage
  Procent = Int((AntalSendt / str2AntalModtagerIalt) * 100)
Else
  Procent = 0
End If

Response.write "</p>"
Response.write "<div align='center'><center><table border='1' width='300' cellspacing='0' cellpadding='0' height='6' bordercolor='Green'>"
Response.write "<tr>"
Response.write "<td width='100%' height='6'><table border='0' width='"
Response.write Procent
Response.write "%' height='4' bgcolor='#008000' cellspacing='0' cellpadding='0'>"
Response.write "<tr>"
Response.write "<td width='100%'><font face='Arial' size='1' color='#FFFFFF'><center>"
Response.write Procent
Response.write "%"
Response.write "</center></font></td>"
Response.write "</tr>"
Response.write "</table>"
Response.write "</td>"
Response.write "</tr>"
Response.write "</table>"
Response.write "</center></div><p align='center'>"

if FormatDateTime(AntalSendt,vbShortDate) = FormatDateTime(str2AntalModtagerIalt,vbShortDate) then
Response.write "<font face='Arial' size='2' color='Green'><b>Alle mails er sendt !!</b></font>"
else
Response.write "<font face='Arial' size='2' color='Red'><b>Sender... Vent venligst! - Må ikke stoppes !!!</b></font>"
end if

Response.write "</tr>"
Response.write "</table>"


%>
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