webForumDet fria alternativet

Skicka massutskick med ASP+Access.

ASP

11 svar · 541 visningar · startad av UrMe

Medlem sedan apr. 2001762 inlägg
Frågan#1

Hej,

En snabb fråga, om jag vill göra ett massutskick till runt 10000 emailadresser, så antar jag att jag får time out på scriptet innan den loopat igenom alla 10000. Hur ska man lösa det på bästa sättet? Jag kommer använda CDONTS för att skicka emailet.

Sökte lite här på forumet och hittade ett förslag att man satt en flagga i databasen t.ex en 1 när det har skickats ut, sedan när scriptet får timeout kör man igen till alla som inte har en etta.

Är detta ett bra sätt?

Medlem sedan juni 200032 967 inlägg
#2

Nej, det låter inte som något bra sätt. Använd en mailkomponent som stödjer köat utskick, ex. Jmail, med metod mailmerge el. dyl.

mvh

Medlem sedan dec. 20041 043 inlägg
#3

Låter som....vad heter det,......mmm .... mmm ... SPAM *asg*

Medlem sedan apr. 2001762 inlägg
#4

Nej det är inte spam :) Är ett engångsutskick till personer som redan medgivit att det skickas information till dem.

Anders, har du någon bra webbplats där man kan läsa mer om Jmail och mailmerge?

(Ska söka på detta forum med)

Medlem sedan apr. 2001762 inlägg
#5

Hmm webbhotellet har inte Jmail bara CDONTS.. vad skulle vara en bra lösning att skicka ~10k mail med CDONTS?

Medlem sedan apr. 2001762 inlägg
#6

Kanske man kan bunta ihop alla 10k mailen i BCC? Det behöver ju inte vara enskilda mail till varje person.

Medlem sedan feb. 200112 078 inlägg
#7

UrMe skrev:

Hmm webbhotellet har inte Jmail bara CDONTS.. vad skulle vara en bra lösning att skicka ~10k mail med CDONTS?

Du kan skicka t.ex. ett godtyckligt antal i flera omgångar, så kallad "batchning".

Skapa ett mail, sätt 100 mottagare som CC (eller motsvarande) och skicka. Skapa nästa mail, ta nästa 100, osv. Eller om CDONTS har något liknande JMail's mailmerge.

Medlem sedan apr. 2001762 inlägg
#8

Har inte hittat något liknande som Jmails mailmerge när jag sökt.

Men om man "bara" buntar ihop 100 mail.. pallar det med att skicka 100*100 mail innan scriptet får time out? Det svåra är ju att simulera detta innan man testar live.

Medlem sedan feb. 200112 078 inlägg
#9

Jag skulle nog gissa att den klarar det, eftersom komponenten ju bara vidarebefodrar mailet till mailservern, oavsett hur många CC's det har. Visst, det kanske tar lite tid att iterera igenom samlingen och hantera dem, men själva distributionen av mailet sköter ju mailservern. Det är ju det som är e-mail, "asynkron" kommunikation.

Dessutom kan du ju höja script-timeouten explicit ifall du vill det;

Server.ScriptTimeout = [i]N[/i]

.

Medlem sedan aug. 20002 272 inlägg
#10

Jag har kört ut mailutskick m.h.a. CDONTS och jag kan säga att det inte är speciellt smidigt, men det går ;) Jag körde stötvis ut 1000st mail utan problem.

Medlem sedan juli 2000231 inlägg
#11

Jag kan säga att jag höll också på och trilskades med CDONTS för stora utskick av enkäter med mera och det är helt klart värt att byta till ett webbhotell som har Jmail, det fungerar sååå mycket smidigare! Testa Digikom till exempel.

--------------------------------------
http://barometern.blogspot.com/

Medlem sedan apr. 2001762 inlägg
#12

Byta webbhotell är tyvärr inte möjligt just nu.

Jag skrev ihop ett script, detta borde väl kunna skicka iväg hur mycket mail som helst egentligen?

Jag buntar ihop 100 mail och skickar det, sedan kör jag en refresh på sidan och skickar nästa 100 mail.

<%
dim minCon
Sub dbOpen()
	Set minCon = Server.CreateObject( "Adodb.Connection" ) 
	minCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("emails.mdb")
End Sub

Sub dbClose()
	minCon.Close
	Set minCon = Nothing
End Sub

Call dbOpen()

set strSQL = minCon.execute("SELECT DISTINCT TOP 100 * FROM emails WHERE epost LIKE '%@%' AND skickat = 0")
Dim objMail
Set objMail = Server.CreateObject("CDONTS.NewMail")
objMail.From = "Namn <min@epost.se>"
objMail.To = "en@annan.epost"

strSQL.MoveFirst
bcclist = ""
separate = ""

dim counter

If Request.QueryString("counter") Is Nothing Then
	counter = 0
ElseIf IsNumeric(Request.QueryString("counter")) Then
	counter = Request.QueryString("counter")
End If

Do While Not strSQL.EOF
	If Not IsNull(strSQL("epost")) Then
		bcclist = bcclist & separate & strSQL("epost")
		separate = "; "
		
		updateSQL = "UPDATE emails SET skickat = 1 WHERE epost = '"& strSQL("epost") &"'"
		minCon.execute updateSQL,,128

		counter = counter + 1
	End If
strSQL.movenext
loop
strSQL.Close

objMail.Bcc = bcclist
objMail.Subject="Subject"
objMail.Body= "This will be the message body"

objMail.Send
Set objMail=nothing
Response.Buffer = true
Call dbClose()

%>
<META HTTP-EQUIV=Refresh CONTENT="1; URL=emailutskick.asp?counter=<%=counter%>">
<%
Response.Write "Skickat: "&counter&" antal emails!"
%>
256 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)