webForumDet fria alternativet

Jmail 100 i taget

ASP

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 →
Medlem sedan maj 2001420 inlägg
#21

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!

Medlem sedan mars 20002 836 inlägg
#22

ok,

red: glöm det .....

cya,
PatrikB

Medlem sedan mars 20002 836 inlägg
#23

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 "&nbsp;&nbsp;" & 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

Medlem sedan maj 2001420 inlägg
#24

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?

Medlem sedan maj 2001797 inlägg
#25

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

Medlem sedan dec. 19996 721 inlägg
#26

Lägg dig inte som Recipient utan som RecipientBCC

Medlem sedan maj 2001797 inlägg
#27

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!

Medlem sedan feb. 2001151 inlägg
#28

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
%>
Medlem sedan juni 200032 967 inlägg
#29

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

Medlem sedan feb. 2001151 inlägg
#30

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.

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)