hi,
untenstehendes Script kannst du vielleicht anpassen
Erwin
=============================================================
#!/usr/bin/perl
Versenden von Mails mit Attachment per Webfrontend
Geschrieben von Rolf Rost, 13.7.2002
###########################################################################
Benutzervorgaben
Das Template fuer den Seitenaufbau bis zum body steht am Ende des Scripts
Der Hostname des MailRelays (wo ein Mailtransfer Agent laueft)
Normalerweise ist das der localhost, falls dort ein *sendmail* laeuft
my $smtp_host = 'localhost';
Absender, Vorbelegung Eingabefeld
my $abs = 'rolfrost@web.de';
Uploadbegrenzung ($max in bytes)
my $max = 1024 * 1000;
###########################################################################
use strict;
use subs qw(a_html z_html form mime_send text_send abbruch);
use CGI qw(-private_tempfiles );
use Net::SMTP;
use File::Basename;
use MIME::Base64 qw(encode_base64);
print "Content-type: text/html\n\n";
my $q = new CGI;
Ablauf des CGIs
if($q->param){
if($q->param('anhang')){ mime_send }
else{ text_send }
}
else{
a_html;
form;
z_html;
}
exit;
Unterfunktionen
Die Mail wenn ein Anhang dran ist
sub mime_send{
# Eingaben zuweisen
my $abs = $q->param('abs_email') or abbruch "Fehlerhafte Eingabe","Backbutton klicken und Absenderemail eingeben";
my $rcp = $q->param('rcp_email') or abbruch "Fehlerhafte Eingabe","Backbutton klicken und Empfängeremail eingeben";
my $subj = $q->param('betreff');
my $msg = $q->param('text');
$subj ||= "Kein Betreff";
# Uploadfeld parsen, Dateiname und MIME Type
my $anhang = $q->param('anhang');
fileparse_set_fstype("MSDOS"); # <--- empfohlen, falls Probleme bei MS WindowsClients...
my ($original_filename, $local_path) = fileparse $anhang;
my $mime_type = $q->uploadInfo($anhang)->{'Content-Type'};
# den handler auslesen mit der read() funktion
my ($bytesread,$buffer,$sum,$str);
while ($bytesread=read($anhang,$buffer,1024)) {
$str .= $buffer;
$sum += $bytesread;
if($sum > $max){
abbruch("Die angehaengte Datei ist zu gross!","Der Prozess wurde abgebrochen")
}
}
# den Anhang codieren
my $base64_str = encode_base64($str);
# Nun kann die Maildatei erstellt werden
my $mailfile=<<"12----------------------------------------------------34";
From: $abs
To: $rcp
Subject: $subj
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="roro"
This is a multi-part message in MIME format.
--roro
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
$msg
--roro
Content-Type: $mime_type;
name="$original_filename"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="$original_filename"
$base64_str
--roro--
12----------------------------------------------------34
# senden
my $smtp = new Net::SMTP($smtp_host) or abbruch("Keine Verbindung zu SMTP Host *$smtp_host*");
# Ab geht die Post und tschuess
$smtp->mail($abs);
$smtp->to( $rcp );
$smtp->data( $mailfile );
$smtp->quit();
# Das Senden verkuenden
a_html;
print qq(<h3>Die Mail mit Anhang wurde gesendet</h3>\n<p>Backbutton klicken oder <a href="$ENV{'SCRIPT_NAME'}">Script neu laden...</a>\n);
z_html;
}
Die Mail wenn kein Anhang dran ist
sub text_send{
# Eingaben zuweisen
my $abs = $q->param('abs_email') or abbruch "Fehlerhafte Eingabe","Backbutton klicken und Absenderemail eingeben";
my $rcp = $q->param('rcp_email') or abbruch "Fehlerhafte Eingabe","Backbutton klicken und Empfängeremail eingeben";
my $subj = $q->param('betreff');
my $msg = $q->param('text');
$subj ||= "Kein Betreff";
# senden
my $smtp = new Net::SMTP($smtp_host) or abbruch("Keine Verbindung zu SMTP Host *$smtp_host*");
my $mailfile = qq(From: $abs\nTo: $rcp\nSubject: $subj\n\n$msg\n\n);
# Ab geht die Post und tschuess
$smtp->mail($abs);
$smtp->to( $rcp );
$smtp->data( $mailfile );
$smtp->quit();
# Das Senden verkuenden
a_html;
print qq(<h3>Die Mail wurde gesendet</h3>\n<p>Backbutton klicken oder <a href="$ENV{'SCRIPT_NAME'}">Script neu laden...</a>\n);
z_html;
}
Abbruchfunktion bei Fehlerhafter Eingabe
sub abbruch{
print qq(<h1>$_[0]</h1>\n<p>$_[1]\n);
exit;
}
Das Frontendformular
sub form{
print<<"x-----------------------------------------------------------------x";
<form action="$ENV{'SCRIPT_NAME'}" method="post" enctype="multipart/form-data">
<table border=1 cellspacing=0 cellpadding=0 width="80%">
<tr><th colspan=2 align="left">Mailformular, bitte alle Felder ausfüllen</th></tr>
<tr><td>Absender eMail: </td><td><input name="abs_email" size=50 value="$abs"></td></tr>
<tr><td>Empfänger eMail: </td><td><input name="rcp_email" size=50></td></tr>
<tr><td>Betreff: </td><td><input name="betreff" size=50></td></tr>
<tr><td valign="top">Nachricht: </td><td><textarea name="text" cols=80 rows=20 wrap="physical"></textarea></td></tr>
<tr><td colspan=2 align="center"><input type="submit" name="senden" value="Mail senden"><input type="reset" value="Eingaben verwerfen"></td></tr>
<tr><td>Dateianlage: </td><td> <input type="file" name="anhang" size=60> </td></tr>
</table>
</form>
x-----------------------------------------------------------------x
}
zwei Funktionen zum Seitenaufbau
sub a_html{while(<DATA>){print}}
sub z_html{print qq(</body>\n</html>\n)}
###########################################################################
Kopf der HTML Datei ist hier definiert, Änderungen unterhal des __END__
__END__
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>xMail Frontend zum Versenden von Mails mit Anhang</TITLE>
<LINK REL="stylesheet" HREF="/nv.css" TYPE="text/css">
<META NAME="Author" CONTENT="Rolf Rost">
</HEAD>
<BODY>
<h2>xMail Frontend zum Versenden von Mails mit Anhang</h2>