Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11836[/thread]

Mails über Sendmail >Lokal< senden

Leser: 2


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Hoamer
 2008-05-19 17:05
#109925 #109925
User since
2008-05-19
8 Artikel
BenutzerIn
[default_avatar]
Guten Tag allerseits,

ich habe mich vor ungefähr einer Woche an Perl gesetzt.
Dort habe ich aus einer MySQL-Datenbank Dantensätze eingelesen und,
nachdem ich diese gefiltert habe, wieder ausgegeben.
Die Ausgabe soll nun per Mail weitergeleitet werden.
Es gibt genug vorgefertigte Skripte im Internet, doch leider bekomme ich es nicht hin...egal mit welchem.
Foren über Foren wurden von mir durchstöbert, doch es ging fast immer nur um Skripte, welche auf einem Server ausgeführt werden.
Ich möchte dies aber lokal erledigen. (Per Konsole steuer ich das Skript an und führe es nach bestimmten Parametern aus.)
Meine Frage bezieht sich nun auf folgendes, von mir aus dem Internet kopierten Skript...:

Code (perl): (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
## Pfad zu Perl

#!/usr/bin/perl

#

# Pfad zu sendmail

my $mailprog = '/usr/sbin/sendmail';
print "1";
#

# Variablendefinition

my $yourmail = 'simon@martinelli.ch';

my $from     = 'test@martinelli.ch';

my $name     = 'Martinelli';

my $vorname  = 'Simon';

my $subject  = 'Testmail';

my $body     = 'Dies ist eine Testmail.';
print "1";
#

&Send_Mail;

#
print "1";
sub Send_Mail 
print "1";
{

open (MAIL, "|$mailprog $yourmail");

print MAIL ("From: $name $vorname <$from>\n");

print MAIL ("Subject: $subject\n\n");

print MAIL ("$body");

close (MAIL);
print "1";
}



Ich habe Sendmail installiert und es ist in dem oben angegebenen Verzeichnis vorhanden.
(Es war schon installiert)

1. Frage: Wie soll das funktionieren, wenn ich einfach eine Mail "From" angebe, aber Sendmail (mir) garkeine Daten (SMTP) vorliegen? (Konfiguration des Sendmails?)

2. Frage: Ich bin nicht unbedingt auf Sendmail angewiesen. Man kann ja auch direkt auf den SMTP zugreifen. - Was natürlich deutlich schwieriger zu Händeln ist...deshalb lasse ich lieber die Finger davon.

3. Frage: Andere, leichtere Alternativen, die Ihr mir anbieten könnt?


Vielen Dank für eure Antworten ;)


MfG
Hoamer
murphy
 2008-05-19 17:20
#109927 #109927
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Irgendwie verstehe ich die Frage nicht: Willst Du nun Mail an Deinen lokalen MTA weiterreichen oder willst Du sie per SMTP verschicken?

Um die Nachricht an Deinen lokalen MTA zu übergeben ist eine Pipe zu dem passenden lokalen Programm durchaus geeignet, für direkt Versand per SMTP würde ich mir mal CPAN:Net::SMTP anschauen.
When C++ is your hammer, every problem looks like your thumb.
Hoamer
 2008-05-19 17:24
#109928 #109928
User since
2008-05-19
8 Artikel
BenutzerIn
[default_avatar]
Sofern ich es verstanden habe, möchte ich das über den MTA erledigen - Sendmail.

Aber bezogen auf dieses Skript...(s.o.) - Wo gebe ich dort den SMTP an, da ich ja nicht einfach irgendeine Mailadresse in "From" eintragen kann, ohn die Daten des SMTPs zu kennen...?
Linuxer
 2008-05-19 17:32
#109929 #109929
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Ist der Sendmail denn konfiguriert und arbeitet auch als Mailserver?

Dann könnte auch CPAN:Mail::Sender eine brauchbare Lösung bieten.

Ansonsten ist der Aufruf des Sendmails fehlerhaft und kann so nicht arbeiten.

Wenigstens die Option -t sollte dem Sendmail mitgegeben werden.

Hier im Wiki gibt es auch noch einen Artikel, aus dem man sich ein paar Dinge übernehmen kann:

Wiki - Sendmail mit Attachments
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Hoamer
 2008-05-19 17:34
#109930 #109930
User since
2008-05-19
8 Artikel
BenutzerIn
[default_avatar]
Okay, erstmal vielen Dank.
Ich werde mich mit dem Stoff auseinandersetzen, welchen du mir netterweise geliefert hast und mich bei Fragen, bzw. wenn ich alles Erledigt habe nochmal melden, was mein Problem war.

MfG
Hoamer
Linuxer
 2008-05-19 17:37
#109931 #109931
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Allgemeiner Tipp noch:

Verwende in Deinen Skripten "use strict;" und "use warnings;"
Kurz gesagt, helfen diese beiden Pragmas Dir beim sauberen Perl-Programmieren.

Die Zeile "#!/usr/bin/perl" muss als erste Zeile im Skript stehen, sonst wird sie nicht in Ihrer besonderen Bedeutung (Shebang) ausgewertet.

Ein passender Start eines Perl-Skripts sähe z.B. so aus:

Code (perl): (dl )
1
2
3
4
#!/usr/bin/perl
use strict;
use warnings;
use Mail::Sender;


Doku nachgetragen:
perldoc warnings
perldoc strict
wiki: Shebang
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
murphy
 2008-05-19 18:22
#109936 #109936
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Hoamer+2008-05-19 15:24:55--
Sofern ich es verstanden habe, möchte ich das über den MTA erledigen - Sendmail.

Aber bezogen auf dieses Skript...(s.o.) - Wo gebe ich dort den SMTP an, da ich ja nicht einfach irgendeine Mailadresse in "From" eintragen kann, ohn die Daten des SMTPs zu kennen...?


Wenn Du die E-Mail an Deinen lokalen MTA weiterreichst, dann ist die Adresse irgendeines SMTP-Servers nicht mehr Dein Problem, sondern das des MTAs. Das Skript muss und kann in dem Falle also keinen SMTP-Server angeben.

Der Aufruf von Sendmail in Deinem Beispielskript ist durchaus korrekt. Da Sendmail die Empfängeradresse als Kommandozeilenparameter übergeben bekommt, ist auch die hier schon erwaehnte Option -t nicht nötig.

Ich würde allerdings einen saubereren Programmierstil als in dem Beispielskript empfehlen. Fehlerüberprüfungen können ja nicht schaden:
Code (perl): (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
#!/usr/bin/perl
use 5.008;
use strict;
use warnings;

use constant SENDMAIL => '/usr/sbin/sendmail';

my $from = 'foo@bar.example';
my $to = 'blubb@boing.example';
my $subject = 'Some subject';

my $body = "The message you want to send\n";

open my $mail, '|-', SENDMAIL, $to or die "Couldn't spawn sendmail: $!\n";

print $mail <<EOD;
From: $from
To: $to
Subject: $subject

$body
EOD

close $mail or die "Couldn't close pipe: $!\n";
When C++ is your hammer, every problem looks like your thumb.
Hoamer
 2008-05-19 18:59
#109941 #109941
User since
2008-05-19
8 Artikel
BenutzerIn
[default_avatar]
Vielen Dank nochmals an Euch beide.

Also das ist schonmal sehr gut, dass dies nicht mein Problem ist....
Wenn ich das das Skript ausführe, dann bekomme ich aber nicht zurück geliefert...keine Ausgabe, keine Mail, garnichts. (Wenn ich deinen Code kopiere, murphy, indem ja auch die teile von Linuxer enthalten sind.)

"Wenn Du die E-Mail an Deinen lokalen MTA weiterreichst, dann ist die Adresse irgendeines SMTP-Servers nicht mehr Dein Problem [...]"
Sry, falls ich iwie blöde Aussagen mache, aber der SMTP-Server ist doch wichtig, da man ja sonst jeden Absender angeben könnte (z.b. auch deine Mailadresse)..oder mache ich nen dummen Denkfehler? oO

Edit: Kann es iwie sein, dass GMX (meine Empfänger- und Senderadresse) die Mails blockt, auch wenn es funktionieren >würde<?
murphy
 2008-05-19 20:48
#109945 #109945
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Hoamer+2008-05-19 16:59:07--
[...]
Wenn ich das das Skript ausführe, dann bekomme ich aber nicht zurück geliefert...keine Ausgabe, keine Mail, garnichts. (Wenn ich deinen Code kopiere, murphy, indem ja auch die teile von Linuxer enthalten sind.)


Ich glaube es ist normal, dass da keine Rückmeldung kommt. Die E-Mail wird heimlich still und leise vom MTA in seine Sendewarteschlange aufgenommen, und das war's. Du kannst vermutlich im Log des MTAs lesen, was weiter passiert.

Quote
"Wenn Du die E-Mail an Deinen lokalen MTA weiterreichst, dann ist die Adresse irgendeines SMTP-Servers nicht mehr Dein Problem [...]"
Sry, falls ich iwie blöde Aussagen mache, aber der SMTP-Server ist doch wichtig, da man ja sonst jeden Absender angeben könnte (z.b. auch deine Mailadresse)..oder mache ich nen dummen Denkfehler? oO


Klar ist der SMTP-Server wichtig, aber den muss nicht den Skript kennen, sondern der MTA. Der muss wissen, was er mit der E-Mail macht. Wenn der MTA nicht richtig konfiguriert ist, versinkt die E-Mail vermutlich im Datennirvana und root bekommt eine lokale E-Mail, die ihn über den Fehler informiert.

Quote
Edit: Kann es iwie sein, dass GMX (meine Empfänger- und Senderadresse) die Mails blockt, auch wenn es funktionieren >würde<?


Es ist sogar sehr wahrscheinlich, dass GMX von irgendeinem dahergelaufenen Sendmail auf Deinem Rechner, der wahrscheinlich auch noch eine dynamische IP hat, keine E-Mails annimmt...
When C++ is your hammer, every problem looks like your thumb.
Hoamer
 2008-05-20 15:34
#109991 #109991
User since
2008-05-19
8 Artikel
BenutzerIn
[default_avatar]
Guten Tag,

bitte entschuldigt meine späte Antwort.
Nachdem ich gestern Abend mit meine Nerven am Ende war, habe ich mich heute morgen wieder an das tolle Problem gewendet.
Ich weiss..."Wie kann man für so eine einfache Aufgabe so lange brauhen?"...naja...ich weiss es auch nicht, aber es funktioniert nicht.

murphy+2008-05-19 18:48:09--
Hoamer+2008-05-19 16:59:07--
[...]
Wenn ich das das Skript ausführe, dann bekomme ich aber nicht zurück geliefert...keine Ausgabe, keine Mail, garnichts. (Wenn ich deinen Code kopiere, murphy, indem ja auch die teile von Linuxer enthalten sind.)


Ich glaube es ist normal, dass da keine Rückmeldung kommt. Die E-Mail wird heimlich still und leise vom MTA in seine Sendewarteschlange aufgenommen, und das war's. Du kannst vermutlich im Log des MTAs lesen, was weiter passiert.

Quote
"Wenn Du die E-Mail an Deinen lokalen MTA weiterreichst, dann ist die Adresse irgendeines SMTP-Servers nicht mehr Dein Problem [...]"
Sry, falls ich iwie blöde Aussagen mache, aber der SMTP-Server ist doch wichtig, da man ja sonst jeden Absender angeben könnte (z.b. auch deine Mailadresse)..oder mache ich nen dummen Denkfehler? oO


Klar ist der SMTP-Server wichtig, aber den muss nicht den Skript kennen, sondern der MTA. Der muss wissen, was er mit der E-Mail macht. Wenn der MTA nicht richtig konfiguriert ist, versinkt die E-Mail vermutlich im Datennirvana und root bekommt eine lokale E-Mail, die ihn über den Fehler informiert.

Quote
Edit: Kann es iwie sein, dass GMX (meine Empfänger- und Senderadresse) die Mails blockt, auch wenn es funktionieren >würde<?


Es ist sogar sehr wahrscheinlich, dass GMX von irgendeinem dahergelaufenen Sendmail auf Deinem Rechner, der wahrscheinlich auch noch eine dynamische IP hat, keine E-Mails annimmt...


Jop, ich werde vom SMTP-Server abgewiesen, was auch in den Logs zu sehen ist.

Aber wie soll ich nun weiter vorgehen, wenn ich keinen SMTP-Server finde, welcher mich drauf lässt?
Einen selber Einrichten kann ich hier leider nicht (würde ich machen, aber darf ich leider nicht)


Habe mir folgendes Vorgehen vorgestellt...:

1.PHP-Formular:
Daten werden vom User Eingegeben (Mail-Adresse (Abfrageanweisungen, was hier eig. nicht dazu gehört)) etc.)
|
V
2.Übergeben der Daten, Auswertung...:
Daten werden an Perl-Skript übergeben, Datei wird
mit Ausgagsdaten als Inhalt erzeugt (.txt)
|
V
3.Senden von Daten:
Daten werden auf Server gespeichert und per PHP-Mailer geschickt


Würde mich aber auch sehr über andere Vorschläge, die vielleicht einfacher sind freuen. :)



MfG
Hoamer

PS: Einen kostenlosen Webserver, welcher Perl unterstützt habe ich leider nicht ergooglen können - binsch dumm?^
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2008-05-19 17:05.