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
11 svar · 541 visningar · startad av UrMe
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?
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
Låter som....vad heter det,......mmm .... mmm ... SPAM *asg*
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)
Hmm webbhotellet har inte Jmail bara CDONTS.. vad skulle vara en bra lösning att skicka ~10k mail med CDONTS?
Kanske man kan bunta ihop alla 10k mailen i BCC? Det behöver ju inte vara enskilda mail till varje person.
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.
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.
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]
.
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.
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/
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!"
%>