• User

    ritardare invio email asp

    Ciao a tutti...
    ho questo problema...invio periodicamente una newsletter ai nostri inscritti tramite uno script da me modificato. Praticamente prende gli indirizzi da database e le invia ad una ad una.
    Lo script funziona perfettamente, nessun errore e la maggior parte delle email arrivano a destinazione.
    Quello che avrei bisogno e di fare in modo che dopo ogni email inviata lo script si metta in pausa per 5-10 secondi e riprenda in modo da evitare che alcuni domini classifichino la mail come spam.
    Ho visto che in php c'e' una funzione "sleep" ma non riesco a trovare qualcosa del genere in Asp.

    Grazie mille


  • Moderatore

    Basta cercare su GG "sleep asp"

    😉


  • User

    ho provato ma non ho trovato nulla


  • User Attivo

  • Moderatore

    In effetti quello che tenti di fare non credo sia possibile. Infatti, poichè la tecnologia ASP non supporta nativamente il multithreading, non puoi creare uno script che, in maniera asincrona, invia mail e aspetta un tempo fissato. Dovresti inoltre settare un server.timeout che dipende dal numero di mail da inviare e che probabilmente eccede i limiti massimi prestabiliti.

    Per piccoli ritardi (dell'ordine di pochi secondi) potresti utilizzare questa funzione:

    
    <%
         function bSleep()
              Set WScript = Server.CreateObject("WScript.Shell")
              WScript.Sleep 2000
          end function
    %>
    
    

    Sempre che il tuo hoster non abbia bloccato, come sicuramente avrà fatto, l'utilizzo dell'oggetto WScript.Shell (cioè il controllo completo del server da linea di comando...)

    Perciò mi sa che dovrai abbandonare l'idea.
    PS: Perchè ti dovrebbero considerare come spammer? ha molti utenti che hanno lo stesso server di posta (SMTP)? Potresti distribuire la sequenza di mail inviate in modo tale che i server di posta siano "abbastanza" sparsi ed evitare blocchi di mail cha hanno tutte la stessa stringa dopo la chiocciola...;)


  • User

    @madai said:

    Usi SQL server?

    Nel caso: http://classicasp.aspfaq.com/general/how-do-i-make-my-asp-page-pause-or-sleep.html

    sono su windows server 2003 IIS 6

    Grazie per le risposte, vi allego copia dello script e se potete indicatemi come modificarlo inserendo la pausa tra do while e loop

    <%
    mittente=request("mittente")
    corpo1=request("Email")
    oggetto=request("Oggetto")
    provincia1=request("provincia")
    dim numero
    numero= 1
    DIM invioA, invioDa
    %>
    <%
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&server.mappath("/miodatabase.mdb")

    sql = "SELECT email FROM email where provincia like '%" & provincia1 & "%' "
    Set RS = Conn.Execute(SQL)
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn, 3, 3
    do while not rs.eof

    invioA = rs("email")

    '* voce da modificare con un indirizzo email che funga da mittente: 
    '* in caso di errore riceverete notifica a questo indirizzo un MAILER-DAEMON
    '* dato che cdosys supporta questa notifica
    

    invioDa = "mia@email"

    '* creo gli oggetti cdosys sul server e li gestisco
    

    Dim iMsg
    Dim iConf
    Dim Flds
    set iMsg = CreateObject("CDO.Message")
    set iConf = CreateObject("CDO.Configuration")
    Set Flds = iConf.Fields
    Flds("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    Flds("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "localhost"
    Flds("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 8025
    Flds("http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion") = True
    Flds.Update

    With iMsg

    Set .Configuration = iConf

    .CreateMHTMLBody corpo1

    .To = invioA

    .From = mittente

    .Subject = oggetto
    .Send
    End With
    numero=numero+1
    rs.movenext
    loop
    RS.Close
    Set RS=Nothing
    conn.Close
    Set conn=Nothing

    %>

    Grazie aspetto vostre notizie


  • User Attivo

    Io credo che l'unica soluzione da te applicabile sia quella di creare una funzione che fa un loop fino a quando la differenza tra il time() iniziale e quello dell'inizio di un nuovo ciclo non sia pari ai 5 secondi che richiedi. Questa applicazione però utilizzerà molte risorse del server, è quindi sconsigliabile.

    Perchè non applichi il consiglio di paocavo?

    Potresti distribuire la sequenza di mail inviate in modo tale che i server di posta siano "abbastanza" sparsi ed evitare blocchi di mail cha hanno tutte la stessa stringa dopo la chiocciola.


  • User

    questo l'ho già fatto, nel senso che ho diviso in blocchi di 200 ma il problema rimane..
    se invece decidessi di convertire lo script in php? purtoppo a differenza di asp lo conosco pochissimo, sapreste aiutarmi in questo?