Joomla.it Forum

Joomla! 1.5.x (versione con supporto terminato) => Joomla! 1.5 => : Xabaras78 10 Jun 2007, 15:09:16

: Temporizzare la phpmail
: Xabaras78 10 Jun 2007, 15:09:16
Ciao a tutti,
come e' noto, provando ad usare la funzione MassMail di joomla su altervista, molte delle mail non arrivano a destinazione, perche' c'e' un limite di invio di 2 mail ogni 3 secondi imposto dal server... Suggeriscono quindi di impostare un timer (tale sleep(3)) all'interno del ciclo while che gestisce la mail... Il problema e'... dove si trova questo ciclo? all'interno di quale file? Se qualcuno sa darmi qualche dritta...
grazie e ciao
 :)
: Re: Temporizzare la phpmail
: swedenfox 10 Jun 2007, 16:02:04
si trova /administrator/components/com_massmail/admin.massmail.php
questa è la funzione
:
function sendMail() {
global $database, $my, $acl;
global $mosConfig_sitename;
global $mosConfig_mailfrom, $mosConfig_fromname;

$mode = intval( mosGetParam( $_POST, 'mm_mode', 0 ) );
$subject = strval( mosGetParam( $_POST, 'mm_subject', '' ) );
$gou = mosGetParam( $_POST, 'mm_group', NULL );
$recurse = strval( mosGetParam( $_POST, 'mm_recurse', 'NO_RECURSE' ) );
// pulls message inoformation either in text or html format
if ( $mode ) {
$message_body = $_POST['mm_message'];
} else {
// automatically removes html formatting
$message_body = strval( mosGetParam( $_POST, 'mm_message', '' ) );
}
$message_body = stripslashes( $message_body );

if (!$message_body || !$subject || $gou === null) {
mosRedirect( 'index2.php?option=com_massmail&mosmsg=Compilare la form correttamente' );
}

// get users in the group out of the acl
$to = $acl->get_group_objects( $gou, 'ARO', $recurse );

$rows = array();
if ( count( $to['users'] ) || $gou === '0' ) {
// Get sending email address
$query = "SELECT email"
. "\n FROM #__users"
. "\n WHERE id = " . (int) $my->id
;
$database->setQuery( $query );
$my->email = $database->loadResult();

mosArrayToInts( $to['users'] );
$user_ids = 'id=' . implode( ' OR id=', $to['users'] );

// Get all users email and group except for senders
$query = "SELECT email"
. "\n FROM #__users"
. "\n WHERE id != " . (int) $my->id
. ( $gou !== '0' ? " AND ( $user_ids )" : '' )
;
$database->setQuery( $query );
$rows = $database->loadObjectList();

// Build e-mail message format
$message_header = sprintf( _MASSMAIL_MESSAGE, html_entity_decode($mosConfig_sitename, ENT_QUOTES) );
$message = $message_header . $message_body;
$subject = html_entity_decode($mosConfig_sitename, ENT_QUOTES) . ' / '. stripslashes( $subject);

//Send email
foreach ($rows as $row) {
mosMail( $mosConfig_mailfrom, $mosConfig_fromname, $row->email, $subject, $message, $mode );
}
}

$msg = 'E-mail inviata a '. count( $rows ) .' utenti';
mosRedirect( 'index2.php?option=com_massmail', $msg );
}
?>

: Re: Temporizzare la phpmail
: Xabaras78 10 Jun 2007, 16:51:36
sì nel frattempo l'avevo trovato, grazie.... ho messo uno sleep(4) dopo il foreach verso la fine, proprio nella sezione //sendmail... Il problema e' che pare andare tutto bene, poi pero' durante l'invio delle mail, dal pannello di controllo di joomla, invece di dire "inviate mail a tot utenti", dopo aver macinato un po', lo schermo diventa bianco, firefox riporta la dicitura "completato" e nulla piu' si muove... e facendo un controllo la mail e' stata inviata correttamente solo alle prime 10-15 persone...
: Re: Temporizzare la phpmail
: swedenfox 10 Jun 2007, 16:58:21
l'idea dello sleep va bene, ma devi aggiungerci un contatore

ricordati che su av il tempo dell'esecuzione dello script è 15 secondi quindi non arriveresti neanche a 10 iscritti

: Re: Temporizzare la phpmail
: Xabaras78 10 Jun 2007, 17:33:53
Ah questa dei 15 secondi mi mancava...
grazie ancora
: Re: Temporizzare la phpmail
: swedenfox 10 Jun 2007, 17:36:46
Ah questa dei 15 secondi mi mancava...
grazie ancora

ti ho scritto in pm una possibile modifica testala poi se va bene la si posta qui   ;)

o in caso correggila  8)
: Re: Temporizzare la phpmail
: Xabaras78 10 Jun 2007, 18:06:37
Letto e risposto, grazie  ;)