Joomla.it Forum
Non solo Joomla... => Sviluppo => : chico_ 07 Oct 2014, 21:38:49
-
Sono ancora io...
sono riuscito a creare un immagine barcode (in png), vedasi il mio post "Inviare mail con barcode come immagine incorporata" da inviare ad un utente incorporandola nella mail anziche' gestendola come immagine remota.
Adesso pero' mi trovo con un altro problema:
se cerco di inviare via mail l'immagine appena creata, al destinatario arriva la mail senza l'immagine. Inizialmente pensavo fosse un errore sintattico, ma poi mi sono reso conto che mandando una mail con un immagine creata precedentemente la mail arrivava con l'immagine correttamente aggiunta.
In pratica, è come se l'immagine venisse creata dopo l'invio della mail (ma il codice di creazione è precedente a quello dell'invio mail) o come se ci tenesse troppo tempo a crearsi , e nel frattempo l'email partisse e non trovandola ancora sul server non la incorporasse. Ma quest'ultima ipotesi non mi convince (l'immagine pesa 338 bytes).
Dove sbaglio?
Grazie
Chico_
p.s.:mi viene il dubbio che sia più una questione concettuale che relativa a Joomla, in tal caso mi scuso in anticipo per l'OT :-[
-
verifica bene la path: dubito che il processo di scrittura di una immagine vada in asincrono...
-
Ciao.
Alla fine ho trovato il metodo:
invece di generarla con html:
<?php $datobc="ZZK123456";?>
<img src="<?php echo JURI::base();?>moduli/barcode.php?barcode=<?php echo $datobc; ?>&width=320&height=80&format=png&nomefile=<?php echo $datobc; ?>" />
l'ho creata usando wget:
<?php
$datobc="ZZK123456";
$address='"'.JURI::base().'/moduli/barcode.php?barcode='.$datobc.'&width=320&height=80&nomefile='.$datobc.'"';
system('wget -O/dev/null '.$address );
?>
in entrambi i casi l'immagine viene generata, ma solo se creata con il secondo metodo viene allegata all'email..
Chico_
-
eh?! :o :o
al limite usa f[open|read|gets]() prima di spedire la mail, ma la chiamata system a wget mi lascia senza parole...
l'immagine con <img src dove viene creata? nello step (pagina) prima di spedire la mail? perché di sicuro non può essere nello stesso, dato che l'html viene processato dal browser dopo che il server ha processato il php...
sinceramente pensavo avessi modificato il codice per richiamarlo come funzione...
-
Questa è la sequenza di operazioni (uso chronoforms v4):
1) Registrazione utente tramite l'action "Joomla Users Registration". In caso di successo procedo con:
2) Creazione del barcode. Ho modificato il file barcode.php in questo modo (posto solo la parte incriminata)
//OutputImage ($im, $format, $quality); <-- codice originale dello script
imagepng( $im, $nomefile); /* <-- modifica inserita per salvare il file anziché generarne l'output a video
}
//-----------------------------------------------------------------------------
// Output an image to the browser
//-----------------------------------------------------------------------------
function OutputImage ($im, $format, $quality)
{
switch ($format)
{
case "JPEG":
ImageJPEG ($im, "", $quality);
break;
case "PNG":
ImagePNG ($im);
break;
case "GIF":
ImageGIF ($im);
break;
}
}
Visto che dovevo solo verificarne il funzionamento, inizialmente l'ho lasciato com'era senza richiamarlo come funzione, dato che comunque l'immagine la creava. Il barcode è legato all'ID utente appena registrato che recupero con
<?php $userid = $form->data['_PLUGINS_']['joomla_registration']['id']; ?>
2) Memorizzazione dei dati supplementari dell'utente inseriti nel form in una tabella creata ad hoc
3) Email all'amministratore con i dati dell'utente appena registrato
4) Invio dell'email all'utente contenente i dati di registrazione, il link per l'attivazione e il barcode incorporato nella mail
questo è il codice per l'invio della mail (in questa prima fase è strutturato solo per l'invio del barcode):<?php
$userid = $form->data['_PLUGINS_']['joomla_registration']['id'];
$nome = $form->data['name'];
$mail = $form->data['email'];
$numbcode=str_pad($userid,6,'0',STR_PAD_LEFT);
$mailer = JFactory::getMailer();
$config = JFactory::getConfig();
$sender = array(
$config->get( 'config.mailfrom' ),
$config->get( 'config.fromname' ) );
$mailer->setSender($sender);
$user = JFactory::getUser();
$recipient = $mail;
$mailer->addRecipient($recipient);
$body = '<h2>Our mail</h2>'
. '<div>-'.$numbcode.'- Test message'
. '<img src="cid:logo_id" alt="logo"/><>';
$mailer->isHTML(true);
$mailer->Encoding = 'base64';
$mailer->setBody($body);
// Optionally add embedded image
$bcode="moduli/ZZSXXXXXX.PNG";
$bcode=str_replace("XXXXXX",$numbcode,$bcode);
$mailer->AddEmbeddedImage($bcode, 'logo_id', $bcode, 'base64', 'image/png' );
// Optional file attached
/*$allegato="moduli/".$form->data['cf_pdf_file'];
$mailer->addAttachment($allegato);*/
$send = $mailer->Send();
if ( $send !== true ) {
echo 'Error sending email: ' . $send->__toString();
} else {
echo 'Mail sent';
}
?>
5) Output del messaggio di ringraziamento
Spero sia chiaro...
Grazie
Chico
-
Risolto.
l'errore stava nel fatto che (pensando di semplificare) avevo lasciato la generazione dell'immagine barcode con <img src...>.
Questo comportava, lavorando in HTML, che il codice di generazione immagine veniva eseguito DOPO il codice PHP, quindi l'immagine veniva generata dopo l'invio della mail (correggimi se sbaglio.....).
Ho quindi modificato il codice dello script richiamando barcode.php come funzione e adesso le mail arrivano con il barcode correttamente incorporato , evitando l'uso del wget.
Ti ringrazio per la pazienza e per i consigli, decisamente risolutivi.
Ciao
Chico_