Newsgroup: it.comp.www.php
Titolo: [Repost] Caricamento immagini + invio email

Ciao a tutti,
espongo il mio problema nuovamente esplicitando meglio ciò che chiedo. In 
pratica ho un form dove vengono richiesti dei dati che dovranno essere 
inviati a una email (quella del webmaster ad esempio).
In questo form è contenuto un campo in cui viene chiesto di caricare una 
immagine che risponda a determinate caratteristiche (esempio: larghezza e 
altezza e peso non superiori a un valore fissato).
Ora, per quanto concerne l'invio di email in formato HTML non riscontro 
alcun problema.
Il problema lo riscontro nel momento in cui devo caricare questa immagine e 
inviarla tramite email al destinatario.
Qualcuno può per cortesia darmi una dritta o indicarmi il codice da usare 
per fare ciò?
Ringrazio in anticipo chi potrà aiutarmi.
Cooper.
-- 
[web:]  
http://www.blueware.it
 (aggiornato!)
[icq:]  146 781 935
[msn:] 
coo...@blueware.it
 


il comando mail per inviare allegati deve essere scritto cosi':
mail($destinatario, $oggetto, "", $contenuto);
quindi il campo messaggio va lasciato vuoto.
Per inviare un'immagine (l'immagine deve essere presente sul server) devi
inserire le seguenti intestazioni interrotte da una stringa boundary limit
che puoi crearti da solo:
Il $contenuto va impostato secondo questo schema (attenzione ad utilizzare
in maniera corretta i ritorno a capo e i tab!!!):
...qua intestazioni varie...(es: X-priority, ecc.)
Content-Type: multipart/mixed; boundary=stringa_boundary_limit
messaggio sul tipo di email
---stringa boundary limit
Content-Type: multipart/alternative; boundary=stringa_boundary_limit
---stringa boundary limit
Content-Type: text/plain; charset=tipo_charset(es. iso-8859-1)
Content-Transfer-Encoding: quoted-printable
eventuale testo
---stringa boundary limit
Content-Type: text/html; charset=tipo_charset
Content-Transfer-Encoding: quoted-printable
eventuale testo html
---stringa boundary limit
Content-Type: image/gif; name=nome_immagine
Content-Transfer-Encoding: codifica (es. base64)
Content-Disposition: attachment;filename=nome_immagine
qui inserisci il contenuto immagine codificato
---stringa boundary limit
Spero che ti basti come aiuto.
L'incompetente

>"L'incompetente" <l_incom...@strikes.again> ha >scritto nel messaggio
Ehi, fai concorrenza? :-)
L'Ignorante


Scusami, che ci vuoi fare?
Con i professoroni che ci sono in questo gruppo mi sento piccolo piccolo.
Ciao ;P

 mail($destinatario, $oggetto, "", $contenuto);
L'incompetente colpisce ancora. Facendo cosi' probabilmente riesci ad
inchiodare il server SMTP, il 4^ parametro e' quello delle intestazioni.
Per Cooper, ti suggerisco di utilizzare una classe come libMail
(
http://lwest.free.fr/doc/php/lib/Mail/
) oppure htmlMimeMailEx
(
http://phpguru.org/static/mime.mail.html
). La seconda ti gestisce in
automatico anche le mail HTML con immagini incluse.
-- 
I am what I am, I do what I can
L'uomo, conscio di sbagliare, persevera.


Hai mai mandato email con allegati?

 Hai mai mandato email con allegati?
Ho solo riscritto/esteso due classi che lo fanno, fai un po tu.



io ho scritto poche righe e lasciato vuoto un campo della funzione mail e
funziona alla grande

 mail e funziona alla grande
Bene, posta il codice completo e funzionante.


 piccolo.
Allora ti dovevi chiamare L'impotente non L'incompetente.



Se sei bravo come vuoi far credere puoi benissimo crearlo con i suggerimenti
da me proposti in questo thread. Bastano 5 minuti.
E non si blocca il server....(cavolata)


Grazie mille setec :)  Ho optato per la seconda che si avvicina di piů alle 
mie esigenze.
Cooper


 piy alle mie esigenze.
De nada, per l'upload usa l'esempio del manuale, non dovresti avere
problemi.


 E non si blocca il server....(cavolata)
Posta il codice completo e funzionante.



Ok :) Ascolta ho problemi ad aprire il file htmlMimeMail-2.5.1.tar con 
winzip (normalmente mi apre questo formato senza problemi) visualizzandomi 
questo messaggio: "Error reading header after processing 0 entries" e un 
errore simile (non uguale) se provo ad aprire direttamente scaricando dal 
sito.
Potresti, se non ti dispiace inviarmi per email privata il file compresso 
funzionante oppure un link alternativo dove poter scaricare questa classe?
Grazie in anticipo, Cooper.



sei bravo con le classi degli altri...
[]
Ho solo riscritto/esteso due classi che lo fanno, fai un po tu.
[/]
vediamo cosa sai fare senza manuale alla mano con poche righe di codice e
senza funzioni ne classi.
Non č possibile??
Credo proprio che hai sempre ragione:
[]
L'incompetente colpisce ancora. Facendo cosi' probabilmente riesci ad
inchiodare il server SMTP, il 4^ parametro e' quello delle intestazioni.
[/]
Si, si.
Cosě come gli asini volano,
e cosi come nel ventennio nessuno scriveva sui muri "Mussolini ha sempre
ragione".

 sempre ragione".
Posta il codice completo e funzionante.
-- 



Ho qualche problema, nella classe che mi hai suggerito ci sono degli esempi 
su come inviare un file, ma suppone che il file sia già presente.
Per l'upload ho dato una occhiata sul manuale (
www.php.net
, penso ti 
riferivi a questo) cercando con le chiavi: UPLOAD e FILES ma non sono 
riuscito a trovare un esempio concreto in cui fa vedere ad esempio che 
cliccando su SFOGLIA si apre la finestra dove l'utente può selezionare il 
file da inviare.
Se non ti dispiace mi puoi dare un altra dritta?
Grazie ancora, Cooper.


 Se non ti dispiace mi puoi dare un altra dritta?
La gestione degli upload con relativo esempio la puoi trovare su:
http://www.php.net/manual/en/features.file-upload.php
Puoi modificare l'esempio ed al posto di if (move_uploaded_file etc ):
if (is_uploaded_file ($_FILES['userfile']['tmp_name'])) { 
// allego $_FILES['userfile']['tmp_name'] 
// il content-type del file e' $_FILES['userfile']['type']
// il nome originale del file e' basename ($_FILES['userfile']['name']);
}
Da testare.


"Setec Astronomy" <setec@_NO_NOSPAM_freemail.it> ha scritto nel messaggio 
news:5My2d.7526$2T6.2...@twister1.libero.it...
Ciao Setec, ho provato a usare la classe htmlMimeMail, con il codice che 
segue:
<?php
   error_reporting(E_ALL);
   include('htmlMimeMail.php');
   if (($_POST["sent"] == 1) && ($_FILES['userfile']['error'] == 0)) {
      $mail = new htmlMimeMail();
      $attachment = $mail->getFile($_FILES['userfile']['tmp_name']);
      $text = "<b>Messaggio di testo in grassetto</b>";
      $mail->setHtml($text);
      $mail->addAttachment($attachment, $_FILES['userfile']['name'], 
$_FILES['userfile']['type']);
     $mail->setFrom('Cooper <x...@xxx.xxx>');
     $result = $mail->send(array('"xxx" <x...@xxx.xxx>'));
     echo $result ? 'Email Inviata!' : 'Email non inviata!';
    }
 ?>
<form enctype="multipart/form-data" action="prova.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="16384">
Invia questo file: <input name="userfile" type="file">
<input type="hidden" name="sent" value="1">
<input type="submit" value="Invia File">
</form>
e ricevo un errore del tipo:
Warning: main(C:/prova/mimePart.php) [function.main]: failed to open stream: 
No such file or directory in C:/prova/htmlMimeMail.php on line 10
Fatal error: main() [function.require]: Failed opening required 
'C:/prova/mimePart.php' (include_path='c:/programmi/php5') in 
C:/prova/htmlMimeMail.php on line 10
e chiaramente non mi permette di andare avanti.
Prima di usare la classe ho fatto una prova soltanto col form caricando il 
file e attraverso la riga:
   print "Errore: " . $_FILES['userfile']['error'] . "<br>";
ottenevo il valore 0, e dal manuale ho concluso che il file è stato caricato 
con successo nella cartella temporanea rilevata tramite:
   print "Nome File Temp: " . $_FILES['userfile']['tmp_name'] . "<br>";
e fin qui è tutto ok, il problema è nato quando ho cercato di integrare la 
classe per l'invio della email.
Ti chiedo il favore di correggermi eventuali errori che riscontri nelle 
righe di codice che ho incollato sopra (il codice di cui sopra è solo un 
esempio per capire meglio come farla funzionare).
Grazie ancora.
Cooper.
PS: Il file htmlMimeMail.php è contenuto nella stessa cartella del file in 
cui ho inserito il codice che ho incollato.


 file in cui ho inserito il codice che ho incollato.
In c:/prova ci devi mettere tutti i file del pacchetto htmlMimeMail
(esempi e doc esclusi) perche' contengono classi e funzioni di supporto.


 ha scritto nel messaggio 
news:dWz2d.266051$OR2.12...@news3.tin.it...
Risolto tutto adesso funziona alla grande, mi rimane solo questo:
Notice: Undefined index: check in C:/prova.php on line 5
come posso risolverlo?
Grazie mille,
Cooper.


 come posso risolverlo?
Il messagio significa che stai cercando di utilizzare una cosa tipo
$_POST['check'] senza che sia definita ossia stai accedendo all'indice
di un array che non esiste. Puoi risolverlo utilizzando una cosa del
tipo:
if (isset ($_POST['check']) && ($_POST['chech'] == 'valore che vuoi')) {
	// ok
} else  {
	// ko
}
Ovviamente sostituisci a $_POST il nome dell'array che stai utilizzando
(nel codice precedente non lo vedo).



Ok tnx :)


 Posta il codice completo e funzionante.
Posta il codice completo e funzionante.
Ti faccio notare che questo dovrebbe:
- essere composto da poche righe di codice.
- funzionare solo lasciando il 3^ parametro vuoto (string message).
- seguire il protocollo standard (RFC 821, RFC 1869 etc.).
- permettere l'invio di piu' allegati.
- funzionare anche inviando un messaggio con body: 
  "\r\n\r\n test\r\n\r\n".
