form mailer mit smtp::lite
Lude
- perl
Hi,
ich benoetige einen form mailer mit mime::lite (Windows-System ohne sendmail). Gibt's sowas?
Gruss,
Lude
hi Lude
auf http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.12.2.2
ist ein Beispiel für MIME::Lite, das Modul ist nur eine Datei.
Aber es geht auch ohne MIME::Lite
http://i-netlab.de/cgi-bin/index.cgi?vi=Mail_Clients
Wenn die Datei nach einem Upload gleich attached werden soll, baue ich die boundary selbst und lege die Datei nicht erst tmp. ab.
Gruss, Erwin
Hi,
auf http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.12.2.2
ist ein Beispiel für MIME::Lite, das Modul ist nur eine Datei.
Aber es geht auch ohne MIME::Lite
http://i-netlab.de/cgi-bin/index.cgi?vi=Mail_ClientsWenn die Datei nach einem Upload gleich attached werden soll, baue ich die boundary selbst und lege die Datei nicht erst tmp. ab.
danke, :-)
aber,
hilft mir nicht. ;-)
Ich hatte da an einen allgemeintauglichen Form-Mailer gedacht, der idealerweise u.a. Pflichtfelder und andere Einschraenkungen unterstuetzt, oder auch E-Mailadressen validiert oder zudem noch eine "Dankeschoen, Formular ist abgeschicht"-Seite generiert.
Fuer "sendmail" gibt's sowas. - Selbst entwickeln will ich das aus grundsaetzlichen Erwaegungen heraus natuerlich nicht.
Gruss,
Lude
hi,
untenstehendes Script kannst du vielleicht anpassen
Erwin
=============================================================
#!/usr/bin/perl
###########################################################################
my $smtp_host = 'localhost';
my $abs = 'rolfrost@web.de';
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;
if($q->param){
if($q->param('anhang')){ mime_send }
else{ text_send }
}
else{
a_html;
form;
z_html;
}
exit;
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;
}
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;
}
sub abbruch{
print qq(<h1>$_[0]</h1>\n<p>$_[1]\n);
exit;
}
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
}
sub a_html{while(<DATA>){print}}
sub z_html{print qq(</body>\n</html>\n)}
###########################################################################
__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>