Avatar billede steen Nybegynder
24. april 2003 - 16:02 Der er 7 kommentarer og
2 løsninger

Det sikre og hurtige nyhedsbrev

Når jeg laver en funktion til at sende mails ud til flere personer (<1000) ad gangen benytter jeg oftest nedenstående metode:

Function SendMails(arrModtagere)
    Set objCDO = Server.CreateObject("CDONTS.NewMail")
        objCDO.From = "mailrobot"
        objCDO.Subject = "Sidste nyt!"
        objCDO.Body = "Nu skal du bare høre.... læs mere her..."
       
        For i = 0 To Ubound(arrModtagere)
            objCDO.To = arrModtagere(i)
            objCDO.Send
        Next
       
    Set objCDO = Nothing
End Function


Men når jeg så kommer op på flere brugere (>1000) bliver ovenstående metode simpelthen for langsom, og der kommer timeout. Ja jeg har selvfølgelig sat timeout tiden op til det umulige, men jeg syntes ikke det var den rigtige løsning. Derfor fandt jeg på følgende:


Function SendMails(arrModtagere)
    For i = 0 To Ubound(arrModtagere)
        strModtager = strModtager & "; " & arrModtagere(i)
    Next
   
    Set objCDO = Server.CreateObject("CDONTS.NewMail")
        objCDO.From = "mailrobot"
        objCDO.Subject = "Sidste nyt!"
        objCDO.Body = "Nu skal du bare høre.... læs mere her..."
        objCDO.BCC = strModtager
        objCDO.Send
    Set objCDO = Nothing
End Function

Problemet er nu, at jeg har modtaget en mail fra en nyhedsmodtager, der skriver at han kan se samtlige mailadresser i BCC, men er det ikke den der er "usynlig" for andre brugere?

Bemærk ovenstående kodeeksempler blot er for forståelsens skyld, så der er sikkert syntaksfejl m.m. ;-)

Men hvad er løsningen? hvad gør de af jer der sender mails ud til mange modtagere ad gangen?
Avatar billede tkjerulf Nybegynder
24. april 2003 - 16:14 #1
Hejsa, jeg bruger også cdonts, og har pt 4500 i min db, dette brev ryger ud hver uge...
Jeg havede selvsamme problem som du, så jeg kontaktde min serviceprovider, angåede serverens kapacitet, det var ingenting sagde han, og vi fandt ud af at følgende funger 1000%
læg mærke til at objektet bliver destrueret og oprettet igen, pr enkelt email, prøv det...

Do While Not rs.EOF

    %>
        <!--#include file ="../mailvariable.inc"-->
include fil indeholde: Set objCDO = Server.CreateObject("CDONTS.NewMail") osv...

    <%
    person = (rs("fname") & " <" & rs("email") & ">")
    mail.subject = subj
    mail.to = person

    mail.body="walla walla"
   
    mail.Send
    rs.movenext
    set mail=nothing
    Mail = close
   
Loop
Avatar billede oasen Nybegynder
24. april 2003 - 20:16 #2
Jeg vil nok foretrække at hælde det i en funktion i stedet, så du nemt kan tilgå det ethvert sted på siden;


Function SendMail(From, To, Subject, Body, Format)
    Set objCDO = Server.CreateObject("CDONTS.NewMail")
    objCDO.From = From
    objCDO.Subject = Subject
    objCDO.Importance = 2
    objCDO.BodyFormat = Format
    objCDO.Body = Body
    objCDO.To = To
    objCDO.Send
    Set objCDO = Nothing
End Function

Conn.Execute("Select Brugernavn, Email From Tabel")
While Not rs.EOF
    SendMail("Steen", rs("Email"), "Nyhedsbrev", "Hej " & rs("Brugernavn"), "1")
    rs.MoveNext
Wend
Avatar billede oasen Nybegynder
24. april 2003 - 20:22 #3
Jeg bruger ca. 5 sek pr. 1000 mails, selvom objektet kaldes ved hver mail.
Avatar billede oasen Nybegynder
24. april 2003 - 20:50 #4
Hvis du sender dem samtidig via Blind Copy, kan du ikke gøre dem personlige. F.eks. "Hej Bjarne... nu skal du bare høre..."
Avatar billede steen Nybegynder
25. april 2003 - 11:18 #5
oasen >> Jeg kan gå med til at mine mails IKKE er personlige. Det er netop sådan jeg har gjort det. Men hvordan i alhverden kan det så lade sig gøre at en enkelt bruger har fået blottet alle BCC's??
Avatar billede steen Nybegynder
25. april 2003 - 11:22 #6
Hmmm... hvad gør "de store" der f.eks sender 35.000 (ComputerWorld) eller flere mails ud. Tror i også de gør som os?
Avatar billede tkjerulf Nybegynder
25. april 2003 - 11:38 #7
Hej steen, ja jeg er pesonlig ikke en af de "store", men jeg har ca 4500 kunder, der ugentligt modtager en email, og her virker cdconts perfekt, sålænge man destuerer objektet, og opretter det igen. på denne måde undgår man også fejl som at bcc alligevel bliver vist. Dette tager serveren ca. 2 sekunder at behandle, og det er bare en mellemkraftig een. Dell Powerdege et eller andet...

Men jeg kender en i et firma hvor de sender ca. 5 mill emails ud pr. måned, (amerikansk firma), og tro det eller ej, de bruger cdonts. (PS jeg er ikke forhandler af cdonts LOL)
Avatar billede robson Nybegynder
25. april 2003 - 13:11 #8
Hej - jeg har "lyttet" lidt med i snakken... jeg har det problem at min udbyder IKKE understøtter CDONTS og jeg derfor er tvunget til at benytte JMail eller ASPMail. Her oplever jeg problemet med at serveren laver en timeout når jeg kommer op i nærheden af de 500 emails. Jeg benytter samme fremgangsmåde som oasen beskriver med en Function der bliver kaldt pr. mail der skal sendes!

Jeg tænkte så at en Response.Flush ved hver 100 e-mails ville løse problemet, men der kommer stadig timeout efter de 90 sec (default timeout).

Min eneste løsning har været at sætte Server.ScriptTimeout = 500 (eller højere)

...
Avatar billede oasen Nybegynder
26. april 2003 - 19:20 #9
Så vidt jeg ved, skal du også angive en egentlig modtager til mailen, hvilken der skal tages en kopi af:

Function SendMails(arrModtagere)
    For i = 0 To Ubound(arrModtagere)
        strModtager = strModtager & "; " & arrModtagere(i)
    Next
   
    Set objCDO = Server.CreateObject("CDONTS.NewMail")
        objCDO.From = "mailrobot"
        objCDO.Subject = "Sidste nyt!"
        objCDO.Body = "Nu skal du bare høre.... læs mere her..."
        objCDO.To = "mig@selv.dk"
        objCDO.BCC = strModtager
        objCDO.Send
    Set objCDO = Nothing
End Function

Se evt. her:
http://www.devasp.com/Samples/mail.asp
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