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

Probs beim Mailversand



<< >> 7 Einträge, 1 Seite
Gast Gast
 2006-01-16 18:31
#6649 #6649
Hallo Leute,

ich habe ein Problem mit einem selbstgeschriebenen Script, welches Formulardaten entgegennimmt und anschließend eine simple Mail versenden soll. Das Script selber managt 2 Formulare. Das Problem: Bei Formular #1 versendet das Script eine Mail, bei Formular #2 jedoch nicht. Ich habe leider keinen Zugriff auf das Error-Log und kann damit nicht erkennen, warum das Script beim 2. Formular keine Mail sendet.

Hier die relevanten Codeteilen
Formular #1
Code: (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
}
else
{
open FILE, "$ENV{DOCUMENT_ROOT}/cgi-bin/retusche_abgeschlossen.htm";
print $_ while <FILE>;
close FILE;

$params{address} == 1 ? $params{address} = 'Frau' : $params{address} = 'Herr';
$params{light} = 'Ja' if $params{light} == 1;
$params{light} = 'Nein' if $params{light} == 2;
$params{light} = 'Wenn empfohlen' if !$params{light};
$params{contrast} = 'Ja' if $params{contrast} == 1;
$params{contrast} = 'Nein' if $params{contrast} == 2;
$params{contrast} = 'Wenn empfohlen' if !$params{contrast};
$params{color} = 'Ja' if $params{color} == 1;
$params{color} = 'Nein' if $params{color} == 2;
$params{color} = 'Wenn empfohlen' if !$params{color};


open MAIL, "| /usr/sbin/sendmail -t";
print MAIL "To: ***\@***\n";
print MAIL "From: ***\@***\n";
print MAIL "Subject: Ein neuer Retuscheauftrag ist eingegangen!\n";
print MAIL "\nAuftraggeber: $params{address} $params{firstname} $params{lastname}\n\n";
print MAIL "Anschrift:\n";
print MAIL "----------\n";
print MAIL "$params{addressline}\n";
print MAIL "$params{zip} $params{city}\n\n";
print MAIL "Festnetz: $params{phone}\n" if $params{phone};
print MAIL "Handynummer: $params{mobile}\n" if $params{mobile};
print MAIL "Der Auftraggeber" if $params{address} eq 'Herr';
print MAIL "Die Auftraggeberin" if $params{address} eq 'Frau';
print MAIL " hat folgende Wünsche:\n";
print MAIL "--------------------------------------\n";
print MAIL "Belichtungskorrektur: $params{light}\n";
print MAIL "Kontrastkorrektur: $params{contrast}\n";
print MAIL "Farbkorrektur: $params{color}\n\n";
print MAIL "Weiterhin wurden folgende Bemerkungen hinterlassen:\n---------------------------------------------------\n$params{comment}" if $params{comment};
print MAIL "\nEs wird um Rückruf gebeten!\n" if $params{rcall} && $params{phone};
print MAIL "\n\nAbschluss Auftragsformular\n";
close MAIL;
}

Formular #2
Code: (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
}
else
{
open FILE, "$ENV{DOCUMENT_ROOT}/cgi-bin/scan_abgeschlossen.htm";
print $_ while <FILE>;
close FILE;

open MAIL, "| /usr/sbin/sendmail -t" or die$!;
print MAIL "To: ***\@***\n";
print MAIL "From: ***\@***\n";
print MAIL "Subject: Ein neuer Scanauftrag ist eingegangen!\n";
print MAIL "\nAuftraggeber: $params{address} $params{firstname} $params{lastname}\n\n";
print MAIL "Anschrift:\n";
print MAIL "----------\n";
print MAIL "$params{addressline}\n";
print MAIL "$params{zip} $params{city}\n\n";
print MAIL "Festnetz: $params{phone}\n" if $params{phone};
print MAIL "Handynummer: $params{mobile}\n" if $params{mobile};
print MAIL "Der Auftraggeber" if $params{address} eq 'Herr';
print MAIL "Die Auftraggeberin" if $params{address} eq 'Frau';
print MAIL " hat folgende Aufträge erteilt:\n";
print MAIL "--------------------------------------\n";

my $sth = $dbh->prepare( "SELECT `orderid`, `suborder`, `strip`, `amount`, `orderflags`, `price` FROM `orders` WHERE id = ? ORDER BY `suborder`, `orderid`;" ) or die DBI::errstr;
$sth->execute ( $cookie->{order}->value() );

my $counter = -1;
my ($suborder, $changeflag) = 0;

while( my @rows = $sth->fetchrow_array() )
{
++$counter;
$changeflag = 0;

if( $counter == 0 )
{
$suborder = $rows[1];
}
else
{
if( $suborder == $rows[1] )
{

$changeflag = 1;
}
else
{

print '-------------------------------------------------------------------';

$suborder = $rows[1];
}
} &nbsp
;

my( $resolution, $size, $colordepth );
my @sets = split(',', $rows[4]);

foreach( @sets )
{
$resolution = $_ if $_ =~ /dpi/i;
$colordepth = $_ if $_ =~ /mb/i;
$size = $_ if $_ !~ /dpi/i and $_ !~ /mb/i;
}

print MAIL 'Scans von Kleinbild - glaslosgerahmte Dia\n' if $suborder == 1 && !$changeflag;
print MAIL 'Scans von Kleinbild - Color-Negativ max. 6er Streifen\n' if $suborder == 2 && !$changeflag;
print MAIL 'Scans von Kleinbild - Schwarz-Weiß-Negativ max. 6er Streifen\n' if $suborder == 3 && !$changeflag;
print MAIL 'Rohscans\n' if $suborder == 4 && !$changeflag;
print MAIL 'High-End Scans\n' if $suborder == 5 && !$changeflag;
print MAIL 'Dokumentvorlagen Scans\n' if $suborder == 6 && !$changeflag;
print MAIL "Nr.: $rows[0]\tAnzahl: $rows[3]\tAuflösung: $resolution\tGröße: $size\tAnzahl Streifen: $rows[2]\tGesamtpreis: " . sprintf("%.2f", $rows[5]) . " ¤\n" if $suborder == 1;
print MAIL "Nr.: $rows[0]\tAnzahl: $rows[3]\tGröße: $size\tAnzahl Streifen: $rows[2]\tGesamtpreis: " . sprintf("%.2f", $rows[5]) . " ¤\n" if $suborder == 2;
print MAIL "Nr.: $rows[0]\tAnzahl: $rows[3]\tGröße: $size\tAnzahl Streifen: $rows[2]\tGesamtpreis: " . sprintf("%.2f", $rows[5]) . " ¤\n" if $suborder == 3;
print MAIL "Nr.: $rows[0]\tAnzahl: $rows[3]\tAuflösung: $resolution\tFarbtiefe: $colordepth\tGesamtpreis: " . sprintf("%.2f", $rows[5]) . " ¤\n" if $suborder == 4;
print MAIL "Nr.: $rows[0]\tAnzahl: $rows[3]\tGröße: $size\tGesamtpreis: " . sprintf("%.2f", $rows[5]) . " ¤\n" if $suborder == 5;
print MAIL "Nr.: $rows[0]\tAnzahl: $rows[3]\tAuflösung: $resolution\tGesamtpreis: " . sprintf("%.2f", $rows[5]) . " ¤\n" if $suborder == 6;
}

my ($price, $amount, $media, $delivery);
$sth = $dbh->prepare( "SELECT SUM(`price`) FROM `orders` WHERE id = ?;" ) or die DBI::errstr;
$sth->execute( $cookie->{order}->value() );

$price = $sth->fetchrow_array();
$sth = $dbh->prepare( "SELECT SUM(`amount`) FROM `orders` WHERE id = ? AND `suborder` >= 1 AND `suborder` <= 3;" );
$sth->execute( $cookie->{order}->value() );
$amount = $sth->fetchrow_array;

print MAIL "\n\nZwischensumme: " . sprintf("%.2f", $price) ." ¤\n";
print MAIL 'Mindermengenzuschlag: 5.00 ¤\n' if $amount < 50;
$price += 5 if $amount < 50;

$media = 'CD-ROM' if $params{media} == 0;
$media = 'DVD-ROM' if $params{media} == 1;
$media = 'DVD-RAM' if $params{media} == 2;
$delivery = 'Vorkasse' if $params{delivery} == 0;
$delivery = 'Nachnahme' if $params{delivery} == 1;
$delivery = 'Abholung' if $params{delivery} == 2;
my @media = ( '3.00', '6.00', '8.00' );
my @delivery = ( '8.00', '15.00', '0.00');

print MAIL "Speichermedium: $media\tAufschlag: $media[$params{media}]\n";
print MAIL "Versandart: $delivery\tAufschlag: $delivery[$params{delivery}]\n";
print MAIL "---------------------------------------------------\n";

$price = $price + $media[$params{media}] + $delivery[$params{delivery}];
print MAIL "Gesamtauftragswert: " . sprintf("%.2f", $price) . "\n";
print MAIL "Weiterhin wurden folgende Bemerkungen hinterlassen:\n---------------------------------------------------\n$params{comment}" if $params{comment};
print MAIL "\n\nAbschluss Auftragsformular\n";
close MAIL;
}


Ich hoffe, Ihr könnt mir helfen :)
Strat
 2006-01-16 20:05
#6650 #6650
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ueberpruefe mal, ob das close erfolgreich ist. wenn man externe kommandos via pipe-open ausfuehrt, bekommt man beim open or die nur dann einen fehler, wenn es das externe kommando nicht gibt oder es aus irgendwelchen gruenden nicht ausgefuehrt werden kann (z.B. mangelnde rechte). wenn waehrend der ausfuehrung was schief laeuft, wird das vom open nicht mehr gemeldet, sondern vom close(MAIL) or die $!; oder so aehnlich
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Dubu
 2006-01-16 21:44
#6651 #6651
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ich sehe da im SQL-Code lauter Backticks statt einfacher Anfuehrungszeichen; ich bezweifle, dass das korrekte Syntax ist. Auch sollten keine Semikolons am Ende der SQL-Befehle stehen.
pq
 2006-01-16 23:18
#6652 #6652
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Dubu,16.01.2006, 20:44]Ich sehe da im SQL-Code lauter Backticks statt einfacher Anfuehrungszeichen; ich bezweifle, dass das korrekte Syntax ist.[/quote]
doch, backticks sind die korrekte syntax, um tabellen-/spalten-namen
zu quoten; so hast du z.b. auch die möglichkeit, sql-schlüsselwörter
als namen zu verwenden.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Dubu
 2006-01-17 01:42
#6653 #6653
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Oha, wieder was gelernt. Danke, pq.
esskar
 2006-01-17 01:50
#6654 #6654
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich würde vorschlagen, dass du im zweiten Formular bei den print Anweisungen das MAIL zu STDOUT änderst und dann schaust, was auf der console rauskommt. wenn du den fehler dann gefunden hast, ersetzt du wieder STDOUT durch MAIL
renee
 2006-01-17 06:18
#6655 #6655
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich wuerde eines der vielen Mail-Module empfehlen...

Und wenn sendmail, dann die Optionen -oit setzen (siehe: http://wiki.perl-community.de/bin/view/Wissensbasis/CgiSicherheit)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 7 Einträge, 1 Seite



View all threads created 2006-01-16 18:31.