Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
Alturius
- Beiträge: 25
- Registriert: 14.02.2008 17:35:27
-
Kontaktdaten:
Beitrag
von Alturius » 26.02.2008 14:41:19
hi leute,
also ich ich möchte eine mail versenden mit einem perl skrip. dies geht auch gut nur das problem ist diese mail soll also html dokument angezeigt werden.
Code: Alles auswählen
#!/usr/bin/perl -w
use strict;
use DBI;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(param);
print "Content-type: text/html\n\n";
my $sendmail = "/usr/lib/sendmail";
my $an_name = "Martin Alter";
my $mail_adr_an = 'alter@slub-dresden.de';
my $von_name = "Martin Alter";
my $mail_adr_von = 'Aldeeeralter@web.de';
my $betreff = "Hallo";
my $text = "Hallo wenn ich das hier lese bin ich zufrieden";
my $dbh = DBI -> connect("DBI:mysql:jung3r","jung3r","*****")or die "connection failed $DBI::errstr";
my $auswertung = $dbh -> prepare("SELECT * FROM bilder");
$auswertung -> execute or die $auswertung -> errstr;
$dbh -> disconnect();
open (MAIL, "|$sendmail -t") or die ("Fehler $!");
print MAIL qq|To: "$an_name" <$mail_adr_an>\n|;
print MAIL qq|From: "$von_name" <$mail_adr_von>\n|;
print MAIL qq|Subject: $betreff\n\n|;
print MAIL "Content-Type: multipart/alternative\n\n";
print MAIL "Content-Type: text/plain\n";
print MAIL " charset=\"iso-8859-1\"\n";
print MAIL "Content-Transfer-Encoding: quoted-printable\n\n";
print MAIL "<html>";
print MAIL "<head>";
print MAIL "<title>Start</title>";
print MAIL '<meta name="author" content="alter">';
print MAIL "</head>";
print MAIL '<body text="#000000" bgcolor="#80FF80" link="#FF0000" alink="#FF0000" vlink="#FF0000">';
print MAIL "<table border=1>";
print MAIL "<tr>";
print MAIL "<td><b>Vorname</b></td><td><b>Name</b></td><td><b>Abteilung</b></td><td><b>Zimmer</b></td>";
print MAIL &schleife;
print MAIL "</body>";
print MAIL "</html>";
close (MAIL) or die ("Fehler beim Schließen. Grund : $!");
sub schleife {
while(my $data = $auswertung -> fetchrow_hashref) {
print MAIL "<tr>";
print MAIL "<td>$$data{'Vorname'}</td>";
print MAIL "<td>$$data{'name'}</td>";
print MAIL "<td>$$data{'Abteilung'}</td>";
print MAIL "<td>$$data{'zimmer'}</td>";
print MAIL "</tr>";
}
}
das ist mein code und ich bekomme immer alles so ausgegeben wie es da steht, was ich aber nicht will. hat einer ne idee?
vielen dank schon mal!
Software is like sex, it's best when it's free
- Linus Torvalds -
Linux wird nie das meist installierte Betriebssystem sein, so oft wie man Windows neu Installieren muss.
-
brill
- Beiträge: 354
- Registriert: 04.02.2005 10:37:34
- Lizenz eigener Beiträge: GNU General Public License
Beitrag
von brill » 26.02.2008 15:31:18
kommt der ganze Quellcode von deinem Skript in der Email an oder nur der Teil aus der schleife?
Brill
-
Alturius
- Beiträge: 25
- Registriert: 14.02.2008 17:35:27
-
Kontaktdaten:
Beitrag
von Alturius » 26.02.2008 18:05:03
also das kommt dann so in der mail an...
Code: Alles auswählen
Content-Type: multipart/alternative
Content-Type: text/plain
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<html><head><title>Start</title><meta name="author" content="alter"></head><body text="#000000" bgcolor="#80FF80" link="#FF0000" alink="#FF0000" vlink="#FF0000"><table border=1><tr><td><b>Vorname</b></td><td><b>Name</b></td><td><b>Abteilung</b></td><td>
<b>Zimmer</b></td><tr><td>werwe</td><td>ewrw</td><td>wer</td><td>wer</td></tr><tr><td>aaa</td><td>aa</td>
<td>aaa</td><td>aaa</td></tr><tr><td>aaa</td><td>aaa</td><td>aaa</td><td>aaa</td></tr></body></html>
er liest alles richtig aus der db aus..nur er soll mir halt dann eine tabelle erstellen also html...verstehst du?
Danke
Alturius
Zuletzt geändert von
Alturius am 27.02.2008 07:41:18, insgesamt 1-mal geändert.
Software is like sex, it's best when it's free
- Linus Torvalds -
Linux wird nie das meist installierte Betriebssystem sein, so oft wie man Windows neu Installieren muss.
-
mauser
- Beiträge: 1854
- Registriert: 27.01.2005 22:34:48
Beitrag
von mauser » 26.02.2008 18:12:00
Hey,
nimm doch erstmal die doppelten Newlines aus dem Header, die gehören da imho net hin.Dein Mailclient weiss dann net mehr was zum Header gehört und was Nachricht ist..
Gruss,
mauser
-
Alturius
- Beiträge: 25
- Registriert: 14.02.2008 17:35:27
-
Kontaktdaten:
Beitrag
von Alturius » 26.02.2008 18:13:53
mauser hat geschrieben:Hey,
nimm doch erstmal die doppelten Newlines aus dem Header, die gehören da imho net hin.Dein Mailclient weiss dann net mehr was zum Header gehört und was Nachricht ist..
Gruss,
mauser
was meinst du mit doppelten newlines???
Software is like sex, it's best when it's free
- Linus Torvalds -
Linux wird nie das meist installierte Betriebssystem sein, so oft wie man Windows neu Installieren muss.
-
mauser
- Beiträge: 1854
- Registriert: 27.01.2005 22:34:48
Beitrag
von mauser » 26.02.2008 18:16:27
Weiterhin sollte der Content-Type doch text/html sein, oder net? Hast du dir eigentlich mal angeschaut wie so eine HTML-Email aussieht ?
Gruss,
mauser
-
mauser
- Beiträge: 1854
- Registriert: 27.01.2005 22:34:48
Beitrag
von mauser » 26.02.2008 18:17:41
Alturius hat geschrieben:mauser hat geschrieben:Hey,
nimm doch erstmal die doppelten Newlines aus dem Header, die gehören da imho net hin.Dein Mailclient weiss dann net mehr was zum Header gehört und was Nachricht ist..
Gruss,
mauser
was meinst du mit doppelten newlines???
Newline = "\n"
Doppelte Newline = "\n\n"
Das hast du z.b. nach dem Subject eingebaut.
-
Alturius
- Beiträge: 25
- Registriert: 14.02.2008 17:35:27
-
Kontaktdaten:
Beitrag
von Alturius » 26.02.2008 18:24:08
ok aussetzer...
naja da sieht man halt nur den html code und nix weiter wie auf einer normalen hompage halt. und an dem newline liegt es auch nicht....
Software is like sex, it's best when it's free
- Linus Torvalds -
Linux wird nie das meist installierte Betriebssystem sein, so oft wie man Windows neu Installieren muss.
-
mauser
- Beiträge: 1854
- Registriert: 27.01.2005 22:34:48
Beitrag
von mauser » 26.02.2008 18:49:40
Hi,
poste doch nochmal deine aktuelle Ausgabe. Hast du schonmal versucht deinem Email-Programm explizit zu sagen da es HTML ist?
Gruss,
mauser
-
Alturius
- Beiträge: 25
- Registriert: 14.02.2008 17:35:27
-
Kontaktdaten:
Beitrag
von Alturius » 27.02.2008 07:40:09
nein habe ich noch nicht. aber wie soll ich das denn machen? dem outlook zu sagen wäre sinnlos weil dann müsste die einstellung ja jeder vornehmen der die mails bekommt. und wie ich das perl sage das der client das so versteht das ist ja die grosse frage.
Code: Alles auswählen
#!/usr/bin/perl -w
use strict;
use DBI;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(param);
print "Content-type: text/html\n\n";
my $sendmail = "/usr/lib/sendmail";
my $an_name = "Martin Alter";
my $mail_adr_an = '**********;
my $von_name = "Martin Alter";
my $mail_adr_von = '***********';
my $betreff = "Hallo";
my $text = "Hallo wenn ich das hier lese bin ich zufrieden";
my $dbh = DBI -> connect("DBI:mysql:jung3r","jung3r","*********")or die "connection failed $DBI::errstr";
my $auswertung = $dbh -> prepare("SELECT * FROM bilder");
$auswertung -> execute or die $auswertung -> errstr;
$dbh -> disconnect();
open (MAIL, "|$sendmail -t") or die ("Fehler $!");
print MAIL qq|To: "$an_name" <$mail_adr_an>\n|;
print MAIL qq|From: "$von_name" <$mail_adr_von>\n|;
print MAIL qq|Subject: $betreff\n\n|;
print MAIL "Content-Type: text/html\n\n";
print MAIL " charset=\"iso-8859-1\"\n";
print MAIL "Content-Transfer-Encoding: quoted-printable\n\n";
print MAIL "<html>";
print MAIL "<head>";
print MAIL "<title>Start</title>";
print MAIL '<meta name="author" content="alter">';
print MAIL "</head>";
print MAIL '<body text="#000000" bgcolor="#80FF80" link="#FF0000" alink="#FF0000" vlink="#FF0000">';
print MAIL "<table border=1>";
print MAIL "<tr>";
print MAIL "<td><b>Vorname</b></td><td><b>Name</b></td><td><b>Abteilung</b></td><td><b>Zimmer</b></td>";
print MAIL &schleife;
print MAIL "</body>";
print MAIL "</html>";
close (MAIL) or die ("Fehler beim Schließen. Grund : $!");
sub schleife {
while(my $data = $auswertung -> fetchrow_hashref) {
print MAIL "<tr>";
print MAIL "<td>$$data{'Vorname'}</td>";
print MAIL "<td>$$data{'name'}</td>";
print MAIL "<td>$$data{'Abteilung'}</td>";
print MAIL "<td>$$data{'zimmer'}</td>";
print MAIL "</tr>";
}
}
und die ausgabe:
Code: Alles auswählen
Content-Type: text/html
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<html><head><title>Start</title><meta name="author" content="alter"></head><body text="#000000" bgcolor="#80FF80" link="#FF0000" alink="#FF0000" vlink="#FF0000"><table border=1><tr><td><b>Vorname</b></td><td><b>Name</b></td><td><b>Abteilung</b></td><td>
<b>Zimmer</b></td><tr><td>werwe</td><td>ewrw</td><td>wer</td><td>wer</td></tr><tr><td>aaa</td>
<td>aa</td><td>aaa</td><td>aaa</td></tr><tr><td>aaa</td><td>aaa</td><td>aaa</td><td>aaa</td></tr></body></html>
(ist so angepasst das es ins forum passt. also zeilen umbrüche stimmen nicht)[/code][/quote]
Software is like sex, it's best when it's free
- Linus Torvalds -
Linux wird nie das meist installierte Betriebssystem sein, so oft wie man Windows neu Installieren muss.
-
brill
- Beiträge: 354
- Registriert: 04.02.2005 10:37:34
- Lizenz eigener Beiträge: GNU General Public License
Beitrag
von brill » 27.02.2008 08:49:49
also mit Perl hab ich das sleber noch nicht gemacht (nur mit PHP) aber ich glaube das Problem ist für html Email ein bestimmtest encoding verwendet werden muss.
schau dir doch mal den Link an
http://www.infos24.de/perle/handbuch/25_mail.htm da wird eine html Email mit Perl verschickt.
Brill
-
nepos
- Beiträge: 5238
- Registriert: 05.01.2005 10:08:12
Beitrag
von nepos » 27.02.2008 08:55:12
Würde dir empfehlen, da eines der vielen Perl-Module wie z.B. MIME::Lite zu benutzen. Damit kannst du deine Mail einfacher zusammensetzen und das Modul kümmert sich schon um einige Dinge.
Kleines Beispiel aus der Dokumentation des Moduls:
Code: Alles auswählen
$msg = MIME::Lite->new(
To =>'you@yourhost.com',
Subject =>'HTML with in-line images!',
Type =>'multipart/related'
);
$msg->attach(
Type => 'text/html',
Data => qq{
<body>
Here's <i>my</i> image:
<img src="cid:myimage.gif">
</body>
},
);
$msg->attach(
Type => 'image/gif',
Id => 'myimage.gif',
Path => '/path/to/somefile.gif',
);
$msg->send();
Da wäre dann sogar noch ein Bild mit in der E-Mail.
-
Alturius
- Beiträge: 25
- Registriert: 14.02.2008 17:35:27
-
Kontaktdaten:
Beitrag
von Alturius » 27.02.2008 09:28:28
jo sieht mal nicht schlecht aus nur das ding ist das auf dem server kein MIME::Lite installiert ist so wie es aussieht. und ich habe nicht die rechte was daran zu machen...
Software is like sex, it's best when it's free
- Linus Torvalds -
Linux wird nie das meist installierte Betriebssystem sein, so oft wie man Windows neu Installieren muss.
-
nepos
- Beiträge: 5238
- Registriert: 05.01.2005 10:08:12
Beitrag
von nepos » 27.02.2008 14:00:08
Auch wenn man keine Adminrechte hat, kann man Module installieren, sofern es sich um reine Perl-Module handelt (es gibt auch Module, die teilweise in C geschrieben sind, da geht das nicht so ohne weiteres).
Lies dir doch mal die Tipps hier durch:
http://wiki.perl-community.de/bin/view/ ... Unix_Linux
Ein Perl-Modul ist eigentlich auch nur eine ganz normale Textdatei, die man hochladen muss. Und die Verzeichnisse, in denen Perl nach Modulen sucht, kann man wie in obigem Artikel beschrieben mittels
use lib erweitern.
Das braucht man auch, wenn das eigene Projekt eigene Module enthält...
Oder du könntest einfach mal den Admin/Webhoster fragen, ob er dir das Modul installieren kann. Viele machen das nämlich, auch wenn sie es nicht explizit in ihren Seiten erwähnen.
-
Alturius
- Beiträge: 25
- Registriert: 14.02.2008 17:35:27
-
Kontaktdaten:
Beitrag
von Alturius » 27.02.2008 15:09:07
ja vielen dank das habe ich auch gemacht. aber dann gleich das neue problem er gibt mir dann die meldung:
Code: Alles auswählen
Software error:
Can't locate Email/Date/Format.pm in @INC (@INC contains: MIME/Email/Date/Format.pm MIME/Lite.pm /usr/lib/perl5/5.8.7/x86_64-linux-thread-multi /usr/lib/perl5/5.8.7 /usr/lib/perl5/site_perl/5.8.7/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.7/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl .) at MIME/Lite.pm line 1097.
For help, please send mail to the webmaster (root@b4ckb0n3.de), giving this error message and the time and date of the error.
das heist ja das das packet Format.pm fehlt nur nun bekomme ich es nicht hin der datei Lite.pm zu sagen wo es liegt. hat einer ne ahnung?[/code][/quote]
Software is like sex, it's best when it's free
- Linus Torvalds -
Linux wird nie das meist installierte Betriebssystem sein, so oft wie man Windows neu Installieren muss.
-
nepos
- Beiträge: 5238
- Registriert: 05.01.2005 10:08:12
Beitrag
von nepos » 27.02.2008 15:47:58
Hm, naja, da bist du nun über eine Modul-Abhängigkeit gestolpert. Da scheint wohl Email::Date bzw. Email::Date::Format zu fehlen.
Btw, dein @INC sieht komisch aus. Da sollten eigentlich nur Verzeichnisse drinstehen. Wie sieht denn deine use lib-Zeile aus?
-
Alturius
- Beiträge: 25
- Registriert: 14.02.2008 17:35:27
-
Kontaktdaten:
Beitrag
von Alturius » 27.02.2008 17:15:49
die sieht so aus...
Code: Alles auswählen
use lib 'MIME/Lite.pm';
use MIME::Lite;
use lib 'MIME/Email/Date/Format.pm';
use Date::Format;
habe das noch mal hinzugefügt weil ich dachte dann geht es evt. aber es liegt ja mehr an der datei Lite.pm würde ich sagen
Software is like sex, it's best when it's free
- Linus Torvalds -
Linux wird nie das meist installierte Betriebssystem sein, so oft wie man Windows neu Installieren muss.
-
Alturius
- Beiträge: 25
- Registriert: 14.02.2008 17:35:27
-
Kontaktdaten:
Beitrag
von Alturius » 27.02.2008 17:44:20
so also leute es geht nun habe es hin bekommen. habe mir einfach noch das modul installen lassen.
EDIT: Das wollte ich noch machen: hier ist noch mal der qquelltext wie das skipt nun geht:
Code: Alles auswählen
#!/usr/bin/perl -w
use strict;
use DBI;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(param);
use MIME::Lite;
print "Content-type: text/html\n\n";
my $sendmail = "/usr/lib/sendmail";
my $an_name = "Martin Alter";
my $mail_adr_an = '******';
my $von_name = "Martin Alter";
my $mail_adr_von = '******';
my $betreff = "Hallo";
my $text = "Hallo wenn ich das hier lese bin ich zufrieden";
my $dbh = DBI -> connect("DBI:mysql:jung3r","jung3r","*****")or die "connection failed $DBI::errstr";
my $auswertung = $dbh -> prepare("SELECT * FROM bilder");
$auswertung -> execute or die $auswertung -> errstr;
$dbh -> disconnect();
use MIME::Lite;
my $msg = MIME::Lite->new(
From =>'alter\@slub-dresden.de',
To =>'Aldeeeralter\@web.de',
Subject =>'Helloooooo, nurse!',
Type => 'text/html',
Data => '<html>
<head>
<title>Start</title>
<meta name="author" content="alter">
</head>
<body text="#000000" bgcolor="#80FF80" link="#FF0000" alink="#FF0000" vlink="#FF0000">
<div align="center"><b>Angaben für dem PC Bestand</b></div>
<form action="" method="POST">
Name<br>
<input name="$name" value="" type="test"><br>
Vorname<br>
<input name="vorname" value="" type="test"><br><br>
Abteilung<br>
<input name="abteilung" value="" type="test"><br>
Zimmer<br>
<input name="zimmer" value="" type="test"><br>
<br><br><br>
<table>
<tr> Anzahl
<td><input name="pc" value="" type="test" size="2"></td>
<td>PC\'s </td>
</tr>
<tr>
<td><input name="monitore" value="" type="test" size="2"></td>
<td>Monitore </td>
</tr>
<tr>
<td><input name="Drucker" value="" type="test" size="2"></td>
<td>Drucker </td>
</tr>
</table>
<input name="versenden" value="Senden" type="submit">
</body>
</html>'
);
$msg->send;
sub schleife {
while(my $data = $auswertung -> fetchrow_hashref) {
print MAIL "<tr>";
print MAIL "<td>$$data{'Vorname'}</td>";
print MAIL "<td>$$data{'name'}</td>";
print MAIL "<td>$$data{'Abteilung'}</td>";
print MAIL "<td>$$data{'zimmer'}</td>";
print MAIL "</tr>";
}
}
Vielen Dank an alle die mich unterstützt haben.
Gruß
Software is like sex, it's best when it's free
- Linus Torvalds -
Linux wird nie das meist installierte Betriebssystem sein, so oft wie man Windows neu Installieren muss.