Archief - PERL: wat is er fout aan dit mailscript?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Rayne Varga

Legacy Member
Ik heb een mailscript in Perl, maar dit lijkt niet te werken. Ik zie echt niet wat eraan mankeert en het komt uit een tutorial, dus ik veronderstel dat alles zou moeten kloppen.

Deze gegevens heb ik gevonden op de statuspagina van de host:

Perl path : /usr/bin/perl
Sendmail path : /usr/sbin/sendmail

Dit is mijn script:

Code:
#!/usr/bin/perl
use CGI;

my $query    = new CGI;
my $sendmail = "/usr/sbin/sendmail -t";
my $subject  = "Subject: ....";
my $content  = $query->param('content');
my $to       = "[email protected]";

open(SENDMAIL, "|$sendmail") or die "Cannot open $sendmail: $!";
print SENDMAIL $subject;
print SENDMAIL $to;
print SENDMAIL "Content-type: text/plain\n\n";
print SENDMAIL $content;
close(SENDMAIL);

print $query->header;
print "E-mail verzonden";

Het bericht e-mail verzonden verschijnt wel, maar ik ontvang geen mail.

Dit is het form dat ik gebruik:

Code:
<form action="mail.pl" method="post">
<table width="800" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="800"><textarea name="content" rows="7" cols="50">De volgende platen zijn besteld:\n\n$content</textarea></td>
</tr>
<tr>
<td align="center"><input type="submit" value="verzenden" />
</table>
</form>

$content is wat tekst gegenereerd dmv PHP.
Het perl bestand is ingesteld met CHMOD op 755.

Sick`

Legacy Member
krijg je een error? indien error 500, zet eens op de 1ste regel:
#!/usr/bin/perl -w

en de 2de:
use CGI::Carp qw(fatalsToBrowser);

dan krijg je errors te zien als het al kan compileren.

en verander:
my $to = "[email protected]";
naar:
my $to = "mijnmailadres\@pandora.be";

als je @ niet escaped anziet die '@pandora' als een array.

en zeker zijn dat je upload in ASCII

*edit*

ik moet er wel bijzeggen dat het script vrij onveilig is.

Rayne Varga

Legacy Member
Ik krijg geen error 500.
$to heb ik aangepast.
Maar het lijkt nog steeds niet te werken.

Hoezo is het script onveilig? Het wordt trouwens maar door 2 personen gebruikt, dus zo'n enorm groot probleem is dat ook niet.
Weet je misschien een ander en beter alternatief?

Rayne Varga

Legacy Member
Niemand meer die mij kan helpen? De thread was intussen al op de 3e pagina beland :sad:

servi

Legacy Member
wat ook kan is dat sendmail slecht geconfigureerd is, controleer voor alle veiligheid maar eens of je gewoon handmatig een mail kan versturen met sendmail.

Rayne Varga

Legacy Member
servi zei:
wat ook kan is dat sendmail slecht geconfigureerd is, controleer voor alle veiligheid maar eens of je gewoon handmatig een mail kan versturen met sendmail.

en hoe doe ik dat? ik vind daar nergens informatie over

Sick`

Legacy Member
als ze mini_sendmail usen moet je de -t switch weglaten (bij sommige versies werkt die niet en is die default actief).

een andere methode is via SMTP versturen, dan moet die module natuurlijk wel op de server aanwezig zijn:

Code:
#!/usr/bin/perl

use CGI qw(header param);
use Net::SMTP;

my $subject = "Mail test";
my $content = param('content');
my $to = '[email protected]';
my $from = '[email protected]';
my $relay = 'localhost';
my $smtp = Net::SMTP->new($relay);

die "SMTP session failed: $!" if (! defined $smtp);

$smtp->mail($from);
$smtp->mail($to);

$smtp->data();
$smtp->datasend("To: $to\n");
$smtp->datasend("From: $from\n");
$smtp->datasend("Subject: $subject\n");
$smtp->datasend("\n");
$smtp->datasend("$content\n");
$smtp->dataend();
$smtp->quit();

print header;
print "E-mail verzonden";

Als ge nu ne 500 error krijgt betekent het dat de module niet aanwezig is of dat localhost geen SMTP connections ontvangt.

Rayne Varga

Legacy Member
Sick` ik heb nu dat scriptje van jou gebruikt. Ik krijg weer geen error. Er verschijnt mooi "e-mail verzonden" zoals het moet, maar ik krijg nog altijd geen mail :confused:
Ik heb nog eens gecontroleerd of het tekstvak de naam content heeft, dat klopt. En ik heb ook mijn e-mailadres aangepast in het perl-scriptje.
Ik begin me toch serieus af te vragen waarom dat maar niet wil werken.

Sick`

Legacy Member
add onderaan eens een keer:

print "<br>\nText:<br>\n<br>\n$content";

iets van text dan te zien?

Rayne Varga

Legacy Member
Sick` zei:
add onderaan eens een keer:

print "<br>\nText:<br>\n<br>\n$content";

iets van text dan te zien?

$content bevat wel degelijk tekst aangezien ik die al laat afprinten in een tekstvak (eerst gegenereerd ahv PHP). Dat tekstvak heet 'content' en zou moeten doorgestuurd worden. Trouwens, als $content leeg zou zijn, zou ik normaal gezien toch gewoon een lege mail moeten krijgen, of niet?

Sick`

Legacy Member
is normaal, probeer anders eens je script op .cgi te laten eindigen in plaats van .pl? het kan zijn dat .pl gelinkt is aan mod_perl en dan heb je het raden welk er allemaal preloaded is (Tainting ofzo staat misschien aan).

Rayne Varga

Legacy Member
Sick` zei:
is normaal, probeer anders eens je script op .cgi te laten eindigen in plaats van .pl? het kan zijn dat .pl gelinkt is aan mod_perl en dan heb je het raden welk er allemaal preloaded is (Tainting ofzo staat misschien aan).

Dan krijg ik een internal server error (500).

Sick`

Legacy Member
zet dan eens vlak onder my $content... :

$content = $content =~ m!^(.+)$! ? $1 : "";

*edit* bij de .pl file eh, niet de .cgi

Rayne Varga

Legacy Member
Sick` zei:
zet dan eens vlak onder my $content... :

$content = $content =~ m!^(.+)$! ? $1 : "";

*edit* bij de .pl file eh, niet de .cgi

Dan gebeurt net hetzelfde als voorheen. Nieuwe pagina met tekst "e-mail verzonden" wordt geladen, maar ik ontvang niks.

Sick`

Legacy Member
dan zou ik bij je host eens vragen om de error logs te mogen bekijken :p
khad zo ook overlaatst iet super weird, die manne hadde niet eens een /dev/stdout of /dev/stdin :ironic:
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan