Accedi per seguire   
Seguaci 0
Opp85

Invio Mail Con Allegato In Php

2 messaggi in questa discussione

Ciao a tutti.

Sto cercando di creare un form per l'invio di mail con allegato (un'immagine).

Questo è il form:

   <form action="formmail.php" method="POST" enctype="multipart/form-data">
  <table border="0">
  Mittente:<input type="text" name="mittente" value="" />

Destinatario:<input type="text" name="destinatario" value="" />

  Oggetto:<input type="text" name="oggetto" value="" />

Messaggio:<textarea cols="20" rows="4" name="messaggio"></textarea>

Allega file:<input type="file" name="allegato" />

<input type="submit" value="Invia" />
  </form>

e questo è il file php che riceve i dati e invia il tutto per mail:

   <?php
  // Recupero il valore dei campi del form
  $destinatario = $_POST['destinatario'];
  $mittente = $_POST['mittente'];
  $oggetto = $_POST['oggetto'];
  $messaggio = $_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: " . $mittente;
  $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($file, filesize($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;
  }

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

Non capisco come mai l'allegato che ricevo è sempre un file BodyPart.txt

Può essere un problema di altervista (dove è caricato il tutto )?

Le mail vengono inviate sempre... il problema resta solo l'allegato.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

hai provato senza adattare il file al formato MIME base64?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un utente registrato per partecipare

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!


Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.


Accedi Ora
Accedi per seguire   
Seguaci 0