Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    invio e-mail massivo e smtp

    Ciao a tutti,
    sul mio sito ho realizzato una funzionalità per gestire l'invio delle newsletter del sito con tutti gli aggiornamenti ecc...
    Tutto funziona a dovere ma, avendo raggiunto un numero di circa 30.000 destinatari, la funzionalità manda in crisi SMTP e server in toto (cpu).
    Avete qualche buon consiglio di approccio per inviare le e-mail a blocchi più gestibili o altre soluzioni per evitare collassi?
    Io vorrei evitare di mandare n volte la stessa e-mail quindi mi piacerebbe gestire la cosa nello script asp.
    La prima cosa che mi è venuta in mente è di mettere un semplice delay di x secondi ogni 100 email ma, a parte il fatto che mi sembra un pò semplicistico, ho paura che lo script duri troppo tempo in questo modo. (adesso impiega cira 30 minuti senza mettere in crisi il sito).

    Ringrazio in anticipo per qualsiasi contributo
    Roberto
    http://www.italiankart.com/

  2. #2
    Ciao,
    non so che medoto attualmente utilizzi per l'invio delle mail visto che ASP prevede 2 metodi CDONTS e CDOSYS.
    Se ho capito bene, lo script che utilizzi ora invia tutte le mail singolarmente... ti incollo qui sotto un esempio che invia tutte le mail con l'esecuzione dello script una sola volta.

    <%
    Dim miaMail
    Set miaMail = CreateObject("CDONTS.NewMail")

    miaMail.From = "mittente@mittente.it"
    miaMail.To = "destinatario@destinatario.it"


    'Se sono più destinatari visibili
    'miaMail.cc = "webmaster@freeasp.it, info@freeasp.it"

    'Se sono più destinatari nascosti
    'miaMail.bcc = "webmaster@freeasp.it, info@freeasp.it"

    miaMail.Subject = "Oggetto della mail"
    miaMail.BodyFormat = 0
    miaMail.MailFormat = 0
    miaMail.Body = "Testo della mail"
    miaMail.Send

    Set miaMail = Nothing
    %>

    ecco invece un esempio di invio mail a destinatari multipli con il metodo CDOSYS


    <%
    Dim objMessage, objConfig

    'Crea gli oggetti per il messaggio e per la configurazione
    Set objMessage = CreateObject("CDO.Message")
    Set objConfig = CreateObject("CDO.Configuration")

    'Configurazione server smtp
    objConfig.Fields(cdoSendUsingMethod) = cdoSendUsingPort
    objConfig.Fields(cdoSMTPServer) = "server_smtp" ' in genere localhost
    objConfig.Fields(cdoSMTPServerPort) = 25

    'Aggiornamento configurazione
    objConfig.Fields.Update
    Set objMessage.Configuration = objConfig

    'crea il messaggio
    objMessage.To = " technt@alicomitalia.it "
    objMessage.Cc = " destinatario1@alicom.com ; destinatario2@tol.it "
    objMessage.Bcc = " tech@alicom.com "
    objMessage.From = """NT"" < technt@alicomitalia.it >"
    objMessage.ReplyTo = " technt@alicomitalia.it "
    objMessage.Subject = "Invio Email CDOsys"
    'objMessage.TextBody = "messaggio in formato testuale"
    objMessage.HtmlBody = "<html><body>messaggio in formato
    HTML</body></html>"

    ' gestione errori
    On Error Resume Next

    ' Send the CDOSYS Message
    objMessage.Send
    Set objMessage = Nothing
    Set objConfig = Nothing

    'visualizza un messaggio di ok in caso di invio senza problemi
    'altrimenti visualizza il messaggio di errore
    If Err.Number = 0 Then
    Response.Write "Il messaggio è stato inviato; nessun errore!<hr>"
    Else
    Response.Write Err.Description & "<hr>"
    Err.Number = 0
    End If
    On Error Goto 0

    %>
    Empirestate.it - La grande mela arriva in Italia
    sempre voluto sapere sulla grande mela, forum, articoli e molto altro ancora

    www.empirestate.it

  3. #3
    Ti ringrazio molto per la risposta.
    Hai ragione.. non ho detto il metodo.
    Utilizzo CDOSYS (win 2003).
    Prima effettuavo un invio unico con indirizzi in bcc ma ho dovuto e voluto cambiare perché:
    1. le e-mail in bcc non sono garantite (molte volte non arrivano) e io non posso metterle trasparenti per evitare una rivolta degli utenti
    2. con un numero elevato di destinatari il tempo di elaborazione è ancora più alto e si imballava ancora prima il server
    3. inviarle singolarmente mi permette di mettere il destinatario trasparente.

    Il codice che uso è come quello che hai postato.
    Mi chiedevo se c'erano ulteriori metodi dell'oggetto o.. workaround per gestire invii a blocchi oppure per limitare il flusso verso smtp..
    Mi veniva anche in mente se poteva essere sensato per esempio gestire apertura e chiusura connessione a smtp per ogni mail (come faccio adesso) oppure tenere aperta la connessione..

    Ciao
    Roberto
    http://www.italiankart.com/

  4. #4

    sto provando modifiche sul codice..

    Ciao a tutti,

    sto provando a modificare il mio codice di CDO e mi piacerebbe se qualcuno potesse aiutarmi a capire se la strada ha senso oppure no..
    premessa: il codice serve per inviare da 10.000 a 30.000 singole e-mail (con un solo destinatario in to)..
    Prima di incollare il nuovo codice metto in evidenza le modifiche inserite così potete dirmi la vostra..

    1. ho inserito un controllo che attende per 4 secondi ogni 200 e-mail (per fare stressare meno il servizio smtp..)
    2. ho aperto e gestito la configurazione CDO prima dell'inizio del ciclo e la chiudo dopo il ciclo (prima aprivo e chiudevo configurazione e messaggio per ogni e-mail del ciclo).
    (è sensato??)
    3. ho impostato il messaggio con priorità bassa .. può servire per stressare meno smtp?

    Grazie mille in anticipo!!


    ------------------ INIZIO CODICE ---------------

    Function Sleep(sec)
    Dim Start:Start = Timer:While (Timer-Start<sec):Wend
    End function

    'Configurazione server smtp
    Set objConfig = Server.CreateObject("CDO.Configuration")
    Set Fields = objConfig.Fields

    With Fields
    .Item(cdoSendUsingMethod) = cdoSendUsingPort
    .Item(cdoSMTPServer) = "localhost"
    .Item(cdoSMTPServerPort) = 25
    .Item(cdoSMTPConnectionTimeout) = 10
    .Update
    End With

    tpea=0
    for tpe=1 to num_mail
    DESTINATARIO=dest_mail_perf(tpe)
    Set objMessage = CreateObject("CDO.Message")
    Set objMessage.Configuration = objConfig
    With objMessage
    .From = MITTENTE
    .To = DESTINATARIO
    .Cc = COPIA
    .Bcc = COPIANASCOSTA
    .Subject = OGGETTO
    .HTMLBody = TESTO
    .Fields("urn:schemas:httpmail:importance").Value = 0
    .Fields("urn:schemas:mailheader:X-MSMail-Priority") = 6
    .Fields.Update()
    .Send
    End With
    Set Fields = Nothing
    Set objMessage = Nothing

    tpea=tpea+1
    if tpea=200 then
    '-------------------------------
    ' attesa prima di un nuovo invio
    '-------------------------------
    Sleep 3
    '-------------------------------
    ' fine attesa
    '-------------------------------
    tpea=0
    end if
    next

    Set objConfig = Nothing

    ------------------ FINE CODICE ---------------
    Roberto
    http://www.italiankart.com/

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.