Joomla.it Forum
Non solo Joomla... => Sviluppo => : chico_ 06 Oct 2014, 16:44:27
-
Buongiorno.
Usando chronoforms sono riuscito a inviare via mail un barcode. Il problema è che avrei bisogno che il barcode sia incorporato nella mail, non visto come contenuto remoto.
Con il codice di docs.joomla.org (http://docs.joomla.org/Sending_email_from_extensions (http://docs.joomla.org/Sending_email_from_extensions)) ho fatto una prova con un immagine normale e la mail arriva correttamente con l'immagine incorporata:
<?php
$mailer = JFactory::getMailer();
$config = JFactory::getConfig();
$sender = array(
$config->get( 'config.mailfrom' ),
$config->get( 'config.fromname' ) );
$mailer->setSender($sender);
$user = JFactory::getUser();
$recipient = $user->email;
$recipient="develop@chicosoft.it";
$mailer->addRecipient($recipient);
$body = '<h2>Our mail</h2>'
. '<div>Messaggio con immagine incorporata'
. '<img src="cid:logo_id" alt="logo"/><>';
$mailer->isHTML(true);
$mailer->Encoding = 'base64';
$mailer->setBody($body);
// Optionally add embedded image
$bcode="images/clash.jpg";
$mailer->AddEmbeddedImage( $bcode, 'logo_id', $bcode, 'base64', 'image/jpeg' );
$send = $mailer->Send();
if ( $send !== true ) {
echo 'Error sending email: ' . $send->__toString();
} else {
echo 'Mail sent';
}
?>
Quindi pensavo (ingenuo....) che modificando il contenuto della variabile $bcode e inserendo il codice per generare il barcode il tutto funzionasse. Invece no.
Questa è la variabile modificata :
$bcode="moduli/barcode.php?barcode=ZZS005614&width=320&height=80"
La mail arriva senza l'immagine inserita (ho provato anche con il percorso assoluto ma senza successo).
Se inserisco il percorso assoluto nel browser mi appare a video il barcode, quindi è solo un problema di trasmissione embedded.
Qualcuno ha qualche idea?
Grazie
Chico_
-
puoi inserire un file nella mail ma non uno stream.
devi modificare la funzione in barcode.php in modo che scriva il file su file sysytem invece di restituirlo come stream http, dopo di che passi al metodo AddEmbeddedImage() la path (assoluta!) della immagine, a questo punto funzionerà.
ciao,
marco
-
Non avevo mai effettuato un operazione di questo tipo, ma googlando ho trovato l'istruzione imagepng che ho usato semplicemente in questo modo:
imagepng( $im, "c2p.png" );
inserendola all'interno di barcode.php, sostituendola alla routine di output a video (ovviamente dovro' smanettarci ancora per passare un parametro univoco per il nome del file onde evitare duplicati).
Funziona (grazie !!).
Secondo te l'uso di questa istruzione è un approccio corretto al problema?
Ciao
Chico_
-
non so come funziona barcode.php quindi è difficile rispondere con precisione, ma se l'immagine è creata con imagecreatexxx allora va bene qualsiasi funzione.
probabilmente c'era solo imagepng($im) che restituisce uno stream (non esiste un output a video, dato che è un server remoto): se gli hai aggiunto il nome file va bene.
barcode=ZZS005614 immagino che sia il codice da creare, quindi logica vorrebbe che la immagine fosse creata come ZZS005614.png, non ti pare?
ciao
-
Mi sa che è meglio che per oggi stacchi... :-[
hai ragione, nulla di più univoco dell'ID user che va nel barcode ......
E adesso che me lo fai notare, avevo il codice sotto gli occhi in barcode.php:
l'istruzione:
OutputImage ($im, $format, $quality);
andava a richiamare questa routine:
function OutputImage ($im, $format, $quality)
{
switch ($format)
{
case "JPEG":
ImageJPEG ($im, "", $quality);
break;
case "PNG":
ImagePNG ($im);
break;
case "GIF":
ImageGIF ($im);
break;
}
}
Che , guarda caso, usa proprio imagepng... l'avevo sotto gli occhi, corpo di mille capodogli.....
Avvisatemi quando aggiungete l'emoticon "pirla" che me ne aggiungo un paio in questo thread. :)
Grazie ancora e buona serata
Chico_