Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 11-10-07, 14:19   #1 (permalink)
User
 
L'avatar di Adriano_Bari
 
Data di registrazione: Aug 2007
Messaggi: 213
Question Invio allegato con php

Salve, salvino.
Ora che ho risolto i problemi relativi al corretto funzionamento del mio form in flash devo risolvere i problemi relativi la pagina php che questo richiama.
In pratica ho, come avrete capito un form in flash dove l'utente inserisce i suoi dati, nome, cognome, email, e spunta dell'autorizzazione, la pagina php riceve i dati, li controlla e se corretti invia due mail, una deve inviarla ad un indirizzo fisso che decido io e l'altra all'indirizzo dell'utente che è stato specificato nel form.

La prima mail è semplice, contiene solo i dati dell'utente che ha ricevuto compilato il form, volevo metterci uno sfondo ma per ora non ci riesco.

La seconda mail deve contenere un allegato ed è qui il problema.
La mail viene inviata ma non contiene l'allegato, inoltre il codice html non viene riconosciuto e nella mail che ricevo lo visualizzo come se fosse quello il testo, in pratica vedo il codice ma non l'aspetto che questo codice dovrebbe creare.

Secondo il client di posta la mail contiene un allegato ma forse si riferisce solo ad un file di testo ATT00034.txt, questo file dovrebbe essere quello creato dall'antivirus che controlla il file.

posto il codice della pagina php, ovviamente solo la parte che interessa.


Codice PHP:
$mittente "nostramail@nostrosito.it";

//__________________________________CODICE PER INVIO DELLA MAIL CON ALLEGATO__________________________________

// creo il messaggio in html per la seconda mail
$msg '
<html>
<head>
<meta http-equiv="Content-Type:" content="multipart/mixed;">
<title>titolo</title>
<style type="text/css">
<!--
body {
    margin-left: 0px;
    margin-top: 0px;
    background-image: url('
.$image.');
    background-repeat: no-repeat;
}
.Stile1 {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-weight: bold; }
.Stile2 {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; }
-->
</style>
</head>
<body>
<table width="780" border="0" align="left" cellpadding="0" cellspacing="0">
  <tr>
    <td valign="top" ><table width="780" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td width="23" height="97">&nbsp;</td>
        <td width="757" height="97">&nbsp;</td>
      </tr>
      <tr>
        <td height="125">&nbsp;</td>
        <td valign="top"><table>
          <tr>
            <td colspan="2"></td>
          </tr>
          <tr>
            <td width="50">&nbsp;</td>
            <td width="648" class="Stile1"><span class="Stile2"><span class="Stile1">Grazie </span>'
.$nome.' '.$cognome.' per aveci contattato, in allegato a questa mail trover&agrave; il file pdf </span></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td class="Stile1"><div align="center"><span class="Stile2">&quot;titolo del mio file pdf&quot;</span></div></td>
          </tr>
        </table></td>
      </tr>
    </table></td>
  </tr>
</table>
</body>
</html>
'
;

// creo la variabile che conterrà tutto il secondo messaggio più l'allegato
$datiemail2 "";

//carico l'allegato
$allegato "Download/allegato.pdf";

// Apro e leggo il file allegato
$file fopen($allegato,'rb');
$data fread($filefilesize($allegato));
fclose($file);
      
// Adatto il file allegato al formato MIME base64 usando base64_encode
$data chunk_split(base64_encode($data));
      
// Genero il separatore che separerà la parte testuale dall'allegato
$semi_rand md5(time());
$mime_boundary "==Multipart_Boundary_x{$semi_rand}x";

// headers per la seconda mail, quella che viene inviata all'utente
$headers2 "From: Jumbo Screen - ufficio marketing <$mittente>\n";
$headers2 .= "\nMIME-Version: 1.0\n";
$headers2 .= "Content-Type: multipart/mixed;\n";
$headers2 .= " boundary=\"{$mime_boundary}\"";

// Definisco il tipo di messaggio (MIME/multi-part)
$datiemail2 .= "This is a multi-part message in MIME format.\n\n";

// Metto il separatore
$datiemail2 .= "--{$mime_boundary}\n";

// Questa è la parte "testuale" del messaggio
$datiemail2 .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$datiemail2 .= "Content-Transfer-Encoding: 7bit\n\n";
$datiemail2 .= $msg "\n\n";

// Metto il separatore
$datiemail2 .= "--{$mime_boundary}\n";

// Aggiungo l'allegato al messaggio
$datiemail2 .= "Content-Disposition: attachment;\n";
$datiemail2 .= " filename=\"{$allegato_name}\"\n";
$datiemail2 .= "Content-Transfer-Encoding: base64\n\n";
$datiemail2 .= $data "\n\n";
    
// chiudo con il separatore
$datiemail2 .= "--{$mime_boundary}--\n";
//___________________________________________________________________________________________________________

// invio la mail al cliente
    
if (mail("$mailutente""oggetto""$datiemail2","$headers2")) 
Sapreste darmi una mano a risolvere anche questo rompicapo?
Adriano_Bari non in linea   Rispondi citando
Vecchio 11-10-07, 15:21   #2 (permalink)
User
 
L'avatar di Adriano_Bari
 
Data di registrazione: Aug 2007
Messaggi: 213
altro codice

Ho trovato questo altro codice
Codice PHP:
//
// FUNZIONE PER L'INVIO DI MAIL CON ALLEGATI
// $mex E' IL MESSAGGIO DELL'EMAIL (CON FORMATTAZIONE HTML)
// $oggetto E' L'OGGETTO
// $aChi E' IL DESTINATARIO
// $mittente E' IL MITTENTE
// $allegato E' NOME DEL FILE CHE SI VUOLE ALLEGARE (COMPRENSIVO DI PATH)
// $nomeAllegato E' IL NOME DEL FILE ALL'INTERNO DELLA MAIL
// $bcc SONO I DESTINATARI DELLE COPIE CONFORMI NASCOSTE
// $reply E' LA MAIL A CUI VIENE INVIATA UNA EVENTUALE RISPOSTA
//        LASCIARE VUOTA SE E' LA STESSA DEL MITTENTE
// $stile UN'EVENTUALE BLOCCO DI STILE PER LA FORMATTAZIONE DEL MESSAGGIO
//        COMPRENSIVO DI &lt;style&gt; E &lt;/style&gt;
//
function        mailAllegati(   $mex$oggetto$aChi$mittente,
                                
$allegato$nomeAllegato,
                                
$bcc ""$reply ""$stile "")
{
$filetype mime_content_type($allegato);
 
$filez fopen($allegato"r");
$contents fread($filezfilesize($allegato));
$encoded_attach chunk_split(base64_encode($contents));
fclose($filez);
 
if (
$reply == "")
    
$reply $mittente;
 
// CREO L'INTESTAZIONE
$testa "From: $mittente\n";
if (
$bcc != "")
    
$testa .= "BCC: $bcc;\n";
$testa .= "Reply-To: $reply\n";
$testa .= "X-Mailer: Sismail Web Email Interface\n";
$testa .= "MIME-version: 1.0\n";
$testa .= "Content-type: multipart/mixed;\n";
$testa .= " boundary=\"Message-Boundary\"\n";
$testa .= "Content-transfer-encoding: 7BIT\n";
$testa .= "X-attachments: $nomeAllegato";
 
// CREO IL MESSAGGIO
$corpo "--Message-Boundary\n";
$corpo .= "Content-type: text/html; charset=iso-8859-1\n";
$corpo .= "Content-transfer-encoding: 7BIT\n";
$corpo .= "Content-description: Mail message body\n\n";
$corpo .= "&lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"&gt;";
$corpo .= "&lt;HTML&gt;&lt;HEAD&gt;";
$corpo .= "&lt;META http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\"&gt;";
$corpo .= $stile;
$corpo .= "&lt;/HEAD&gt;";
$corpo .= "&lt;BODY&gt;";
$corpo .= $mex;
$corpo .= "&lt;/BODY&gt;&lt;/HTML&gt;";
$corpo .= "\n\n--Message-Boundary\n";
$corpo .= "Content-type: $filetype; name=\"$nomeAllegato\"\n";
$corpo .= "Content-Transfer-Encoding: BASE64\n";
$corpo .= "Content-disposition: attachment; filename=\"$nomeAllegato\"\n\n";
$corpo .= "$encoded_attach\n";
$corpo .= "--Message-Boundary--\n";
 
if(@
mail($aChi$oggetto$corpo$testa))
   return 
true;
else
   return 
false;

non capisco bene una cosetta, nella linea
Codice PHP:
if(@mail($aChi$oggetto$corpo$testa)) 
cosa devo inserire al posto di @mail, sul sito in cui ho trovato questo codice dice mette questo esempio

Codice PHP:
 if (mailAllegati($messaggio$oggetto$aChi$mittente$allegato$nomeAllegato"""""")) 
mi sembra lo stesso che avevo trovato prima ma credo che mailAllegati non sia corretto, come lo modifico?
Adriano_Bari non in linea   Rispondi citando
Vecchio 11-10-07, 15:22   #3 (permalink)
User
 
L'avatar di Adriano_Bari
 
Data di registrazione: Aug 2007
Messaggi: 213
mailAllegati si riferisce al nome della funzione? Lo lascio così?
Adriano_Bari non in linea   Rispondi citando
Vecchio 11-10-07, 18:35   #4 (permalink)
User
 
L'avatar di Adriano_Bari
 
Data di registrazione: Aug 2007
Messaggi: 213
funziona ma l'allegato è vuoto

Ho modificato un po' il codice che ho trovato, anche perché mi sono accorto di alcuni errori dovuti a come il server su cui si trovava aveva interpretato alcuni simboli, in particolare il < ed il >.

questo è il codice che riguarda la funzione che non funziona perfettamente

Codice PHP:
if ( ! function_exists 'mime_content_type ' ) )
{
   function 
mime_content_type $f )
   {
       return 
system trim'file -bi ' escapeshellarg $f ) ) ) ;
   }
}

// FUNZIONE PER L'INVIO DI MAIL CON ALLEGATI
function        mailAllegati(   $datiemail2$oggetto2$mailutente$mittente,
                                
$allegato$nomeAllegato,
                                
$bcc ""$reply ""$stile "")
{
$filetype mime_content_type($allegato);
 
$filez fopen($allegato"r");
$contents fread($filezfilesize($allegato));
$encoded_attach chunk_split(base64_encode($contents));
fclose($filez);
 
if (
$reply == "")
    
$reply $mittente;
 
// CREO L'INTESTAZIONE
$testa "From: Jumbo Screen - ufficio Marketing <$mittente>\n";
if (
$bcc != "")
    
$testa .= "BCC: $bcc;\n";
$testa .= "Reply-To: $reply\n";
$testa .= "X-Mailer: Sismail Web Email Interface\n";
$testa .= "MIME-version: 1.0\n";
$testa .= "Content-type: multipart/mixed;\n";
$testa .= " boundary=\"Message-Boundary\"\n";
$testa .= "Content-transfer-encoding: 7BIT\n";
$testa .= "X-attachments: $nomeAllegato";
 
// CREO IL MESSAGGIO
$corpo "--Message-Boundary\n";
$corpo .= "Content-type: text/html; charset=iso-8859-1\n";
$corpo .= "Content-transfer-encoding: 7BIT\n";
$corpo .= "Content-description: Mail message body\n\n";
$corpo .= "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
$corpo .= "<HTML><HEAD>";
$corpo .= "<META http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\">";
$corpo .= $stile;
$corpo .= "</HEAD>";
$corpo .= "<BODY>";
$corpo .= $datiemail2;
$corpo .= "</BODY></HTML>";
$corpo .= "\n\n--Message-Boundary\n";
$corpo .= "Content-type: $filetype; name=\"$nomeAllegato\"\n";
$corpo .= "Content-Transfer-Encoding: BASE64\n";
$corpo .= "Content-disposition: attachment; filename=\"$nomeAllegato\"\n\n";
$corpo .= "$encoded_attach\n";
$corpo .= "--Message-Boundary--\n";
 
if(@
mail($mailutente$oggetto2$corpo$testa))
   return 
true;
else
   return 
false;
}
//fine della funzione 
e questa è la riga che richiama il file allegato, ho provato in diversi modi ma nulla, mi arriva sempre una mail con un file allegato.php che in realtà è vuoto

Codice PHP:
// $allegato E' IL NOME DEL FILE CHE SI VUOLE ALLEGARE (COMPRENSIVO DI PATH)
$allegato 'http://www.miosito.it/download/allegato.pdf'
Adriano_Bari non in linea   Rispondi citando
Rispondi
Tags: , ,



Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 15:51.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.