Newsgroup: it.comp.lang.perl
Titolo: chi è capace di spiegarmi ..... email con allegato

ho eseguito questo script in ambiente Win 98,che ho tratto da un manuale
Perl, il quale invia un e-mail con allegato un file di testo.
Il problema è che quando vado a scaricare l'email con Outlook Express, non
risulta che abbia un allegato e il testo,  da Mime version ....  in poi,
viene visualizzato in chiaro nel corpo della mail con il testo del file
allegato.. Mi sapreste spiegare il motivo ?? Di fatto l'ho copiato da un
manuale e quindi uno si aspetterebbe che funzioni ........ .
&mail_text('
mious...@interfree.it
', '
usernamede...@interfree.it
',
'Testo oggetto messaggio', 'nome del file di testo che contiene il corpo del
messaggio', 'nome del file di testo dell'attachment');
sub mail_text
{
  my ($from, $to, $subject, $text, $attach) = @_;
  my row;
  $attach =~ /.*\/(.*)/;
  $name = $1;
  print "$name\n";
  use MIME::QuotedPrint ();
  use Net::SMTP;
  print "Connecting to SMTP server\n";
  $smtp = Net::SMTP->new('
xx...@interfree.it
', Timeout => 50, Debug => 1);
  print "Start e-mail\n";
  $smtp->mail($from);
  $smtp->to($to);
  $smtp->data();
  $smtp->datasend("Mimi-Version: 1.0\n");
  $smtp->datasend("Content-Type: multipart/mixed;");
  $smtp->datasend("boundary=\"=====================_890842431==_\"\n");
  $smtp->datasend("Subject: $subject\n");
  $smtp->datasend("X-Attachments: $attach;");
  $smtp->datasend("\n\n");
  $smtp->datasend('_=====================_890842431==_');
  $smtp->datasend("\n");
  $smtp->datasend('Content-Type: text/plain; charset="iso-8859-1"');
  $smtp->datasend("\n");
  $smtp->datasend('Content-Transfer-Encoding: quoted-printable');
  $smtp->datasend("\n\n");
  print "Sending body text message\n";
  open(TEXT, "$text") or die "Cannot open file $!";
  while (<TEXT>)
  {
    $row = MIME::QuotedPrint::encode($_);
    $smtp->datasend($row);
  }
  $smtp->datasend("\n\n");
  print "Body text sent\n";
  $smtp->datasend('_=====================_890842431==_');
  $smtp->datasend("\n");
  $smtp->datasend("Content-Type: text/plain; charset=\"us-ascii\";\n");
  $smtp->datasend("Content-Disposition: attachment; filename=\"$name\"\n");
  $smtp->datasend("\n\n");
  open(ATTACH, $attach") or die "Cannot open file: $!";
  $smtp->datasend("$_") while <ATTACH>;
  close (ATTACH);
  $smtp->datasend("\n");
  $smtp->datasend('_=====================_890842431==_');
  $smtp->datasend("\n");
  $smtp->datasend('Content-Type: text/plain; charset="us-ascii"');
  $smtp->datasend("\n\n\n\n\n");
  $smtp->datasend('_=====================_890842431==_');
  $smtp->datasend("\n");
  print "Message sent\n";
  $smtp->dataend();
  $smtp->quit;
}

   $smtp->datasend("Mimi-Version: 1.0\n");
                        ^
  Typo?
	Alla prossima,
		Marco

   Typo?
Oltre a quel refuso, ci sono errori nei boundary. La stringa non
corrisponde a quella specificata nel content-type (c'è un '_'di troppo) e
l'ultimo boundary non ha il suffisso '--' previsto dallo standard.
Soluzioni:
1. Studiarsi l'RFC 1521
2. Usare MIME::Lite
 
http://search.cpan.org/search?dist=MIME-Lite
Max

 
use MIME::Lite
Fai _molta_ meno fatica!
-- 
echo f 0:0 ffff 0 | debug
La leggerezza del VOLER essere ....

 (added by 
smtp3.libero.it
)
Mime-Version: 1.0
Content-Type: multipart/mixed;boundary="=====================_890842431==_"
To: Gervaso
From: Marco
Subject: PROVA INVIO ATTACHMENT
X-Attachments: c:/windows/desktop/ATTACHMENT;
_=====================_890842431==_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Questo e' un testo di prova,
usato per il corpo di un messaggio mail provvisto
di un attachment e spedito
tramite uno script Perl.
                              Gervaso
_=====================_890842431==_
Content-Type: text/plain; charset="us-ascii";
Content-Disposition: attachment; filename="ATTACHMENT"
Questo e' l'ATTACHMENT della mia e-mail.
_=====================_890842431==_
Content-Type: text/plain; charset="us-ascii"
_=====================_890842431==_
m isapreste ancora una volta indicare analizzando la codifica del messaggio
che cosa c'è che non va ??
Quali RFC devo leggere oltre al 1521 se ce ne sono ??

 
Perchè reiventare la ruota? Usa MIME::Lite.
Max