Pagina 2 di 7 primaprima 1 2 3 4 ... ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 69

Discussione: invio di molte mail

  1. #11
    questa cosa di suddividere e temporizzare e' molto orientata all'architettura che hai...
    in linea di massima si tratterebbe di avere un cluster di macchine che possono spedire e un oscript centrale che controlla lo stato di invio sulle varie macchine e affida nuovi blocchi di spedizione alle macchine...
    il carico lo puopi valutare in vari modi, la misura della coda del qmail ad esempio, il load della macchina, il numero di messaggi ancora da processare...

    un discorso e' inviare una newsletter di 1000 email, uno discorso invare 100.000 messaggi, la seconda cosa implica l'esistenza di una struttura di un certo livello in grado di gestire problematice piu' complesse

  2. #12
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    1,471
    la newsletter adesso arriva a quasi 3000 iscritti per cui non ho il problema di suddividerlo su + macchine, nè voglio complicarmi la vita. Mi hanno chiesto di fare uno script in php che ritardi l'invio delle email e di dividerlo in + pacchetti. Se c'era già qualcosa a cui potevo fare riferimento per adesso .....

  3. #13
    non so quanto convenga fare cose del genere in php...
    l'interprete esterno e' abbastanza pesante

  4. #14
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    1,471
    mi hanno consigliato di utilizzare "socket" (non vorrei sbagliare a scriverlo) di più non ti so dire, anche perchè sto incominciando adesso ad affrontare il problema e mi interessavano consigli su chi aveva avuto problematiche simili.

    Sicuramente lenna, mi puoi dare qualche giusto consiglio per cominciare almeno con il piede giusto.
    Ti ringrazio in anticipo.


  5. #15
    non saprei che dirti...
    se hai liberta' e dimestichezza con i sistemi che userai personalmente valuterei l'utilizzo di altri linguaggi al posto del php, nonostante gli svariati utilizzi php e' comunque un preprocessore di ipertesti, e nell'invio di email non mi sembra che ci siano ipertesti da preprocessare
    piuttosto c'e' da comunicare in maniera veloce e diretta con altre applicazioni (qmail, sendmail, postfix ad esempio) del sistema

  6. #16

    script interessante

    saluti a tutti,
    non risolve certo i problemi di affaticamento del server ma evita il timeout del browser.

    Lo trovate qui:
    https://de.zend.com/codex.php?id=1136&single=1

    Credo funzioni sono con sendmail però.
    E credo di aver capito che in pratica faccia questo:

    crea uno script di shell in cui mette la funzione che spedisce la mail. Devi solo passare un arrqy con i dati della mail (from,subject,body....) e un array con i destinatari.
    Poi ci pensa da se.

    (Perdonatemi se ho fatto qualche errore grossolano ma non sono davvero troppo pratica di queste cose)

    Fatto sta che sembra funzionare.
    Credo cmq che convenga passare blocchi di 100 destinatari o giù di lì.

    Ok...spero di essere stata utile.
    Bye
    I wanna be the one who walk in the sun
    girls just want to have fun
    (Cindy Lauper)

  7. #17
    Ciao,
    la soluzione che hai indicato è la stessa di una delle classi PEAR, dialoga direttamente con sendmail attraverso popen().
    Ed è una possibilità, anche se in ogni caso non farei eseguire lo script dal webserver ma solo dall'interprete php.

    Il problema del timeout è presente solo se si fa eseguire lo script dal webserver (può essere eliminato con set_time_limit(0)), ma ripeto è sconsigliabile far eseguire uno script del genere da apache o affini.

    La soluzione dei socket secondo me è la migliore per due ragioni:
    1) è indipendente dal MTA (qmail, sendmail etc.etc.) visto che usa il protocollo SMTP.

    2) Ti colleghi al MTA una sola volta, fai i tuoi comodi, e quando hai finito ti sconnetti.

    Sono a buon punto, entro sabato dovrei aver messo a punto una classe operativa e postare, anche perchè entro martedì dovrei finire il lavoro
    per favore NIENTE PVT TECNICI da sconosciuti

  8. #18
    Originariamente inviato da Fabio Heller
    Ciao,
    la soluzione che hai indicato è la stessa di una delle classi PEAR, dialoga direttamente con sendmail attraverso popen().
    Ed è una possibilità, anche se in ogni caso non farei eseguire lo script dal webserver ma solo dall'interprete php.

    Il problema del timeout è presente solo se si fa eseguire lo script dal webserver (può essere eliminato con set_time_limit(0)), ma ripeto è sconsigliabile far eseguire uno script del genere da apache o affini.

    La soluzione dei socket secondo me è la migliore per due ragioni:
    1) è indipendente dal MTA (qmail, sendmail etc.etc.) visto che usa il protocollo SMTP.

    2) Ti colleghi al MTA una sola volta, fai i tuoi comodi, e quando hai finito ti sconnetti.

    Sono a buon punto, entro sabato dovrei aver messo a punto una classe operativa e postare, anche perchè entro martedì dovrei finire il lavoro

    ok...una domanda molto stupida
    la connessione socket la fai con il tuo SMTP o con il server di posta del destinatario?
    I wanna be the one who walk in the sun
    girls just want to have fun
    (Cindy Lauper)

  9. #19
    Originariamente inviato da Poison_Ivy
    ok...una domanda molto stupida
    la connessione socket la fai con il tuo SMTP o con il server di posta del destinatario?
    Molto meglio con quello più vicino possibile, cioè quello del tuo server, anche perchè ormai sono rari i server SMTP che accettano di inviare mail per conto di chi si connette da IP sconosciuti senza effettuare un'autenticazione (colpa dello spamming).
    per favore NIENTE PVT TECNICI da sconosciuti

  10. #20
    Ok, meglio tardi che mai


    Ecco una classe per inviare mail a ripetizione dialogando direttamente con il server SMTP (sendmail, qmail....qualunque sia)

    Se si tratta di inviare la stessa identica mail a più utenti possiamo usare tranquillamente la funzione mail e inserire i vari utenti tra gli header Cc (copia carbone) e Bcc (copia carbone nascosta).

    Se però il messaggio deve essere personalizzato per ogni utente (Es. nome e cognome) le cose si complicano e questa classe si rivela utile:

    infatti usando mail() tante volte quanti sono i messaggi ci connettiamo e disconnettiamo ad ogni messaggio creando un nuovo processo.

    Questa classe invece usa i socket in PHP per connettersi una volta, sfruttare il protocollo SMTP per inviare tutti i messaggi e poi disconnettersi solo alla fine.


    Breve documentazione (in attesa di un articolo in proposito)

    Essenzialmente ci sono 4 metodi:

    il costruttore SMTPmailer() più

    connect() : effettua la connessione, ed eventualmente il login in formato AUTH LOGIN

    close(): termina la connessione

    mail() : invia un singolo messaggio e consente di inviare un messaggio personalizato a più utenti senza spreco di risorse (connessione disconnessione)

    multiMail(): invia lo steso messaggio a più utenti (Cc e Bcc), il metodo è stao inserito solo per completezza dato che in realtà non fa nulla di più rispetto alla funzione predefinita di php mail()


    setHeader(). consente di impostare un header specifico , ad es. la priorità o la richiesta di conferma (vedi esempio più sotto)

    chFrom() consente di cambiare il mitente al volo (cioè impostarne uno diverso da quello indicato nel metodo costruttore) ma solo dopo la chiamata a connect() o a quit()

    getError() restituisce l'ultimo errore verificatosi


    I metodi nel dettaglio


    bool SMTPmailer(string host, string from [, int port=25][, int timeout=60])

    bool connect([ string hostForm][, string user][, string password])

    bool mail(string to ,string oggetto , string messaggio [,array headers])

    bool multiMail(arrayto ,string oggetto , string messaggio [,array headers])

    void setHeader(string header, string value)

    bool chFrom(string from)

    bool close()

    string getError()


    Esempi di utilizzo

    <?php
    /****
    ESEMPIO 1

    INVIO DI UN MESSAGGIO PERSONALIZZATO A PIU' UTENTI
    ****/

    include_once('SMTPmailer.php') ;


    /*
    Carico in un array gli indirizzi a cui mandare il messaggio , in questo caso si presume si trovino in file di testo
    */
    $arrayDestinatari=file('file_con_indirizzi.txt') ;


    $x=new SMTPmailer('mail.libero.it','fabio_heller@yahoo.it ') or die('Impossibile istanziare oggetto valido');


    $x->connect('www.qualsiasicosa.it') or die('Non riesco a connettermi '.$x->getError()) ;


    foreach($arrayDestinatari as $arr){


    $messaggioPersonalizzato=personalizzaMessaggio($me ssaggio);


    $x->mail($arr, 'Un oggetto qualsiasi', $messaggioPersonalizzato) or die( $x->getError() ) ;



    }

    $x->close() or die('Non riesco a chiudere') ;

    ?>


    <?php

    /****
    ESEMPIO 2

    simile al precedente ma questa volta con impostazione headers per la priorità e la conferma lettura
    ****/

    include_once('SMTPmailer.php') ;

    $x=new SMTPmailer('mail.libero.it','fabio_heller@yahoo.it ') or die('Impossibile istanziare oggetto valido');

    $x->connect('www.boh.com') or die('Non riesco a connettermi '.$x->getError()) ;

    //Priorità alta
    $x->setHeader('X-Priority', 1) ;

    $x->setHeader('Disposition-Notification-To', 'fabio_heller@yahoo.it') ;

    $altriHeaders=array('Reply-To'=> 'Mario Rossi<mario.rossi@tin.it>', 'Content-Type'=>'text/plain') ;


    $x->mail('mario.rossi@libero.it', 'Un messaggio interessante', 'Questo è il messaggio', $altriHeaders) or die($x->getError()) ;

    $x->close() or die('Non riesco a chiudere') ;


    ?>


    Come si può notare tutti gli header che non volete impostare con setHeader() li potete anche inserire come fareste con la funzione predefinita di php mail() ma nel caso di questa classe vanno in forma di array()

    <?php
    /****
    ESEMPIO 3
    mail a più destinatari con inserimento CC e Bcc
    ****/

    include_once('SMTPmailer.php') ;

    x=new SMTPmailer('mail.libero.it','fabio_heller@yahoo.it ') or die('Impossibile istanziare oggetto valido');

    $x->connect('www.quelchevuoi.biz') or die('Impossibile connettersi') ;


    $to=array() ;


    $to['Cc']=array('mario.rossi@libero.it', 'beppe.bianchi@libero.it') ;

    $to['Bcc']=array('mario.verde@libero.it', 'claudio.giallo@libero.it') ;

    $x->setHeader('X-Priority', 1) ;


    $altriHeaders=array('Reply-To'=> 'Pippo <mario.rossi@tin.it>', 'Content-Type'=>'text/plain') ;


    $x->multiMail($to, 'questo è l'oggetto', 'Questo il messaggio', $altriHeaders) or die('Non riesco a inviare '.$x->getError()) ;

    $x->close() or die('Non riesco a chiudere');

    ?>




    Lo script è pensato per essere eseguito direttamente dall'interprete Php
    (Es. http://it.php.net/manual/en/features.commandline.php), ma in ogni caso se dovete farlo eseguire attraverso Apache (o altro webserver) tale script rappresenta sempre una soluzione migliore rispetto all'uso della funzione Php predefinita mail() (quando si tratta di inviare messaggi personalizzati ad un numero elevato di utenti, vedi esempi 1 e 2).


    Qui lo zip con la classe (anzi le classi)

    http://www.infodiritto.it/SMTP/smtp_mailer.zip


    I tre file vanno mantenuti tra loro nelle stesse posizioni in cui li trovate, per far funzionare gli esempi basterà includere il percorso che avrete scelto fino al file SMTPmailer.php (che si arrangia ad includere gli altri due).


    Per un po' avrò da fare e non potrò fornire altra assistenza oltre a queste spiegazioni sommarie, ma vi garantisco che funziona

    Un' ultima avvertenza, per collegarvi ad un SMTP diverso da quello del provider che vi dà accesso internet dovrete usare connect() con l'autenticazione (ormai sono rari i server SMTP che accettano di inviare mail per conto di chiunque lo richieda).
    In libero/infostrada ad esempio sarebbe

    $x->connect($hostFrom, 'mario.rossi@libero.it', 'mypass') ;

    $hostFrom può essere una stringa qualsiasi, è solo una formalità

    Per ogni altro chiarimento, per ora, rinvio al protocollo SMTP.

    Più avanti altre news e miglioramenti
    per favore NIENTE PVT TECNICI da sconosciuti

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 © 2026 vBulletin Solutions, Inc. All rights reserved.