Torna indietro   AlterVista | Spazio web gratis, hosting free php mysql > Supporto > PHP, MySql e file database

Rispondi
 
LinkBack Strumenti discussione Modalità visualizzazione
  #1 (permalink)  
Vecchio 03-11-2009, 19.47.57
L'avatar di safefile
Utente giovane
 
Data registrazione: 18-09-2009
Messaggi: 60
Predefinito Funzione mail con allegato

Ciao a tutti! ho torvato questo articolo che illustra come inviare una mail con allegati con php.
Ho crecato di modificare un po' la funzione cercando di adattarla ai miei scopi.
Adesso dovrebbe estrarre un file codificato con base64 da un db, servendosi di un id codificato in base64 passato come get alla pagina e di due variabili di sessione contenenti due password.
A questo punto dovrebbe inviare la mail con, come allegato il file.
Tutto va bene: il file viene estratto, la mail viene inviata.
Il problema è che il file, invece di essere interpretato come allegato, me lo ritrovo codificato alla fine della mail.
Codice PHP:
<?php
session_start
();
if(isset(
$_POST['ind']))
{
// Recupero il valore dei campi del form
$destinatario $_POST['ind'];
$mittente "miosito";
$oggetto "prova";
$messaggio $_POST['mss'];

// connessione e selezione del database
mysql_connect('sql09.freemysql.net''username''password')
or die(
'Connessione non riuscita: ' mysql_error());

if(!
mysql_select_db('files'))
die(
'Selezione database fallita!');

// query per recuperare il file
$query "SELECT * FROM tabella_files WHERE id_file = '".base64_decode($_GET['id'])."' AND password_1='".$_SESSION['pass_1']."' AND password_2='".$_SESSION['pass_2']."'";
$risultato mysql_query($query) or die("ATTENZIONE! Errore nell'estrazione dei file: il link potrebbe essere daneggiato, canellare le path del browser e riprovare piu tardi:".mysql_error());
$tmp mysql_fetch_array($risultato);

// invio il contenuto del file
$allegato $tmp[nome_file];
$allegato_name $tmp[nome_file];
$allegato_type $tmp[tipo_file];
$allegato_data $tmp[data_file];

// Creo 2 variabili che riempirò più avanti...
$headers "From: " $mittente;
$msg "";

// Verifico se il file è stato caricato correttamente via HTTP
// In caso affermativo proseguo nel lavoro...



  // Adatto il file al formato MIME base64 usando base64_encode
  
$data chunk_split(base64_encode($allegato_data));

  
// Genero il "separatore"
  // Serve per dividere, appunto, le varie parti del messaggio.
  // Nel nostro caso separerà la parte testuale dall'allegato
  
$semi_rand md5(time());
  
$mime_boundary "==Multipart_Boundary_x{$semi_rand}x";
  
  
// Aggiungo le intestazioni necessarie per l'allegato
  
$headers .= "\nMIME-Version: 1.0\n";
  
$headers .= "Content-Type: multipart/mixed;\n";
  
$headers .= " boundary=\"{$mime_boundary}\"";

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

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

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

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

  
// Aggiungo l'allegato al messaggio
  
$msg .= "Content-Disposition: attachment;\n";
  
$msg .= " filename=\"{$allegato_name}\"\n";
  
$msg .= "Content-Transfer-Encoding: base64\n\n";
  
$msg .= $data "\n\n";

  
// chiudo con il separatore
  
$msg .= "--{$mime_boundary}--\n";

// Invio la mail
if (mail($destinatario$oggetto$msg$headers))
{
  echo 
"<p>Mail inviata con successo!</p>";
}else{
  echo 
"<p>Errore!</p>";
}
}else{
?>

<form name="login" method="post">
<b>Invia il file via mail</b><br><br>
indirzzo:<input type="text" name="ind"><br>
messaggio (facoltativo):<br><textarea name="mss">
</textarea>
<input type="submit" value="Invia!">
</form>
<?php
}
?>
Come mai accade questo?
Come posso risolvere il problema?
Grazie in anticipo!
__________________
Rispondi citando
  #2 (permalink)  
Vecchio 03-11-2009, 21.03.58
L'avatar di pixalinks
Utente giovane
 
Data registrazione: 10-07-2009
Messaggi: 52
Predefinito

Modificalo con la parte del DB, ma comunque a me funziona.

Codice PHP:

                 <?php
// Recupero il valore dei campi del form

$destinatario "mail@mail.it";

$email ltrim(rtrim(strip_tags(stripslashes($_POST['email']))));
$oggetto "mail  (con allegato)";
$messaggio ltrim(rtrim(strip_tags($_POST['messaggio'])));


// Valorizzo le variabili relative all'allegato
$allegato $_FILES['allegato']['tmp_name'];
$allegato_type $_FILES['allegato']['type'];
$allegato_name $_FILES['allegato']['name'];


// Creo 2 variabili che riempirò più avanti...
$headers "From: " $email;
$msg "";

// Verifico se il file è stato caricato correttamente via HTTP
// In caso affermativo proseguo nel lavoro...
if (is_uploaded_file($allegato))
{
  
// Apro e leggo il file allegato
  
$file fopen($allegato,'rb');
  
$data fread($filefilesize($allegato));
  
fclose($file);

  
// Adatto il file al formato MIME base64 usando base64_encode
  
$data chunk_split(base64_encode($data));

  
// Genero il "separatore"
  // Serve per dividere, appunto, le varie parti del messaggio.
  // Nel nostro caso separerà la parte testuale dall'allegato
  
$semi_rand md5(time());
  
$mime_boundary "==Multipart_Boundary_x{$semi_rand}x";
  
  
// Aggiungo le intestazioni necessarie per l'allegato
  
$headers .= "\nMIME-Version: 1.0\n";
  
$headers .= "Content-Type: multipart/mixed;\n";
  
$headers .= " boundary=\"{$mime_boundary}\"";

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

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

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

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

  
// Aggiungo l'allegato al messaggio
  
$msg .= "Content-Disposition: attachment;\n";
  
$msg .= " filename=\"{$allegato_name}\"\n";
  
$msg .= "Content-Transfer-Encoding: base64\n\n";
  
$msg .= $data "\n\n";

  
// chiudo con il separatore
  
$msg .= "--{$mime_boundary}--\n";
}
else
{
  
$msg $messaggio;
}


// validazione e invio mail

if(!ereg("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$"$email)) {
    echo 
"<p><h3>La mail non è stata inviata!</h3></p> <p><b>Indirizzo mail non valido!</b></p>";

}

elseif(!((
$allegato_type == "image/jpeg") || ($allegato_type == "image/jpg") || ($allegato_type == "image/gif") || ($allegato_type == "image/png"))){
    echo 
"<p><h3>La mail non è stata inviata!</h3></p> <p><b>Il file allegato non è consentito - file consentiti: (.jpg - .jpeg ; .gif ; .png)</b></p>";

}


else {
    
mail($destinatario$oggetto$msg$headers);
    echo 
"<p><h3>Mail inviata con successo !</h3></p> "

        }

?>

ciAO
__________________
Rispondi citando
  #3 (permalink)  
Vecchio 03-11-2009, 22.21.25
L'avatar di safefile
Utente giovane
 
Data registrazione: 18-09-2009
Messaggi: 60
Predefinito

Eppure a me ancora non funziona...
Evidentemente il problema è del db...
__________________
Rispondi citando
Rispondi

Strumenti discussione
Modalità visualizzazione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks are Attivato
Pingbacks are Attivato
Refbacks are Disattivato



Tutti gli orari sono GMT +1. Adesso sono le 21.41.09.