Newsgroup: it.comp.www.php
Titolo: inviare via mail un file excel creato "al volo"

ho trovato nei vecchi post questo codice per creare "al volo" un file excel:
<?
//datiPerExecl.php:
// dichiara come file excel:
header("Content-type: application/ms-excel; name=datiPerExcel.xls");
// con questo si apre Excel dentro il browser, se non lo metti si apre il
//box per download:
header("Content-Disposition: inline; filename=datiPerExcel.xls");
// forward dati in formato csv: (con tab \t e newline \n)
echo "a1\tb1\n";
echo "a2\tb2\n";
?>
come faccio ad inviare questo file via mail automaticamente ... senza chiedere il download (come fa adesso)?
grazie
-- 
Ciao
Nick

Wed, 01 Dec 2004 14:52:18 GMT, "Nick" <senz...@chiedetesul.NG> ha
detto:

Utilizza una delle tante classi in circolazione che permette l'invio
di email con allegati.
Francesco Mazzi
Webmaster di AltroPC.it - 
http://www.altropc.it
 
Project Admin di "PHP Reservation - Online booking system" - 
http://phpreservation.sourceforge.net
Dev.Staff di E-Xoopport - 
http://dev.e-xoopport.it


per l'invio di file esistenti non ci sono problemi, ma questo file creato "al volo" in header.. dove lo trovo come lo allego?
di solito uso la funzione (metto solo la parte dell'allegato)
$email->Attach($file_name);
ma il parametro è un file fisico ..
come faccio con l'esempio di cui sopra?
ho provato a sostituire.. ma nulla mi da errore...
grazie
ciao
Nick 

ho provato a sostituire.. ma nulla mi da errore...
Hai ragione non ci pensavo che lo crei dinamicamente!
Comunque si può fare, posta il codice della classe che utilizzi che la
modifichiamo in modo che lo faccia.


 modifichiamo in modo che lo faccia.
[CUT]
Grazie mille.. ecco la classe (piuttosto lunga)
class Mail
{
 var $sendto = array();
 var $acc = array();
 var $abcc = array();
 var $aattach = array();
 var $fattach = array();
 var $xheaders = array();
 var $priorities = array( '1 (Highest)', '2 (High)', '3 (Normal)', '4 (Low)', '5 (Lowest)' );
 var $charset = "us-ascii";
 var $ctencoding = "7bit";
 var $boundary;
 var $receipt = 0;
 function Mail ()
 { $this->boundary= "--" . md5 (uniqid ("myboundary")); }
 function Subject ($subject = "")
 {
  $this->xheaders['Subject'] = strtr ($subject, "\r\n" , "  ");
  return true;
 }
 function From ($from_email, $from_name = "")
 {
  if (!is_string ($from_email))
  { return false; }
  if (empty ($from_name))
  { $this->xheaders['From'] = $from_email; }
  else
  { $this->xheaders['From'] = "\"$from_name\" <$from_email>"; }
  return true;
 }
 function ReplyTo ($replyto_email, $replyto_name = "")
 {
  if (!is_string ($replyto_email))
  { return false; }
  if (empty ($replyto_email))
  { $this->xheaders['Reply-To'] = $replyto_email; }
  else
  { $this->xheaders['Reply-To'] = "\"$replyto_name\" <$replyto_email>"; }
  return true;
 }
 function ReturnPath ($returnpath_email, $returnpath_name = "")
 {
  if (!is_string ($returnpath_email))
  { return false; }
  if (empty ($returnpath_email))
  { $this->xheaders['Return-Path'] = $returnpath_email; }
  else
  { $this->xheaders['Return-Path'] = "\"$returnpath_name\" <$returnpath_email>"; }
  return true;
 }
 function Receipt ()
 {
  $this->receipt = 1;
  return true;
 }
 function To ($address)
 {
  if (is_array ($address))
  {
   $this->sendto = array ();
   foreach ($address as $key => $value)
   {
    if (is_numeric ($key))
    { $this->sendto[] = $value; }
    elseif (is_string ($key) && is_string ($value))
    {
     $value = str_replace('"', '', $value);
     $this->sendto[] = "\"$value\" <$key>";
    }
   }
  }
  else
  { $this->sendto[] = $address; }
  return true;
 }
 function Cc ($address)
 {
  if (is_array ($address))
  {
   $this->acc = array ();
   foreach ($address as $key => $value)
   {
    if (is_numeric ($key))
    { $this->acc[] = $value; }
    elseif (is_string ($key) && is_string ($value))
    {
     $value = str_replace('"', '', $value);
     $this->acc[] = "\"$value\" <$key>";
    }
   }
  }
  else
  { $this->acc = array ($address); }
  return true;
 }
 function Bcc ($address)
 {
  if (is_array ($address))
  {
   $this->abcc = array ();
   foreach ($address as $key => $value)
   {
    if (is_numeric ($key))
    { $this->abcc[] = $value; }
    elseif (is_string ($key) && is_string ($value))
    {
     $value = str_replace('"', '', $value);
     $this->abcc[] = "\"$value\" <$key>";
    }
   }
  }
  else
  { $this->abcc = array ($address); }
  return true;
 }
 function Body ($body = "", $charset = "")
 {
  $this->body = $body;
  if (!empty ($charset))
  {
   $this->charset = strtolower ($charset);
   if ($this->charset != "us-ascii")
   { $this->ctencoding = "8bit"; }
  }
  return true;
 }
 function Organization ($org = "")
 {
  if (!empty ($org))
  { $this->xheaders['Organization'] = $org; }
  return true;
 }
 function AntiSpaming ($client_ip = "", $proxy_server = "", $user_agent = "")
 {
  if (empty ($client_ip))
  {
   if (isset ($_SERVER['HTTP_X_FORWARDED_FOR']))
   { $client_ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }
   elseif (isset ($_SERVER['HTTP_CLIENT_IP']))
   { $client_ip = $_SERVER['HTTP_CLIENT_IP']; }
   elseif (isset ($_SERVER['HTTP_FROM ']))
   { $client_ip = $_SERVER['HTTP_FROM']; }
   elseif (isset ($_SERVER['REMOTE_ADDR']))
   { $client_ip = $_SERVER['REMOTE_ADDR']; }
   $this->xheaders['X-HTTP-Posting-Host'] = $client_ip;
  }
  else
  { $this->xheaders['X-HTTP-Posting-Host'] = $client_ip; }
  if (empty ($proxy_server))
  {
   if ($client_ip != $_SERVER['REMOTE_ADDR'])
   { $this->xheaders['X-HTTP-Proxy-Server'] = $_SERVER['REMOTE_ADDR']; }
  }
  else
  { $this->xheaders['X-HTTP-Proxy-Server'] = $proxy_server; }
  if (empty ($user_agent))
  {
   if (isset ($_SERVER['HTTP_USER_AGENT']))
   { $this->xheaders['X-HTTP-Posting-UserAgent'] = $_SERVER['HTTP_USER_AGENT']; }
   else
   { $this->xheaders['X-HTTP-Posting-UserAgent'] = "Unknown"; }
  }
  else
  { $this->xheaders['X-HTTP-Posting-UserAgent'] = $user_agent; }
  return true;
 }
 function Priority ($priority = 3)
 {
  if (!intval ($priority))
  { return false; }
  if (!isset ($this->priorities[$priority-1]))
  { return false; }
  if (($priority >= 1) && ($priority <= 5))
  {
   $this->xheaders["X-Priority"] = $this->priorities[$priority-1];
   return true;
  }
  else
  { return false; }
 }
 function Attach ($filepath, $mimetype = "", $disposition = "inline", $filename = "")
 {
  if (empty ($filepath))
  { return false; }
  if (empty ($mimetype))
  { $mimetype = "application/x-unknown-content-type"; }
  if (empty ($filename))
  { $filename = basename ($filepath); }
  $this->fattach[] = $filename;
  $this->aattach[] = $filepath;
  $this->actype[] = $mimetype;
  $this->adispo[] = $disposition;
  return true;
 }
 function BuildMail ()
 {
  $this->headers = "";
  if (count ($this->acc) > 0)
  { $this->xheaders['CC'] = implode (", ", $this->acc); }
  if (count ($this->abcc) > 0)
  { $this->xheaders['BCC'] = implode ( ", ", $this->abcc); }
  if ($this->receipt)
  {
   if (isset ($this->xheaders["Reply-To"]))
   { $this->xheaders["Disposition-Notification-To"] = $this->xheaders["Reply-To"]; }
   else
   { $this->xheaders["Disposition-Notification-To"] = $this->xheaders['From']; }
  }
  if ($this->charset != "")
  {
   $this->xheaders["Mime-Version"] = "1.0";
   $this->xheaders["Content-Type"] = "text/plain; charset=$this->charset";
   $this->xheaders["Content-Transfer-Encoding"] = $this->ctencoding;
  }
  $this->xheaders["X-Mailer"] = "Php/libMailv2.1";
  if (count ($this->aattach ) > 0)
  { $this->_build_attachement (); }
  else
  { $this->fullBody = $this->body; }
  reset ($this->xheaders);
  while (list ($hdr, $value) = each ($this->xheaders))
  {
   if ($hdr != "Subject")
   { $this->headers .= "$hdr: $value\n"; }
  }
  return true;
 }
 function Send ()
 {
  $this->BuildMail ();
  $strTo = implode (", ", $this->sendto);
  return @mail ($strTo, $this->xheaders['Subject'], $this->fullBody, $this->headers);
 }
 function Get ()
 {
  $this->BuildMail ();
  $strTo = implode (", ", $this->sendto);
  $mail = "To: " . $strTo . "\n";
  $mail .= $this->headers . "\n";
  $mail .= $this->fullBody;
  return $mail;
 }
 function _build_attachement ()
 {
  $this->xheaders["Content-Type"] = "multipart/mixed;\n boundary=\"$this->boundary\"";
  $this->fullBody = "This is a multi-part message in MIME format.\n--$this->boundary\n";
  $this->fullBody .= "Content-Type: text/plain; charset=$this->charset\nContent-Transfer-Encoding: $this->ctencoding\n\n" . 
$this->body ."\n";
  $sep = chr(13) . chr(10);
  $ata = array();
  $k = 0;
  for ($i = 0; $i < count( $this->aattach); $i++)
  {
   $filename = $this->aattach[$i];
   $basename = basename($this->fattach[$i]);
   $ctype = $this->actype[$i]; // content-type
   $disposition = $this->adispo[$i];
   if (!file_exists ($filename))
   { return false; }
   $subhdr = "--$this->boundary\nContent-type: $ctype;\n name=\"$basename\"\nContent-Transfer-Encoding: base64\nContent-Disposition: 
$disposition;\n  filename=\"$basename\"\n";
   $ata[$k++] = $subhdr;
   $linesz = filesize ($filename) + 1;
   $fp = fopen ($filename, 'r');
   $ata[$k++] = chunk_split (base64_encode (fread ($fp, $linesz)));
   fclose ($fp);
  }
  $this->fullBody .= implode ($sep, $ata);
 }
} // class Mail

Grazie mille.. ecco la classe (piuttosto lunga)





  return true;
 }


  return true;
 }


  return true;
 }









  return true;
 }




$filename = "", $is_file="1")
 {




  return true;
 }








  return true;
 }










Francesco Mazzi


[CUT]
scusate ma ho postato per errore...comunque c'è da lavorarci un pò,
non so se ho tempo.



mi sembrava fosse uguale :D
tranquillo... se puoi e vuoi.. nessuno ti obbliga ;)
grazie ancora
ciao
Nick 

mi sembrava fosse uguale :D
si infatti volevo fare le modifiche al volo, ma non è semplice e poi
usa una notazione strana con nomi dei file...
Comunque alle brutte crei un file fisicamente, lo alleghi, invii la
mail e poi lo cancelli...lo so non è il massimo dell'eleganza.



si la mia partenza era quella, solo che per scrivere i file per ora so solo scrivere nella public.. e non mi piaceva da usare...
navigando e cercando ho trovato questa per creare il file dinamicamente e allora mi son chiesto se fosse possibile inviare questo 
file...
male che va scrivo nella public e cancello subito dopo...
grazie ;)
ciao
Nick

Credo che basti fare una read dello stream e encodarla in base64, o dico una
vaccata?

 vaccata?
io non ho idea di cosa hai detto :D
però se qualcuno mi dice come si fa.. provo e ti faccio sapere ;)
ciao
Nick 

vaccata?
Hai detto bene...stavo provando a poter utilizzare entrambi i casi,
sia di usare un file esistente sia uno stream, però poi mi sono rotto
perchè ci mettevo troppo :-)
