Schrift
[thread]347[/thread]

SendMail-Attachment: ?!: Attachment mit Perl (Seite 3)

Leser: 1


<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
soilant
 2004-08-09 13:28
#3360 #3360
User since
2004-08-07
13 Artikel
BenutzerIn
[Homepage] [default_avatar]
@pq: ja stimmt, ich hab alle Variablen in ein grosses anfangs-my getan damit ich mich nicht drum kümmern muss welche wo gilt und es mir eh wurscht ist ob das Script eine Zehntelsekunde oder eine Sekunde läuft, aber dieser Effekt von strict war mir nicht bekannt, ich gelobe Besserung ;-)

@esskar: es hat nichts gebracht, nach der letzten boundary einen Abstand einzufügen, d.h. es meldet immer noch "MIME_MISSING_BOUNDARY". - ?! Gute Idee, die time zu verwenden! Kennst Du irgendein Buch, in dem MIME::Lite besprochen wird? Die Angaben darüber unter cpan.org sind mir reichlich verwirrlich.

Trotz allem würde mich interessieren, was (in Eriks Script) die Zeile bedeutet:
Code: (dl )
$b = "--=_".substr(pack('u', ('Mail'.'Name')), 0, 24);
esskar
 2004-08-09 13:55
#3361 #3361
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hiermal ein auszug aus meinen quellen.
Mime-Lite ist echt einfach

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package Sources::Mime;

use strict;
use warnings;

use MIME::Lite;

use Sources::Vars;
use Sources::Mail;

use vars qw(@ISA);


@ISA = qw( MIME::Lite );

sub as_smtpstring
{
my ($self) = @_;
my $buf = [];
   my $io = (wrap MIME::Lite::IO_ScalarArray $buf);

$self->replace('Message-ID' => Sources::Mail::build_message_id($self->get('From')));
$self->replace('X-Mailer' => Sources::Vars::X_MAILER);
$self->attr('MIME-Version' => '1.0');

   ### Create a safe head:
   my @fields = grep { $_->[0] ne 'bcc' } @{$self->fields};
   my $header = $self->fields_as_string(\@fields);

   $io->print($header, "\n");
   $self->print_body($io);

   join '', @$buf;
}


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
my $msg = Sources::Mime->build(
  From   => $mime_from,
  To   => $mime_to,
  Cc   => $mime_cc,
  Bcc   => $mime_bcc,
  Subject   => $subject,
  Type   => "$type; charset=\"$charset\"",
  Encoding   => 'quoted-printable',
  Data   => $text);

my $mime_types = Sources::Global::load_inifile('./mime.types');

foreach my $fileattach (@attachs)
{
  my $nname = Sources::Global::get_filename($fileattach);
  $nname =~ s!-....$!!;
  my $ext = lc(Sources::Global::get_fileextension($nname));
  my $type = $mime_types->{$ext} || 'Unknown';

  $msg->attach(
     Type   => $type,
     Path   => $fileattach,
     Filename   => $nname,
     Disposition   => 'attachment');
}


btw. ich hatte mich doch nicht über MIME::Lite geärgert. es war MIME::Parser :)\n\n

<!--EDIT|esskar|1092074257-->
esskar
 2004-08-09 13:57
#3362 #3362
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=soilant,09.08.2004, 11:28]Trotz allem würde mich interessieren, was (in Eriks Script) die Zeile bedeutet:
Code: (dl )
$b = "--=_".substr(pack('u', ('Mail'.'Name')), 0, 24);
[/quote]
Code: (dl )
1
2
3
4
perl
print substr(pack('u', ('Mail'.'Name')), 0, 24);
^Z
(36%I;$YA;64`
Dubu
 2004-08-09 19:54
#3363 #3363
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
@esskar: Ist diese Sources:: Hierarchie deine eigene? Auf CPAN gibt's die nicht. Den Zusammenhang zu MIME::Lite sehe ich da nicht direkt.
esskar
 2004-08-09 21:55
#3364 #3364
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ja Sources gehört zu mir!
sorry, wenn ich damit jetzt irgendwen verwirrt habe!

edit: ups, jetzt seh ich erst den wirklichen Fehler... fixed.\n\n

<!--EDIT|esskar|1092074203-->
Dubu
 2004-08-10 02:05
#3365 #3365
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ich fand die Doku von MIME::Lite auch ganz verstaendlich. Im Wesentlichen braucht man nur das, was auf den ersten zwei Seiten steht. :)

Aber hier mal ein Beispiel: Eine Mail per Browser empfangen (Code geklaut aus den Beispielen zu CGI.pm) und per MIME::Lite verschicken:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/perl -w
use strict;
use warnings;
use CGI qw(:standard);
use CGI::Carp qw/fatalsToBrowser/;
use MIME::Lite;

my $empfaenger = 'dubu@localhost';
my $sender = 'apache@localhost';

print header();
print start_html('Beispiel Datei empfangen und per Mail versenden');
print h1('Beispiel Datei empfangen und per Mail versenden'),
   p('Bitte eine Datei auswaehlen und mit dem Abschicken-Button hochschicken'),
   start_multipart_form(),
   "Dateiname:",
   filefield('filename','',45),
   submit('Submit','Abschicken'),
   endform;

# Formulardaten bearbeiten, wenn vorhanden
if (my $file = param('filename')) {
   my $tmpfile=tmpFileName($file);
   my $mimetype = uploadInfo($file)->{'Content-Type'} || '';
   print hr(),
         h2("Dateiname: $file"),
         h4("abgelegt als: $tmpfile"),
         h4("MIME Type:",em($mimetype));

   ## Date als Mail versenden
   # Erst der Mail-Header
   my $msg = MIME::Lite->new (
       From    => $sender,
       To      => $empfaenger,
       Subject => "Datei $file",
       Type    => 'multipart/mixed',
   );

   # Dann der begleitende Text
   $msg->attach (
       Type    => 'TEXT',
       Data    => "Hier die Datei, versendet durch den Webserver (PID $$)",
   );

   # Dann das Attachment selber
   $msg->attach (
       Type    => $mimetype,
       Path    => $tmpfile,
       Filename => $file,
       Disposition => 'attachment',
   );

   # TEST-AUSGABE im Browser (Vorsicht bei grossen Dateien!)
   # print "<pre>\n", $msg->as_string, "\n</pre>\n";

   # Message senden (default: sendmail benutzen, siehe Doku)
   if ($msg->send()) {
print p(qq{<font color="green">Datei $file an $empfaenger verschickt.</font>});
   } else {
       print p('<font color="red">Sorry, keine Moeglichkeit Mails zu versenden!</font>');
   }
}

print hr(),
   end_html;
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2004-08-07 17:43.