Jag får Du lyckades!! URL: skicka.asp?times=1 även om jag har över 100 mailadresser på min testlista. Det borde väl stå times=3 (eller 2)
redigerad: Dock gick alla mail iväg ser jag!
Jmail 100 i taget
29 svar · 2 380 visningar · startad av timedia · sida 2 av 2
Frågan, av timedia
Har ett fungerande script, men gissar att jag får problem med att skicka 1400 mail. Finns det någon som kan bistå med att skriva om så den skickar 100 i taget? ...eller finns det något annat sätt att undvika timeout (som digikom accepterar)? <% Server.ScriptTimeout = 1600 %> Du lyckades!! <% Session.LCID = 1053 Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open("DRIVER={Microsoft
Läs frågan i sin helhet →ok, detta script e ett gammalt ett som jag hittade i gömmorna.
Du får modifiera det så att det passar dig + att du måste lägga till mail-koden. Nu skrivs bara alla mail ut för att man ska se att det funkar.
<%
Option Explicit
Response.Buffer = True
Response.Expires = -10
Dim strConnString
Dim strSQLeml
Dim objDB
Dim rstEmails
Dim varEmails
Dim lngMaxIndex
Dim lngStart
Dim lngMailsToSend
Dim lngTimes
Dim N
Dim strUrl
'## -- set defaults --
Call SetVars()
'## -- wich db to use --
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("[B]/db-folder/db-name.mdb[/B]")
'## -- open database --
Set objDB = GetConn(strConnString)
strSQLeml = "SELECT [B]EmailField[/B] FROM [B]EmailTable[/B]"
'## -- create recordset with all emails --
Set rstEmails = GetRS(strSQLeml, objDB)
'## -- get all emails as a 2-dimensional array --
varEmails = GetRows(rstEmails)
'## -- clean up --
Set rstEmails = Nothing
Set objDB = Nothing
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Sending...</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY bgcolor="#FFFFFF" text="#000000">
<%
'## -- check if any emails has been returned --
If IsArray(varEmails) Then
'## -- we have emails to send --
'## -- total emails to send --
lngMaxIndex = UBound(varEmails,2)
Response.Write "TOTAL MAILS TO BE SENT: " & lngMaxIndex & "<BR>"
'## -- check that start mail don+t go over max emails to send --
If Not lngStart >= lngMaxIndex Then
'## -- print to browser wich mail to start with --
Response.write "<BR>Start mail: " & lngStart & "<BR><BR>Sending:<BR>"
'## -- send mails in interval --
Call SendMails()
'## -- keep sending --
Call ReloadPage(1)
Response.Write "<P>" & lngStart + lngMailsToSend & " have been sent.</P>"
Else
Response.Write "All mails have been sent"
End If
Else
Response.Write "No mail found in database"
End If
%>
</BODY>
</HTML>
<%
'## -- set values --
Sub SetVars()
lngTimes = Request.QueryString("times")
If lngTimes = "" Then lngTimes = 0
'## -- how many mails to send per page --
lngMailsToSend = 50
'## -- get mail to start with --
lngStart = StartMail(lngTimes, lngMailsToSend)
End Sub
Sub ReloadPage(ByVal showSeconds)
strUrl = Request.ServerVariables("SCRIPT_NAME") & "?times=" & lngTimes + 1
Response.AddHeader "REFRESH", showSeconds & ";URL=" & strUrl
End Sub
'## -- send mails --
Sub SendMails()
'## -- loop throug mails to send --
For N = lngStart TO (lngStart + (lngMailsToSend - 1))
'## -- replace with mailing code --
Response.Write " " & varEmails(0,N) & "<BR>"
'## -- end replacing with mailing code --
'## -- so we don+t loop over the array index --
If N >= lngMaxIndex Then Exit For
Next
End Sub
'## -- get first index of mail to send --
Function StartMail(ByVal TimesSent, ByVal MaxToSend) ' As Long
StartMail = MaxToSend * TimesSent
End Function
'## -- creates and return an open connection to the database
'## specified in connString
'##
Function GetConn(ByVal connString) ' As ADODB.Connection
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open connString
'## -- return an open db-connection --
Set GetConn = objConn
End Function
'## -- creates and return a recordset
'##
Function GetRS(ByVal sqlQuery, oCnn) ' As Recordset
Dim rstTemp
Set rstTemp = oCnn.Execute(sqlQuery)
'## -- return recordset --
Set GetRS = rstTemp
End Function
'## -- get all posts from database as a
'## 2-dimensional array
'##
Function GetRows(oRs) ' As Variant
Dim varTemp(0,0) ' As Variant
If Not oRs.EOF Then
'## -- return all posts as a 2-dimensional array --
GetRows = oRs.GetRows()
Else
'## -- return as an empty 2-dimensional array --
GetRows = varTemp
End If
End Function
%>
Du får ändra de fetmarkerade ställena .......
cya,
PatrikB
hurra, nu börjar det bli bra
Tack PatrikB, men av någon anledning fungerar bara dom första 50 mailen. Alla 1400 mail går ut, men efter dom första 50 blir det bara tomma mail :(
Jag använder ditt script i sin helhet och visar här bara vad jag har ändrad.
'## -- replace with mailing code --
Response.Write " " & varEmails(0,N) & "<BR>"
Set JMail = Server.CreateObject("JMail.SMTPMail")
JMail.ServerAddress = "smtp.digikom.net"
JMail.Sender = "red@moviemix.nu"
JMail.Subject = "Nyhetsbrev från Moviemix"
JMail.AddRecipient "t.m@moviemix.nu"
JMail.AddRecipientBCC varEmails(0,N)
jmail.Body = request.form("text")
JMail.Priority = 3
JMail.AddHeader "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
JMail.Execute
'## -- end replacing with mailing code --
Följdfråga: Finns det något sätt att undvika att få 1400 mail själv?
Tre år senare försöker jag mig på samma grej, och frågan kvarstår:
Följdfråga: Finns det något sätt att undvika att få 1400 mail själv?
:OO
Lägg dig inte som Recipient utan som RecipientBCC
Ja det var ju enkelt. :)
Först funkade inte addrecipientbcc om inte addrecipient fanns med, men det löste sig på nåt sätt. Nu funkar det, tack ska du ha!
Försöker samma sak
försöker mej på med samma sak men får felmedelande
TOTAL MAILS TO BE SENT: 59
Start mail: 0
Sending:
bjarne@bjarne.nu
Microsoft VBScript runtime error '800a01f4'
Variable is undefined: 'JMail'
/sending.asp, line 115
Rad 115 är fetmarkerad.
Set JMail = Server.CreateObject ("JMail.SMTPMail")
Vanligt JMail enligt min JMail kod fungerar. sidan ligger på web10.com
<%
Option Explicit
Response.Buffer = True
Response.Expires = -10
Dim strConnString
Dim strSQLeml
Dim objDB
Dim rstEmails
Dim varEmails
Dim lngMaxIndex
Dim lngStart
Dim lngMailsToSend
Dim lngTimes
Dim N
Dim strUrl
'## -- set defaults --
Call SetVars()
'## -- wich db to use --
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/db/db2.mdb")
'## -- open database --
Set objDB = GetConn(strConnString)
strSQLeml = "SELECT EmailField FROM EmailTable"
'## -- create recordset with all emails --
Set rstEmails = GetRS(strSQLeml, objDB)
'## -- get all emails as a 2-dimensional array --
varEmails = GetRows(rstEmails)
'## -- clean up --
Set rstEmails = Nothing
Set objDB = Nothing
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Sending...</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY bgcolor="#FFFFFF" text="#000000">
<%
'## -- check if any emails has been returned --
If IsArray(varEmails) Then
'## -- we have emails to send --
'## -- total emails to send --
lngMaxIndex = UBound(varEmails,2)
Response.Write "TOTAL MAILS TO BE SENT: " & lngMaxIndex & "<BR>"
'## -- check that start mail don+t go over max emails to send --
If Not lngStart >= lngMaxIndex Then
'## -- print to browser wich mail to start with --
Response.write "<BR>Start mail: " & lngStart & "<BR><BR>Sending:<BR>"
'## -- send mails in interval --
Call SendMails()
'## -- keep sending --
Call ReloadPage(1)
Response.Write "<P>" & lngStart + lngMailsToSend & " have been sent.</P>"
Else
Response.Write "All mails have been sent"
End If
Else
Response.Write "No mail found in database"
End If
%>
</BODY>
</HTML>
<%
'## -- set values --
Sub SetVars()
lngTimes = Request.QueryString("times")
If lngTimes = "" Then lngTimes = 0
'## -- how many mails to send per page --
lngMailsToSend = 50
'## -- get mail to start with --
lngStart = StartMail(lngTimes, lngMailsToSend)
End Sub
Sub ReloadPage(ByVal showSeconds)
strUrl = Request.ServerVariables("SCRIPT_NAME") & "?times=" & lngTimes + 1
Response.AddHeader "REFRESH", showSeconds & ";URL=" & strUrl
End Sub
'## -- send mails --
Sub SendMails()
'## -- loop throug mails to send --
For N = lngStart TO (lngStart + (lngMailsToSend - 1))
'## -- replace with mailing code --
Response.Write " " & varEmails(0,N) & "<BR>"
[B]Set JMail = Server.CreateObject ("JMail.SMTPMail")[/B]
JMail.ServerAddress = "localhost"
JMail.Sender = "enrajbs@hotmail.com"
JMail.Subject = "Meddelandets ämnesrad"
JMail.AddRecipient "enrajbs@hotmail.com"
JMail.AddRecipientBCC varEmails(0,N)
jmail.Body = request.form("text")
JMail.Execute
'## -- end replacing with mailing code --
'## -- so we don+t loop over the array index --
If N >= lngMaxIndex Then Exit For
Next
End Sub
'## -- get first index of mail to send --
Function StartMail(ByVal TimesSent, ByVal MaxToSend) ' As Long
StartMail = MaxToSend * TimesSent
End Function
'## -- creates and return an open connection to the database
'## specified in connString
'##
Function GetConn(ByVal connString) ' As ADODB.Connection
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open connString
'## -- return an open db-connection --
Set GetConn = objConn
End Function
'## -- creates and return a recordset
'##
Function GetRS(ByVal sqlQuery, oCnn) ' As Recordset
Dim rstTemp
Set rstTemp = oCnn.Execute(sqlQuery)
'## -- return recordset --
Set GetRS = rstTemp
End Function
'## -- get all posts from database as a
'## 2-dimensional array
'##
Function GetRows(oRs) ' As Variant
Dim varTemp(0,0) ' As Variant
If Not oRs.EOF Then
'## -- return all posts as a 2-dimensional array --
GetRows = oRs.GetRows()
Else
'## -- return as an empty 2-dimensional array --
GetRows = varTemp
End If
End Function
%>
Grundlektion 1: Eftersom du använder Option Explicit måste du deklararera alla dina variabler. Således får du lägga in dim Jmail innan du försöker dig på att skapa det objektet.
Mvh
Tack!
Behöver mer hjälp.
Det skickas bara dom 50 första mailen även om det ser ut på asp sidan som den går vidare...
Då jag använder färdig kod som jag inte skrivit sjäv, så vet jag inte varför.

