aiuto per mailing list

annazampa

Nuovo Utente
3 Feb 2012
3
0
0
Ciao a tutti, sono nuova sia per il forum sia per il php
Purtroppo dalla grafica mi tocca imparare anche la programmazione... cosa non si fa pur di lavorare! E una settimana che sto facendo tentativi su tentativi per fare uno script che mi invii in automatico un messaggio html (e fin qui ci sono arrivata), il problema è che gli utenti sono circa un migliaio!!! chiedendo aiuto in giro mi hanno suggerito swiftmailer che dopo molti tentativi sono riuscita a fare qualcosina, tuttavia non va ancora bene, nel senso che una volta che inoltro i dati la pagina continua ad andare e non finisce di spedire tutti i messaggi (o almeno credo).

Posto lo script, se qualcuno gentilmente mi può dare suggerimenti

PHP:
<?php
require_once '/lib/swift_required.php';

if($_POST["send"]) {


$where = "idconfig = 1";
$mysql = new queryclass("mamba_newsletter_config", "", $where);
$mysql->select();
$config_admin_name = $mysql->result["config_admin_name"][1];
$config_admin_email = $mysql->result["config_admin_email"][1];
$config_label1 = $mysql->result["config_label1"][1];
$config_label2 = $mysql->result["config_label2"][1];
unset($mysql);

//riempo l'array con tutti gli indirizzi email:
$to[] = "tutti gli indirizzi email";

//dati smtp
$smtp_config = array(
'newsletter_title'=>'xxxxxxxx',
'name_from'=>'xxxxxxxx',
'email_from'=>'xxxxxxxx',
'email_to'=>'xxxxxxxxx',
'connection'=>'smtp.xxxxxxxxxxx',
'username'=>'xxxxxxxxxxxx',
'password'=>'xxxxxxxx',
'port'=> 25,
'encryption'=>false);

//Create the Transport
if(!$smtp_config['encryption']) {
$transport = Swift_SmtpTransport::newInstance($smtp_config['connection'], $smtp_config['port'])
->setUsername($smtp_config['username'])
->setPassword($smtp_config['password']);
} else {
$transport = Swift_SmtpTransport::newInstance($smtp_config['connection'], $smtp_config['port'])
->setUsername($smtp_config['username'])
->setPassword($smtp_config['password'])
->setEncryption($smtp_config['encryption']);
}

$mailer = new Swift_Mailer($transport);

$mailer->registerPlugin(new Swift_Plugins_AntiFloodPlugin(100, 30));
Swift_Preferences::getInstance()->setCacheType('null');

// Create email
$message = Swift_Message::newInstance();
$message->setSubject($smtp_config['newsletter_title']);
$message->setFrom(array($smtp_config['email_from'] => $smtp_config['name_from']));
$message->setMaxLineLength(1000);
$message->setEncoder(Swift_Encoding::get8BitEncoding());

//Send the message
$failedRecipients = array();
$numSent = 0;

foreach($to as $address => $name) {
if (is_int($address)) {
$message->setTo($name);
} else {
$message->setTo(array($address => $name));
}
$message->setBody($message_body,'text/html');
$numSent += $mailer->send($message, $failedRecipients);
}
echo '<div id="newsletter_wait">';
printf("Sent %d messages\n", $numSent);
echo '</div>';
};
?>


piu o meno è questo.

grazie!
annazampa
 
Ultima modifica di un moderatore:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
intendi che lo script si arresta senza finire il ciclo foreach e quindi non invia a tutti gli indirizzi?
se è così ho avuto anche io lo stesso problema è ho risolto:
1. mettendo nel ciclo usleep(500000) che lo arresta tra un invio e l'altro di mezzo secondo, questo per cercare di impedire l'intasamento del server di invio
2. usualmente il tempo di vita di uno script è 30 secondi (ini.php di default), quindi uno script che supera tale limite si arresta, quindi ho allungato
tale limite con l'istruzione set_time_limit
fatto questo a me a cominciato a funziare

PHP:
<?php
//set_time_limit allunga il tempo di vita dello script
//dovresti mettere (al posto di 240) il valore risultante da numero_indirizzi * 0.5 sec + un tot
set_time_limit(240);
//....

//.....
foreach($to as $address => $name) {
	if (is_int($address)) {
		$message->setTo($name);
	} else {
		$message->setTo(array($address => $name));
	}
	$message->setBody($message_body,'text/html');
	$numSent += $mailer->send($message, $failedRecipients);
	usleep(500000);//arresta il ciclo per mezzo secondo tra un invio e l'eltro
}
echo '<div id="newsletter_wait">';
printf("Sent %d messages\n", $numSent);
echo '</div>';
};
?>
certo io lavoravo in locale
prova, al massimo non funzia
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
borgo, non è più semplice scrivere:
PHP:
set_time_limit(0);
Per disabilitare completamente il limite di tempo?

Altra cosa: puoi risparmiare tempo togliendo la chiamata a setBody dal ciclo.
PHP:
$message->setBody($message_body, 'text/html');
foreach ($to as $address => $name) {
    if (is_int($address)) {
        $message->setTo($name);
    } else {
        $message->setTo(array($address => $name));
    }

    $numSent += $mailer->send($message, $failedRecipients);
}
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
@alex: hai ragione, poi un'altra cosa (ma io uso phpmailler):
quando mi ero fatto lo script ho dovuto mettere
$Emailmessaggio->ClearAddresses();
perche altrimenti al primo mi inviava
pinco
al secondo
pinco e pallo
el terzo
pinco, pallo e sempronio
non è da prevedere anche con Swift?
 

annazampa

Nuovo Utente
3 Feb 2012
3
0
0
Grazie davvero ragazzi!
ho provato a inserire i suggerimenti di borgo italia, vediamo cosa succede quando inviano la prossima newsletter.

grazie anche ad alessandro1997
purtroppo non posso spostare il setBody perché ho inserito il link personalizzato per ogni utente per cancellarsi dalla newsletter :)

vi spiego meglio cosa succedeva:
cliccando il pulsante invia il php esegue lo script ma la pagina non finisce di caricarsi (rimane la "rotellina") e non conclude il caricamento.
Il cliente ha dei dubbi che i messaggi non partono :-(
magari con i suggerimenti di borgo funziona meglio!

ho sentito parlare anche dell'invio in batch o qualcosa di simile, che a quel che ho capito lo script esegue l'invio in background dopo l'invio…
ho capito giusto?

grazie annazampa
 
Discussioni simili
Autore Titolo Forum Risposte Data
E Aiuto per query PHP 8
I aiuto urgente per thunderbird Posta Elettronica 0
I aiuto per outlook Posta Elettronica 0
T aiuto per trasformare un quiz fatto in JS in un quiz in JQUERY jQuery 0
M Fullcalendar in Codeigniter, un aiuto per la chiamata $ajax ? jQuery 0
P Aiuto per rendere un Bot Telegram Privato PHP 1
A Aiuto per pagina php PHP 0
T cercasi aiuto per file d1 (open-edge db) Database 0
L Aiuto per programma web php/mySQL PHP 2
claudio_lorenzo [Javascript] aiuto su jquery per calcolo altezze dom Javascript 1
T Aiuto per php7 e mysqli PHP 3
T mysql tutorial per importare tabelle access in mysql aiuto MySQL 2
wildcity9 aiuto per sbloccare account instagram bannati Social Media Marketing 0
A Aiuto per configurare il banner di Iubenda su un sito in html HTML e CSS 0
S [PHP] Aiuto creazione form php per completamento modello word PHP 1
Z [HTML] aiuto per visualizzazione su tablet Offerte e Richieste di Lavoro e/o Collaborazione 6
W [PHP] Un aiuto per il mio primo "Multithread" PHP 0
G Vuoi fare successo? Abbiamo bisogno di aiuto per un app! Offerte e Richieste di Lavoro e/o Collaborazione 1
K [javascript] Aiuto per programma subnetting Javascript 0
F ciao, sono ferro e ho bisogno di aiuto per problemi con la mail di alice.it Presentati al Forum 1
L [PHP] aiuto per installazione mrbs PHP 0
1 Aiuto per nuovo sito SEO e Posizionamento 4
K Server per sito di annunci: aiuto nella scelta Hosting 4
P [Javascript] Aiuto per recupero variabili da script Javascript 10
P [PHP] Aiuto per gestione file CSV PHP 24
A scambio lavoro per aiuto con android Sviluppo app per Android 0
A aiuto per un codice... PHP 1
ecosito Aiuto con la traduzione in italiano per capire come installare questo JavaScript jQuery 0
StelladelSud Cerco aiuto per una demo Offerte e Richieste di Lavoro e/o Collaborazione 3
G Piccolo aiuto per php mail PHP 2
G aiuto per semplice menu onclick HTML e CSS 6
F aiuto per funzionamento sito responsive e form contatti HTML e CSS 29
A AIUTO per impostazione doppia cifra in tabella HTML e CSS 6
G Passaggio variabili tra pagine- Aiuto per maturità 2015 PHP 3
G Passaggio variabili tra pagine- Aiuto per maturità 2015 PHP 0
A Aiuto per Flash player Flash 0
J Aiuto per localstorage con jquery/js/json Javascript 4
M Cerco aiuto per una modifica di un codice Javascript 2
A Aiuto per ordine cronologico lista file all'interno di una cartella protetta PHP 2
G Aiuto! Studente cerca aiuto per un codice PHP PHP 1
S Aiuto per 2 codifiche java Java 4
G Aiuto per creare chat stile Facebook Javascript 7
Sevenjeak Aiuto e consigli su adattamento sito per dispositivi mobile HTML e CSS 2
S aiuto per script PHP/OOP PHP 2
J Aiuto per un sitema di upload per un progetto PHP 0
K Aiuto per sito Discussioni Varie 0
D Richiesta aiuto siti per indirizzamento forum HTML e CSS 1
M Aiuto per una libreria per generare grafici PHP 1
B Saluti ed aiuto per pagina web html HTML e CSS 11
I Aiuto per modificare gruppo buddypress WordPress 0

Discussioni simili