Thread Email mit Anhang über Formular (7 answers)
Opened by dax42 at 2005-07-20 16:49

dax42
 2005-07-20 20:00
#5302 #5302
User since
2004-06-16
24 Artikel
BenutzerIn
[default_avatar]
Erstmal vielen Dank fuer die Hilfe. Es geht auch schon fast, aber eben nur fast.

Ich habe genau das Beispiel probiert, das auf der oben angegebenen Seite zu finden ist. Wenn ich eine .txt verschicke, so klappt das auch einigermaßen - Umlaute werden korrekt dargestellt, aber der Zeilenumbruch ist so ein komisches Kästchen. Wahrscheinlich liegt das daran, dass der Server auf einer unix-Maschine läuft...

Größere Probleme entstehen, wenn ich eine .pdf oder .doc versenden will, diese sind nach dem email-Empfang nicht mehr zu öffnen (Fehlermeldung lautet auf beschädigt oder so ähnlich).

Hier mein Quellcode:
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
#!/usr/local/bin/perl

use MIME::Lite;
use CGI qw/:standard/;

print "Content-type: text/html\n\n";

# Verzeichnis, in dem die Datei zwischengespeichert wird
my $uploaddir = '/home/b/public_html/upload';

$CGI::POST_MAX=1024 * 1000;

my ($filename) = param('datafile') || "";

my $serverFile = $uploaddir . "/" . (split(/[\\\/]/, param('datafile')))[-1];

print ("Filename: $filename<BR><HR>\n");

if (-e $serverFile){
   print ("File $serverFile is already existing\n");
}
else {
   print ("Writing to file $serverFile<BR>\n");
   my $buffer;
   open (FILE,">$serverFile") or die $!;

   while (my $bytesread=read($filename,$buffer,1024)) {
       print FILE $buffer;
   }
   close (FILE);
}

chmod (0666, "$serverFile");

$email=param('email');
#special character conversion
$email =~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

$message = MIME::Lite->new(
   From => $email,
   To => 'me@my.de',
   Subject => 'Beratung',
   Type    =>'multipart/mixed'
);

$message->attach(Type     =>'TEXT',  
                Data     =>$email
);  

$message->attach(   Type     =>'AUTO',
               Path     =>$serverFile,
               Disposition => 'attachment'
);

$message->send(); # UNIX-sendmail

print "Ihre Daten wurden übermittelt. <BR>\n";

# delete message from server
unlink($serverFile);


Ausserdem würde ich gern wissen, wie ich mit Hilfe des CGI Modules durch die Eingabefelder iterieren kann. Da das Formular ziemlich viele Felder enthält, möchte ich nicht immer explizit param('paramname') angeben müssen.

Dankeschön!\n\n

<!--EDIT|dax42|1121875244-->

View full thread Email mit Anhang über Formular