Avatar billede radiohead Nybegynder
10. november 2006 - 11:05 Der er 14 kommentarer og
1 løsning

Send nyhedsbreve afsted i "pakker"

Hej

Jeg skal sende et nyhedsbrev afsted til de 500-1000 mennesker der er på listen. (via Jmail)

Jeg går ud fra, at det ikke er holdbart at afsende dem alle på én gang, så derfor tænker jeg på at sende dem i "pakker".
F.eks. 25 mails hvert 2. minut over 40 minutter (hvilket svarer til 500 mails)
Kom gerne med forslag til en bedre løsning!!

Spørgsmålet er:
Hvordan tilpasser jeg scriptet sådan, at den afsender mailsene med pauser...?
Avatar billede ldanielsen Nybegynder
10. november 2006 - 12:41 #1
Der skal jo være en form for timer der styrer det, og der er forskellige muligheder.

Scheduled Task (Planlagte opgaver) i kontrolpanelet.
Hvis du har en MSSQL kan du bruge SQL Server Agent
Du kan lave det så det kører i MSIE, og så lave en forsinket reload med JAvaScript
Avatar billede radiohead Nybegynder
10. november 2006 - 13:34 #2
Det er fra en access db.

Jeg var selv ude i nogle tanker omkring, at lave noget paging-agtigt med mailadresserne - Og så "skifte side" hvert 2. minut.

Men det bliver nok noget af en høker-løsning.



Måske skulle jeg tilføje, at det hele kommer til at køre fra en administrations-side på hjemmesiden.
Avatar billede ellebaek Nybegynder
10. november 2006 - 15:20 #3
jeg kan da godt prøve at flette en mulighed sammen.:-)

hvad med noget i stilen af det her:


<%
number = request.querystring("number")
if not isNumeric(number) or number < 0 then
number = 0
end if
 
sql = "SELECT TOP 25 email, navn FROM tabel WHERE id >= " & number & " order by id asc"
'vælger de 25 næste mails. her skal feltnavnene rettes til.
set rsEmails = rs.execute(sql)
'der skal være en connection til databasen med navn rs.

if not rsEmails.eof then
response.write <html><head><META HTTP-EQUIV=""refresh""
content=""120;URL=thispage.asp?number=" & (number+25) & """></head><body>Sending mails number: " & number & " to " & (number+25) & "<br>Please do not navigate away from this site!!</body></html>"
Dim objMail ' Definer en variabel til mail objektet
while not rsEmails.eof

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

objMail.FromName = "Dit navn"
objMail.From = "dinmail@ditdomæne.dk"

objMail.AddRecipient rsEmails("email"), rsEmails("navn")

' Tilføj emnet på e-mailen
objMail.Subject = "nyhedsmail fra her fra."

' Til sidst skal vi så bare have tilføjet indholdet i mailen
objMail.Body = "Hejsa" & vbCrLf & vbCrLf & "Hermed en lille test-mail."

objMail.Logging = True
objMail.Silent = True

objMail.Send("mail.ditdomæne.dk")

rsEmails.movenext
wend
rsEmails.close
set rsEmails = nothing


else
response.write "All mails send succesfully"
end if
%>

jeg er ret sikker på dette rimelig simpelt kan sættes til at sende 25 mails afsted hvert andet minut.
Nu skal der så blot rettes navne på felter i databasen, og sættes en connection til databasen. Nu er det eneste problem så... hvordan modtager du indholdet til mail-bodyen? er det en request.form eller...? og det samme med meddelsens emne...

Det er måske ikke nogen specielt pæn løsning, men den burde virke:-)
Avatar billede radiohead Nybegynder
10. november 2006 - 15:44 #4
Ser fint ud :)

Eneste problem er at den bliver svær at teste. :)
Skidt at sende den afsted til 500+ mand, hvis der skulle ske en fejl :D

Og ja, selve mailen bliver skrevet designet i en wysiwyg, så det er vel bare at ændre til:

objMail.HTMLBody = Trim(request.form("newsletter")) ?

og det samme med emnet vel.
Avatar billede ellebaek Nybegynder
10. november 2006 - 15:51 #5
nix :-)

Ikke helt jo, for siden reloader sig selv, og derfor er formen ikke tilgængelig anden gang du skal sende til 2. omgang...

hvordan ser teksten ud, altså når du får den fra din request.form, er det så med html-tags osv? hvis det er det, så er det jo ikke det store problem, så kan vi bare lave en midlertidig txt fil, eller også lave et indlæg i databasen, hvilket nok er den bedste løsning, og så hente det ud derfra....

<%
number = request.querystring("number")
if not isNumeric(number) or number < 0 then
number = 0
end if

number_pr_page = 25 'antal mails der sendes af gangen..

sql = "SELECT TOP 25 email, navn FROM tabel WHERE id >= " & number & " order by id asc"
'vælger de 25 næste mails. her skal feltnavnene rettes til.
set rsEmails = rs.execute(sql)
'der skal være en connection til databasen med navn rs.

if not rsEmails.eof then
response.write <html><head><META HTTP-EQUIV=""refresh""
content=""120;URL=thispage.asp?number=" & (number+number_pr_page) & """></head><body>Sending mails number: " & number & " to " & (number+number_pr_page) & "<br>Please do not navigate away from this site!!</body></html>"
Dim objMail ' Definer en variabel til mail objektet
while not rsEmails.eof

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

objMail.FromName = "Dit navn"
objMail.From = "dinmail@ditdomæne.dk"

objMail.AddRecipient rsEmails("email"), rsEmails("navn")

' Tilføj emnet på e-mailen
objMail.Subject = "nyhedsmail fra her fra."

' Til sidst skal vi så bare have tilføjet indholdet i mailen
objMail.Body = "Hejsa" & vbCrLf & vbCrLf & "Hermed en lille test-mail."

objMail.Logging = True
objMail.Silent = True

objMail.Send("mail.ditdomæne.dk")

rsEmails.movenext
wend
rsEmails.close
set rsEmails = nothing


else
response.write "All mails send succesfully"
end if
%>

Men det med testningen kan jeg lige hurtigt klare for dig... laver det bare med 3 mails, hvor den så sender en af gangen til min egen mail :-)
Avatar billede ellebaek Nybegynder
10. november 2006 - 15:51 #6
hov, og forresten, lavede ikke de store ændringer i den kode jeg lige postede, ved ike helt hvorfor den skulle med, men lavede da i hvert fald en enkelt lille ændring i toppen :-)
Avatar billede ellebaek Nybegynder
10. november 2006 - 16:10 #7
det script her funger i hvert fald...

laver lige en lille extension med text-filer... så burde det være i orden... Så er der bare nogle småvariable du skal rette til så kan du bruge det skulle jeg mene....
Avatar billede radiohead Nybegynder
10. november 2006 - 16:20 #8
Når der klikkes på submit knappen, bliver det hele først smidt i en database, således at selve mail-designet forbliver tilgængeligt i wysiwyg-editoren til næste gang, der skal sendes nyhedsmail asted.

Og ja, det incl. HTML tags

Forresten hvorfor hedder det "JMail.Message" - Hvad er forskellen fra JMail.SMTPMail ?
Avatar billede radiohead Nybegynder
10. november 2006 - 16:22 #9
Så må det vel blive

objMail.HTMLBody = Response.Write rs("newsletter")
Avatar billede radiohead Nybegynder
10. november 2006 - 16:22 #10
uden "response.write" naturligvis ;)
Avatar billede radiohead Nybegynder
10. november 2006 - 16:24 #11
husk og læg svar forresten
Avatar billede ellebaek Nybegynder
10. november 2006 - 16:34 #12
okay... så du har tilgang til det hele i databasen... helt perfekt...

Så retter jeg lige det tilbage med text-filen...

har du koden til hvor du ligger det ind i databasen?
for det skal så ind i toppen af den her fil i stedet... der hvor jeg har sat en masse stjerner...

<%
conn = "DRIVER={Microsoft Access Driver (*.mdb)}; "
conn = conn & "DBQ=" & server.mappath("db1.mdb")
set rs = server.createObject("ADODB.Connection")


rs.open conn


if request.servervariables("request_method") = "POST" then
'det er første gang der postes, og der skal gemmes noget data i en text-fil som vi så kan hente igen senere.

*******Her skal gemmes i databasen!!!

end if





num = request.querystring("number")
if not isNumeric(num) or num < 1 or num = "" then
num = 1
end if

number_pr_page = 25 'antal mails der sendes af gangen..

sql = "SELECT TOP " & number_pr_page & " email, navn FROM emails WHERE id >= " & num & " order by id asc"

'vælger de 25 næste mails. her skal feltnavnene rettes til.
set rsEmails = rs.execute(sql)
'der skal være en connection til databasen med navn rs.

if not rsEmails.eof then


response.write "<html><head><META HTTP-EQUIV=""refresh"" content=""120;URL=" & request.servervariables("script_name") & "?number=" & (num+number_pr_page) & """></head><body>Sending mails number: " & num & " to " & (num+number_pr_page) & "<br>Please do not navigate away from this site!!</body></html>"
Dim objMail ' Definer en variabel til mail objektet
while not rsEmails.eof

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

objMail.FromName = "Dit navn"
objMail.From = "dinmail@ditdomæne.dk"

objMail.AddRecipient rsEmails("email"), rsEmails("navn")

' Tilføj emnet på e-mailen
objMail.Subject = "nyhedsmail fra her fra."

' Til sidst skal vi så bare have tilføjet indholdet i mailen


objMail.HTMLBody = rs("newsletter")


objMail.Logging = True
objMail.Silent = True

objMail.Send("mail.Ditdomæne.net")

rsEmails.movenext
wend
rsEmails.close
set rsEmails = nothing


else
response.write "All mails send succesfully"
end if
%>

Sådan her skulle jeg mene :-)
Avatar billede radiohead Nybegynder
10. november 2006 - 17:51 #13
Super, tusind tak for hjælpen!

Det leger jeg lidt med det :)
Avatar billede syntax_hh Nybegynder
11. november 2006 - 00:36 #14
Forresten du kan sagtens sende 1000 afsted på engang med JMail. Jeg taler af erfaring
Avatar billede radiohead Nybegynder
11. november 2006 - 22:17 #15
Det kommer vel også an på hvilken udgående server man har..? Nogle servere tillader vel mere end andre.
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