Avatar billede inkognito1 Nybegynder
30. november 2000 - 10:27 Der er 10 kommentarer og
1 løsning

Dele e-mail op i 30 adgangen !

Hej Eksperter !

Jeg har system der udfra en database henter e-mail adresser til mit nyhedsystem. Kan man lave sådan man sender eks. 30 adgangen. Den mail server jeg bruger desværre lidt følsom.

Her min kode ... Den virker med skal bare have dem delt op. 

Håber en vil hjælpe med at sætte det ind.

<%
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"Driver={Microsoft Access Driver (*.mdb)}; DBQ=d:\\home\\domaindk\\db\\users.mdb\"
   
    if sex = \"A\" AND alder = \"2\"  then
    strQuery = \"SELECT * FROM tblUserskld WHERE emailnews = \'Ja\' AND aktiv = \'Ja\' AND Cpr >= #\" & DateAdd(\"yyyy\",-18,Now) & \"#\"
    elseif sex = \"A\" AND alder = \"1\"  then
    strQuery = \"SELECT * FROM tblUserskld WHERE emailnews = \'Ja\' AND aktiv = \'Ja\' AND Cpr < #\" & DateAdd(\"yyyy\",-18,Now) & \"#\"
    elseif alder = \"1\" then
    strQuery = \"SELECT * FROM tblUserskld WHERE sex = \'\" & sex & \"\' AND emailnews = \'Ja\' aktiv = \'Ja\' AND Cpr < #\" & DateAdd(\"yyyy\",-20,Now) & \"#\"
    elseif alder = \"2\" then
    strQuery = \"SELECT * FROM tblUserskld WHERE sex = \'\" & sex & \"\' AND emailnews = \'Ja\' aktiv = \'Ja\' AND Cpr >= #\" & DateAdd(\"yyyy\",-20,Now) & \"#\"
    elseif alder = \"0\" AND sex = \"A\" then
    strQuery = \"SELECT * FROM tblUserskld WHERE aktiv = \'Ja\' AND emailnews = \'Ja\'\"
    elseif alder = \"0\" AND sex = \"K\" OR alder = \"0\" AND sex = \"M\" then
    strQuery = \"SELECT * FROM tblUserskld WHERE aktiv = \'Ja\' AND emailnews = \'Ja\' AND sex = \'\" & sex & \"\'\"
    end if
       
Set RS = Conn.Execute(strQuery)
If Not (rs.BOF Or rs.EOF) Then
send = \"true\"
Do While Not rs.EOF
navn = rs(\"username\")

if hvad = \"0\" then
Jmail.Sender = \"post@domain.dk\"
JMail.Subject = \"Nyhed fra www.domain.dk\"
JMail.Body = besked
Jmail.AddRecipient \"post@domain.dk\"
Jmail.AddRecipientBCC \"\" & rs(\"email\")
JMail.Priority = 3
response.write \"\" & rs(\"email\") & \" - \" & navn &\"<br>\"
end if



RS.movenext
loop

else
session(\"fejl\") = \"Der var ingen at sende til. Prøv med et andet køn osv..<br>\"
Response.Redirect \"email.asp?mode=fejl\"
END IF
RS.Close
Set RS = Nothing


if send = \"true\" then
JMail.Execute

end if
Set JMail = Nothing



elseif mode = \"fejl\" then


response.write \"\" & session(\"fejl\") & \"\"


end if

%>
Avatar billede tdaugaard Nybegynder
30. november 2000 - 11:32 #1
Lac en counter der tæller en op for hvert gennemført loop. Lav så en

If (counter MOD 30) = 0 Then JMail.Execute

så vil den sende for hver 30 mails der er tilføjet.
Avatar billede tdaugaard Nybegynder
30. november 2000 - 11:42 #2
Forøvrigt er det en dårlig ide at \"sætte\" JMail properties i hele loopet..
Avatar billede inkognito1 Nybegynder
30. november 2000 - 11:46 #3
kan du sætte det ind i min kode ..

Og fjerne de properties ?

så jeg sgu taknemlig ..
Avatar billede tdaugaard Nybegynder
30. november 2000 - 11:50 #4
*S* er i gang .. jeg tænkte nok du gerne ville have det ..
Avatar billede tdaugaard Nybegynder
30. november 2000 - 12:06 #5
noget a\'la det her !?
Jeg har af gode grunde ikke testet det ..

<%
    Set Conn = Server.CreateObject(\"ADODB.Connection\")
    Conn.Open \"Driver={Microsoft Access Driver (*.mdb)}; DBQ=d:\\home\\domaindk\\db\\users.mdb\"
   
    If sex = \"A\" And alder = \"2\" Then strQuery = \"SELECT * FROM tblUserskld WHERE emailnews = \'Ja\' AND aktiv = \'Ja\' AND Cpr >= #\" & DateAdd(\"yyyy\",-18,Now) & \"#\"
    If sex = \"A\" And alder = \"1\" Then strQuery = \"SELECT * FROM tblUserskld WHERE emailnews = \'Ja\' AND aktiv = \'Ja\' AND Cpr < #\" & DateAdd(\"yyyy\",-18,Now) & \"#\"
    If alder = \"1\" Then strQuery = \"SELECT * FROM tblUserskld WHERE sex = \'\" & sex & \"\' AND emailnews = \'Ja\' aktiv = \'Ja\' AND Cpr < #\" & DateAdd(\"yyyy\",-20,Now) & \"#\"
    If alder = \"2\" Then strQuery = \"SELECT * FROM tblUserskld WHERE sex = \'\" & sex & \"\' AND emailnews = \'Ja\' aktiv = \'Ja\' AND Cpr >= #\" & DateAdd(\"yyyy\",-20,Now) & \"#\"
    If alder = \"0\" And sex = \"A\" Then strQuery = \"SELECT * FROM tblUserskld WHERE aktiv = \'Ja\' AND emailnews = \'Ja\'\"
    If alder = \"0\" And sex = \"K\" Or alder = \"0\" And sex = \"M\" Then strQuery = \"SELECT * FROM tblUserskld WHERE aktiv = \'Ja\' AND emailnews = \'Ja\' AND sex = \'\" & sex & \"\'\"
       
    JMail.Sender = \"post@domain.dk\"
    JMail.Subject = \"Nyhed fra www.domain.dk\"
    JMail.Body = besked
    Jmail.AddRecipient \"post@domain.dk\"
    JMail.Priority = 3

    Set RS = Conn.Execute(strQuery)
    If Not (rs.BOF Or rs.EOF) Then
        send = false
        count = 0
       
        Do While Not rs.EOF
            navn = rs(\"username\")

            If hvad = \"0\" Then
                Jmail.AddRecipientBCC \"\" & rs(\"email\")
                send = false
               
                Response.Write \"\" & rs(\"email\") & \" - \" & navn &\"<br>\"
            End If

            If (count Mod 30) = 0 Then
                \' Send mailen
                JMail.Execute
                send = true
            End If
           
            RS.movenext
            count = count + 1
        Loop
    Else
        session(\"fejl\") = \"Der var ingen at sende til. Prøv med et andet køn osv..<br>\"
        Response.Redirect \"email.asp?mode=fejl\"
    End If
   
    RS.Close
    Set RS = Nothing

    \' Send mailen hvis ikke vi nåede op på 30
    if send = false then KMail.Execute
    Set JMail = Nothing
ElseIf mode = \"fejl\" Then
    Response.Write \"\" & session(\"fejl\") & \"\"
End If
%>   
Avatar billede soerens Nybegynder
30. november 2000 - 13:27 #6
Øhm, prøv at studere dokumentationen for JMail.

Der ligger nogle muligheder for at BulkMail\'e og for at sætte mails i en kø.

Jeg har ikke selv benyttet dem (endnu), men regner med at teste det af inden for den næste måneds tid.
Avatar billede soerens Nybegynder
30. november 2000 - 13:42 #7
tdaugaard: Øøøh, er du SIKKER på at det er JMail den er skrevet til? ;-)

Så vidt jeg ved så sender man med metoden JMail.Send(MySMTPServer) og ikke .Execute.

En MEGET VIGTIG DETALJE er desuden også at der i If-sætningen med Execute\'n skal indsættes en JMail.ClearRecipients, ellers vil der bare blive ved og ved og ved med at blive tilføjet modtagere.

Jeg vil væde med at de første modtagere i recordset\'et godt ku\' gå hen og blive en smule irriterede over det ;-)

Desuden har jeg en mistanke om (uden at være ekspert i subj.) at din rutine faktisk belaster endnu mere. Jeg vil prøve at forklare:

Forestil dig at der er 90 modtagere i recordsettet.

inkognito\'s originale rutine vil generere én mail med 90 modtagere.

tdaugaard-rutinen vil generere 3 mails med 30 modtagere.

Hmmm, jeg ved det ikke, men jeg TROR altså at sidstnævnte er det mest belastende.

Kig derfor lidt nærmere på Queue (MSPickupDirectory) metoden i JMail, den overlader 100% til postsystemet hvilket tempo det skal sende mailsene i.

Bare lige min kommentar, ved ikke om det er rigtigt ;-)
Avatar billede tdaugaard Nybegynder
30. november 2000 - 14:06 #8
soerens:> JMail, ja! Der er forskellige versioner af JMail.
JMail < 4.0 bruger .Execute, JMail 4.0 Bruger .Send(smtp_server)

MSPickupDirectory .. .nq (EnQueue) det er kun hvis du bruger MS SMTP server. Det har jeg fået af vide af en sysadm fra Struer.Net. Desuden findes .NQ ikke i den gratis version af JMail.
Avatar billede tdaugaard Nybegynder
30. november 2000 - 14:09 #9
FUCK! nu mistede jeg halvdelen af min kommentar pga. IE...

<%
    Set Conn = Server.CreateObject(\"ADODB.Connection\")
    Conn.Open \"Driver={Microsoft Access Driver (*.mdb)}; DBQ=d:\\home\\domaindk\\db\\users.mdb\"
   
    If sex = \"A\" And alder = \"2\" Then strQuery = \"SELECT * FROM tblUserskld WHERE emailnews = \'Ja\' AND aktiv = \'Ja\' AND Cpr >= #\" & DateAdd(\"yyyy\",-18,Now) & \"#\"
    If sex = \"A\" And alder = \"1\" Then strQuery = \"SELECT * FROM tblUserskld WHERE emailnews = \'Ja\' AND aktiv = \'Ja\' AND Cpr < #\" & DateAdd(\"yyyy\",-18,Now) & \"#\"
    If alder = \"1\" Then strQuery = \"SELECT * FROM tblUserskld WHERE sex = \'\" & sex & \"\' AND emailnews = \'Ja\' aktiv = \'Ja\' AND Cpr < #\" & DateAdd(\"yyyy\",-20,Now) & \"#\"
    If alder = \"2\" Then strQuery = \"SELECT * FROM tblUserskld WHERE sex = \'\" & sex & \"\' AND emailnews = \'Ja\' aktiv = \'Ja\' AND Cpr >= #\" & DateAdd(\"yyyy\",-20,Now) & \"#\"
    If alder = \"0\" And sex = \"A\" Then strQuery = \"SELECT * FROM tblUserskld WHERE aktiv = \'Ja\' AND emailnews = \'Ja\'\"
    If alder = \"0\" And sex = \"K\" Or alder = \"0\" And sex = \"M\" Then strQuery = \"SELECT * FROM tblUserskld WHERE aktiv = \'Ja\' AND emailnews = \'Ja\' AND sex = \'\" & sex & \"\'\"
       
    JMail.Sender = \"post@domain.dk\"
    JMail.Subject = \"Nyhed fra www.domain.dk\"
    JMail.Body = besked
    Jmail.AddRecipient \"post@domain.dk\"
    JMail.Priority = 3

    Set RS = Conn.Execute(strQuery)
    If Not (rs.BOF Or rs.EOF) Then
        send = false
        count = 0
       
        Do While Not rs.EOF
            navn = rs(\"username\")

            If hvad = \"0\" Then
                Jmail.AddRecipientBCC \"\" & rs(\"email\")
                send = false
               
                Response.Write \"\" & rs(\"email\") & \" - \" & navn &\"<br>\"
            End If

            If (count Mod 30) = 0 Then
                \' Send mailen
                JMail.Execute
                JMail.ClearRecipients
                Jmail.AddRecipient \"post@domain.dk\"

                send = true
            End If
           
            RS.movenext
            count = count + 1
        Loop
    Else
        session(\"fejl\") = \"Der var ingen at sende til. Prøv med et andet køn osv..<br>\"
        Response.Redirect \"email.asp?mode=fejl\"
    End If
   
    RS.Close
    Set RS = Nothing

    \' Send mailen hvis ikke vi nåede op på 30
    if send = false then KMail.Execute
    Set JMail = Nothing
ElseIf mode = \"fejl\" Then
    Response.Write \"\" & session(\"fejl\") & \"\"
End If
%>   
Avatar billede soerens Nybegynder
30. november 2000 - 14:18 #10
tdaugaard: Aaah, ja, så blev jeg da lidt klogere idag, det er jo også rart ;)

Jo, din rutine ser ok ud nu. Jeg vil dog stadig sætte et lille, bitte spørgsmålstegn ved om mailserveren bliver mindre belastet af at man sender en mail for hver 30. modtager...
Avatar billede tdaugaard Nybegynder
30. november 2000 - 15:04 #11
*S* okai ...
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